Ru-Board.club
← Вернуться в раздел «Программы»

» AutoIT

Автор: gmbh2
Дата сообщения: 26.09.2007 14:05
Как сделать относительный путь к запускаемому файлу?
запускаемый файл лежит в папке data, 2 варианта и оба не работают.


Код: Run("start.bat", "data")
и
Run("data\start.bat")
Автор: kefirko
Дата сообщения: 26.09.2007 17:37
ViSiToR, вот спасибо, то что надо

Еще вопрос.
А как изменять количество опций в меню?
К примеру было:
opt
option1
option2
option3

Допустим в "opt" можно установить количество "option" от 0 до 3.
Будет:
opt
option1
option3

Как это сделать?
Автор: Maza Faka
Дата сообщения: 26.09.2007 17:58
kefirko

Цитата:
как изменять количество опций в меню?

В справке посмотри:

TrayCreateMenu
TrayCreateMenuItem


Добавлено:
gmbh2

Код:
Run(@ScriptDir & "\data\start.bat")
Автор: SanjaAlone
Дата сообщения: 26.09.2007 19:05
gmbh2

Цитата:
будто запускается снаружи там же где и запускаущий его файл. в чем здесь дело?

Дело в том, что рабочий каталог при подобном запуске не изменяется (им является каталог из к-рого запустили скрипт) и, если в батнике исп-ся относительные пути, то он перестанет работать как следует. Можно, конечно, переписать батник используя полные пути (%~d0 и %~dp0 помогут), но в данном случае лучше сделать так:

Код: FileChangeDir("data")
Run("start.bat")
Автор: gmbh2
Дата сообщения: 26.09.2007 20:32
SanjaAlone спасибо.

Maza Faka так же спасибо, но ваш вариант в данном случае не работает, по всей видимости из-за относительных путей в батнике.

Автор: kefirko
Дата сообщения: 26.09.2007 22:55
Maza Faka, ты меня не так понял. Про эти команды я знаю. Вопрос в другом.
Есть скрипт. В трее висит програмка необходимо в ней установить количество показываемых пунктов.

Код:
Opt("TrayMenuMode", 1)
$opt=TrayCreateItem("Количество пунктов в меню")
$option1=TrayCreateItem("Пункт 1")
$option2=TrayCreateItem("Пункт 2")
$option3=TrayCreateItem("Пункт 3")
TrayCreateItem("")
$exititem=TrayCreateItem("Exit")
While 1
$tgm=TrayGetMsg()
Select
Case $tgm=$opt
$var=InputBox("", "Напишите необходимое количество", "1")
Case $tgm=$exititem
ExitLoop
EndSelect
WEnd
Автор: ViSiToR
Дата сообщения: 27.09.2007 01:22
kefirko

Цитата:
Я не сохранял в файл, а просто вставил текст, "раскрасил", а потом нажал "Копировать и закрыть программу"

Я так часто делаю, и всё нормально, возможно не со SciTE копируется текст?


Цитата:
если бы у тебя в программе работало Ctrl+A, было бы еще лучше.

Сделаю (и кстати, там есть ещё одна мелкая ошибка - если из SciTE редактора вызывать программу, и если в последний раз использовался метод ввода кода вручную, то птичка сама не снимается, и поэтому код из скайта не виден сразу (пока не нажать со-нную птичку)).


Цитата:
В трее висит програмка необходимо в ней установить количество показываемых пунктов

Это не так просто... нужно в массив занести ID пунктов если требуются динамичные пункты... а также нужно учитывать что эти пункты находятся между другими, поэтому нужно сначала удалять последние и только потом создавать новые (и удалённые тоже) вставлять до последнего созданного элемента.

Вот пример с комментариями:


Код:
HotKeySet("^i", "Input")
Opt("TrayMenuMode", 1)

Global $OptionsArray[4]
Global $DefaultNumber = 1

$ChooseOption = TrayCreateItem("Указать количество пунктов в меню...")

For $i = 1 To UBound($OptionsArray)-1
$OptionsArray[$i] = TrayCreateItem("Пункт " & $i)
Next

$Seperator = TrayCreateItem("")
$ExitItem = TrayCreateItem("Exit")

While 1
$TrayMsg = TrayGetMsg()

Switch $TrayMsg
Case $ExitItem
Exit
Case $ChooseOption
Input()
EndSwitch
WEnd

Func Input()
$Ubound = UBound($OptionsArray) ;Общее число пунктов + 1 (чтобы не считать каждый раз)

While 1
$Var = InputBox("", "Напишите необходимое количество", $DefaultNumber)
If @error Then Return ;Если нажата "Отмена" то выходим из функции
$Var = StringRegExpReplace($Var, '[^0-9]', '')

;Проверяем ввёл ли юзер лигитимное число
If $Var = '' Then
MsgBox(48, "Внимание!", "Введено не верное число (или вовсе не число)" & @LF & "Введите ещё раз..", 5)
ContinueLoop
EndIf
ExitLoop
WEnd

;Если юзер ввёл одинаковое число что и пунктов меню, то ничего не делаем
If $Var = $Ubound-1 Then Return

;Если введено больше пунктов, то просто добавляем...
If $Var > $Ubound-1 Then
ReDim $OptionsArray[$Var+1]
For $i = $Ubound To $Var
$OptionsArray[$i] = TrayCreateItem("Пункт " & $i, -1, $i)
Next
Else ;если меньше, то удаляем лишние
For $i = $Var+1 To $Ubound-1
TrayItemDelete($OptionsArray[$i])
Next
ReDim $OptionsArray[$Var+1]
EndIf

$DefaultNumber = $Var ;Чтобы запоминалось последнее введённое число
EndFunc
Автор: ViSiToR
Дата сообщения: 27.09.2007 04:29
Немного подправил свой предыдущий пост, я забыл что не обязательно удалять последние пункты чтобы вставить между ними, можно использовать второй параметр как -1 у команды TrayCreateItem(), и тогда будут создаваться пункты перед последним созданным.
И ещё пару подправок кроме прочего.
Автор: euheny
Дата сообщения: 27.09.2007 07:13
ViSiToR

Цитата:
Можно через Rasdial...

Хотел бы посмотреть ...
Автор: ViSiToR
Дата сообщения: 27.09.2007 07:32
euheny

Цитата:
Хотел бы посмотреть



Код:

ReConnect("Adsl", "MyName", "MyPass", 2)

Func Connect($ConnectionName, $UserName, $Password)
Run('Rasdial "' & $ConnectionName & '" "' & $UserName & '" "' & $Password & '"', '', @SW_HIDE)
EndFunc

Func DisConnect()
Run('Rasdial /Disconnect', '', @SW_HIDE)
EndFunc

Func ReConnect($ConnectionName, $UserName, $Password, $Wait=0)
DisConnect()
If $Wait Then Sleep($Wait * 1000)
Connect($ConnectionName, $UserName, $Password)
EndFunc
Автор: XpycTMD
Дата сообщения: 27.09.2007 08:41
ViSiToR
Спасибо буду пробовать
Автор: euheny
Дата сообщения: 28.09.2007 00:11
ViSiToR

а так :


Код: [no]If $CmdLine[0] = 4 Then
If $CmdLine[1] = "dial-up" Then
$tit1 = "Connect dial-up"
$tit2 = "Network Connections"
Run(@ComSpec & ' /c start "" ' & "rasphone.exe", "", @SW_HIDE)
WinWait($tit2, "", 5)
ControlCommand($tit2, "", "Button1", "Check", "Button")
WinWait($tit1, "", 5)
ControlFocus($tit1, "", "Edit1")
ControlSend($tit1, "", "Edit1", "{DEL 11}")
ControlCommand($tit1, "", "Edit1", "EditPaste", $CmdLine[3])
ControlCommand($tit1, "", "Edit2", "EditPaste", $CmdLine[4])
ControlFocus($tit1, "", "Edit3")
ControlSend($tit1, "", "Edit3", "{DEL 11}")
ControlCommand($tit1, "", "Edit3", "EditPaste", $CmdLine[2])
ControlCommand($tit1, "", "Button4", "Check", "Button")
WinWait($tit2, "", 5)
ControlCommand($tit2, "", "Button2", "Check", "Button")
EndIf
EndIf
[/no]
Автор: ViSiToR
Дата сообщения: 28.09.2007 16:23
Копирование большого файл с отображением данных прогресса:
(Требуется библиотека DllCallBack.au3).


Код:
#include <DllCallBack.au3>

_FileCopyEx("C:\BigFile.avi", @ScriptDir & "\BigFile.avi")

Func _FileCopyEx($Source, $Dest)
If Not FileExists($Source) Then Return SetError(1)
ProgressOn("_FileCopyEx() Demo", "Копирование, ждите плиз...")
$pCopyProgressRoutine = _DllCallBack("_CopyProgressRoutine", "uint64;uint64;uint64;uint64;dword;dword;ptr;ptr;ptr")
DllCall("kernel32.dll", "int", "CopyFileExA", _
"str", $Source, _
"str", $Dest, _
"ptr", $pCopyProgressRoutine, _
"ptr", 0, _
"int", 0, _
"int", 0)
_DllCallBack_Free($pCopyProgressRoutine)
Sleep(1000)
ProgressOff()
EndFunc

Func _CopyProgressRoutine($TotalFileSize, $TotalBytesTransferred, $StreamSize, $StreamBytesTransferred, $dwStreamNumber, $dwCallbackReason, $hSourceFile, $hDestinationFile, $lpData)
$Precent = $TotalBytesTransferred/$TotalFileSize*100
ProgressSet($Precent, "Проценты: " & Round($Precent, 1) & " %")
Return 0
EndFunc ;==>_CopyProgressRoutine
Автор: ViSiToR
Дата сообщения: 29.09.2007 09:21
Обновил Скрипт расскраски кода AutoIt для помещения в форумы (Au3ToPst):

Список изменении:


Цитата:
v1.5
* Исправлена проблема при открытии программы из редактора SciTE - если в последний раз использовалась опция ручного ввода кода, то естественно содержимое скрипта не отображалось, теперь птичка "Ввести код вручную" не будет ставиться если была передана ком. строка.
* Добавленна поддержка Ctrl + A (выделяет весь код в Edit поле).
* В пункт меню редактора SciTe при интеграции теперь подключается и горячая клавиша Ctrl + K.
* Исправлена большая загрузка ЦП при длительных колдовании курсора мышки над полем ввода кода .
* Мелкие ошибки и недочёты поправлены.
Автор: Sergey_Demchuk
Дата сообщения: 29.09.2007 21:42
Почему не работает комманда
RunWait (@ScriptDir & "\Setup.msi /qb")
??


Добавлено:
так тоже не идет
RunWait(@COMSPEC " /c Start Setup.msi /qb serialnumber=ххх")



Добавлено:
Надо запустить на выполнение следующее
setup.exe /s /v "/qb serialnumber=ххх AGREETOLICENSE=YES"
Автор: iglezz
Дата сообщения: 29.09.2007 22:41
Sergey_Demchuk
RunWait (@ComSpec & " /c " & @ScriptDir & "\setup.msi", "", @SW_HIDE)
Автор: Sergey_Demchuk
Дата сообщения: 29.09.2007 23:30
И еще вопрос
При установке приложени устанавливаются файлы setup.msi -> EN.msi -> VBA.msi -> FontNav.msi. То есть setup.msi отрабатывает свое и передает "эстафетную палочку" дальше. Надо чтобы скрипт отслеживал выполнение каждоготиз четырех компонентов и во время выполнения каждого из них приостанавливал выполнение скрипта.
Я думал так

WinWaitActive ( "EN" )
WinWaitClose ( "EN")
WinWaitActive ( "VBA" )
WinWaitClose ( "VBA" )
WinWaitActive ( "FontNav" )
WinWaitClose ( "FontNav" )

Но слишком быстро нав. выполняется последний компонент и скрипт не успевает что ли увидеть окно "FontNav" (компонент FontNav.msi), в результате висит вечно в паузе.
Автор: Petrik Pyatochkin
Дата сообщения: 29.09.2007 23:33
А какая прога лучше nnCron или AutoIT? или у них разные задачи?
Автор: ViSiToR
Дата сообщения: 30.09.2007 01:06
Petrik Pyatochkin

Цитата:
какая прога лучше nnCron или AutoIT?

Я не знаком сильно с nnCron, но судя по синтаксису, AutoIt более удобен - Имхо конечно.
Автор: Maza Faka
Дата сообщения: 30.09.2007 06:35
Sergey_Demchuk
Попробуй так:

Код:
Global $MsiArray[3] = ["EN.msi", "VBA.msi", "FontNav.msi"]

For $i = 0 To UBound($MsiArray) - 1
ShellExecuteWait(@ScriptDir &"\"& $MsiArray[$i], "", "", "", @SW_HIDE)
Next
Автор: Sergey_Demchuk
Дата сообщения: 30.09.2007 10:02
Maza Faka
Нав. немного непонятно обьяснил
Если запустить
setup.msi /qn, то он и так все установит, сначала сам отработает, а затем поочередно запустятся файлы EN.msi -> VBA.msi -> FontNav.msi
Что я делаю. Пакую все в саморасп. архив Winrar и в самом Винраре задаю запуск setup = setup.exe /qn
Так вот винрар после отработки установщика setup.msi считает работу завершенной, и остальные 3 файла ему по барабану, он закрывается и удаляет врем. файлы, так что успевает запустится только EN.msi и то не всегда, остальных два нет. Вот поэтому нужен скрипт, чтоб заставить ВинРАР работать, пока не поставится все что надо. Запускать вручную EN.msi -> VBA.msi -> FontNav.msi не подходит, ибо если вручную запущу, то винрар то будет работать, следовательно цепочка EN.msi -> VBA.msi -> FontNav.msi будет продолжать работать и при этом будет ошибка при вызове двух msi. Может как то через процессы отследить msiexec?
Автор: Sergey_Demchuk
Дата сообщения: 30.09.2007 14:47
Ограничился пока
WinWait ( "FontNav" )
WinWaitClose ( "FontNav" )

Так вроде работает
Автор: HATAK
Дата сообщения: 30.09.2007 22:51
Подскажите.Есть прога в которой работает прогрэсбар\еше одно окно\.

Код: >>>> Window <<<<
Title:    ОКНО
Class:    #32770
Position:    897, 79
Size:    380, 244
Style:    0x94CC0044
ExStyle:    0x00010100

>>>> Control <<<<
Class:    msctls_progress32
Instance:    1
ClassnameNN:    msctls_progress321
ID:    1345
Text:    Generic1
Position:    8, 75
Size:    357, 16
ControlClick Coords:    184, 11
Style:    0x50000000
ExStyle:    0x00020004
Автор: ViSiToR
Дата сообщения: 01.10.2007 02:38
HATAK

Цитата:
Можно ли както вытянуть его\прогрэсбар\ в GUI скрипта.

Не думаю, разве что если программа использует StdOutWrite...
WinRar насколько мне известно, нет (его графическая версия).
Автор: euheny
Дата сообщения: 01.10.2007 07:13
Sergey_Demchuk

Цитата:
Пакую все в саморасп. архив Winrar

пакуй простым, и лучше 7z
Автор: ViSiToR
Дата сообщения: 01.10.2007 12:33
Скрипт для конвертирования выделенного текста (a.k.a SwitchIt ):
(Simple Text Switcher - Готовая программа с исходниками)


Запускаем скрипт, выделяем текст в почти любом Edit поле, и жмё Ctrl ` (ё на рус. раскладке) - текст конвертится в набор символов противоположного языка (Eng - Rus) -> Если функции ConvertText как второй параметр передать 0, то всегда будет конвертировать в Русский, если 1 то в Английский (-1 в противоположный).


Код: #NoTrayIcon
HotKeySet("`", "ConvertProc")
HotKeySet("^q", "Quit")

While 1
Sleep(100)
WEnd

Func
ConvertProc()
Local $OldClip = ClipGet()
ClipPut("")
Send("^{Insert}")
Local $SelectedText = ClipGet()
If $SelectedText = "" Then
HotKeySet("`")
Send("`")
HotKeySet("`", "ConvertProc")
Return
EndIf

Local
$NewClip = ConvertText($SelectedText)

ClipPut($NewClip)
Send("+{Insert}")

Local $LeftJumps = GetLeftJumps($NewClip)
Send("^+{LEFT " & $LeftJumps & "}")

Send("{CTRLDOWN}")
Send("{CTRLUP}")

ClipPut($OldClip)
EndFunc

;If $Mode = 0 Then Russian language used
;If $Mode = 1 Then English language used
;If $Mode = -1 Then String Inverted

Func ConvertText($Text, $Mode=-1)
Local $StringIsUpper = 0, $TextRet = ""
Local $SplitTextArr = StringSplit($Text, "")
Local $LettersArr = GetLettersArr()

For $i = 1 To $SplitTextArr[0]
Local $i_0 = 1, $i_1 = 0
$StringIsUpper = 0
If StringIsUpper($SplitTextArr[$i]) Then $StringIsUpper = 1

If $Mode = 0 Or ($Mode = -1 And StringIsASCII($Text)) Then Local $i_0 = 0, $i_1 = 1

For $j = 1 To $LettersArr[0][0]
If $SplitTextArr[$i] = $LettersArr[$j][$i_0] Then
$SplitTextArr[$i] = $LettersArr[$j][$i_1]
ExitLoop
EndIf
Next

If
$StringIsUpper = 1 Then $SplitTextArr[$i] = StringUpper($SplitTextArr[$i])
$TextRet &= $SplitTextArr[$i]
Next
Return
$TextRet
EndFunc

Func
GetLettersArr()
Local $AnsiStr = "ёйцукенгшщзхъфывапролджэячсмитьбю.?"
Local $AsciiStr = "`qwertyuiop[]asdfghjkl;'zxcvbnm,./&"
Local $StrLenght = StringLen($AnsiStr)

Local $LettersArr[$StrLenght+1][2]

For $i = 1 To $StrLenght
$LettersArr
[$i][0] = StringMid($AsciiStr, $i, 1)
$LettersArr[$i][1] = StringMid($AnsiStr, $i, 1)
Next

$LettersArr[0][0] = $StrLenght

Return $LettersArr
EndFunc

Func
GetLeftJumps($Text)
StringRegExpReplace($Text, '\n', '')
Local $Extended = @extended

$Text = StringStripWS($Text, 3)
$Text = StringRegExpReplace($Text, '\s+|\t+', ' ')
$Text = StringRegExpReplace($Text, '~|`|!|#|%|\^|&|\*|\(|\)|-|\+|=|\{|\}|''|"|;|:|/|\\|<|>|\?|,|\[|\]|ч|Ч|ё|Ё', '|')
$Text = StringRegExpReplace($Text, '\|+', '|')

Local $WordsCountArr = StringRegExp($Text, "[\s\.:;,]*([а-яА-Яa-zA-Z0-9-_]+)[\s\.:;,]*", 3)
StringRegExpReplace($Text, '\|', '')
$Extended += @extended + UBound($WordsCountArr)
Return $Extended
EndFunc

Func
Quit()
Exit
EndFunc
Автор: Kauffman
Дата сообщения: 03.10.2007 16:06
Помогите, кто-нибудь! Никак не пойму как сделать, чтобы нельзя было щелкать по окну пока второе (дочернее) открыто. В VB есть vbModal, а в AutoIt? И ещё тоже самое с стандартными диалогами (открытие файла, сохранение, выбор цвета).
Автор: Maza Faka
Дата сообщения: 03.10.2007 17:09
Kauffman
Можно так:

Код:
#include <GUIConstants.au3>

$main = GUICreate("Main_Gui", 300, 200)
$button = GUICtrlCreateButton("Start", 10, 10, 50, 20)
$dummy = GUICreate("Dummy_Gui", 200, 100, -1, -1, -1, -1, $main)

GUISetState(@SW_SHOW, $main)

While 1
$msg = GUIGetMsg(1)
Select
Case $msg[0] = $GUI_EVENT_CLOSE And $msg[1] = $main
ExitLoop
Case $msg[0] = $GUI_EVENT_CLOSE And $msg[1] = $dummy
GUISetState(@SW_HIDE, $dummy)
GUISetState(@SW_ENABLE, $main)
WinActivate($main)
Case $msg[0] = $button
GUISetState(@SW_DISABLE, $main)
GUISetState(@SW_SHOW, $dummy)
EndSelect
WEnd
Автор: ViSiToR
Дата сообщения: 03.10.2007 18:35
Kauffman

Цитата:
чтобы нельзя было щелкать по окну пока второе (дочернее) открыто

Не уверен что понял... если нужно просто диактивировать родительское окно, то Maza Faka привёл пример, правда WinActivate там лишний ...


Просто меняем порядок @SW_ENABLE и @SW_HIDE и ничего не сворачивается:


Код: #include <GUIConstants.au3>

$main = GUICreate("Main_Gui", 300, 200)
$button = GUICtrlCreateButton("Start", 10, 10, 50, 20)
$dummy = GUICreate("Dummy_Gui", 200, 100, -1, -1, -1, -1, $main)

GUISetState(@SW_SHOW, $main)

While 1
$msg = GUIGetMsg(1)
Select
Case
$msg[0] = $GUI_EVENT_CLOSE And $msg[1] = $main
ExitLoop
Case
$msg[0] = $GUI_EVENT_CLOSE And $msg[1] = $dummy
GUISetState(@SW_ENABLE, $main)
GUISetState(@SW_HIDE, $dummy)
Case $msg[0] = $button
GUISetState(@SW_DISABLE, $main)
GUISetState(@SW_SHOW, $dummy)
EndSelect
WEnd
Автор: euheny
Дата сообщения: 03.10.2007 19:12
Может кто знает как автоматизировать работу 7zip (gui-версию) ?

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192

Предыдущая тема: Quintura Search


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.