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

» AutoIT

Автор: XpycTMD
Дата сообщения: 11.05.2008 15:18
NIKZZZZ

Спасибо.

А если скрипт запускать не через командную строку а как скомпилированый exe фаил
Автор: NIKZZZZ
Дата сообщения: 11.05.2008 15:33
XpycTMD

Цитата:
А если скрипт запускать не через командную строку а как скомпилированый exe фаил

В последних бетках есть у компилятора есть опция, позволяющая выводить в стандартный поток вывода.
Так-же посмотри в описании "Command Line Parameters" - не пробовал, но судя по описанию можно запустить скомпилированный скрипт аналогичным образом.


Автор: ViSiToR
Дата сообщения: 11.05.2008 15:35
gregaz 10:05 11-05-2008
Цитата:
предусмотреть  и возможность  добавки файлов с предварительной очисткой окна ?

Можно, я позже перезалью полностью библиотеку (там ещё пару изменении есть).

XpycTMD
Если запускать с другого скомпилированного скрипта, то можно читать StdOut поток таким образом:


Код:
$sStdOutRead = _RunStdOutRead(@ScriptDir & "\SomeCompiledScript.exe")

FileWrite("Errors.txt", $sStdOutRead)

Func _RunStdOutRead($sScriptToRun)
Local $iPID = Run(@AutoItExe & ' /ErrorStdOut /AutoIt3ExecuteScript "' & $sScriptToRun & '"', @ScriptDir, '', 2 + 4)
Local $sStdOutRead = ""

While ProcessExists($iPID)
$sStdOutRead &= StdoutRead($iPID)
WEnd

Return
$sStdOutRead
EndFunc
Автор: XpycTMD
Дата сообщения: 11.05.2008 16:07
ViSiToR
Спасибо

В принципе вариант с запуском из коммандной строки мне подходит. Всеравно скрипт запускается при помощи nnCron
Просто хотелось узнать может можно как то читать StdOut поток из скомпилированного скрипта.
Автор: ViSiToR
Дата сообщения: 11.05.2008 16:22
XpycTMD 17:07 11-05-2008
Цитата:
из самого скомпилированного скрипта такие ошибки никак отловить нельзя

Ну почему, можно таким же образом запустить себя:


Код: #NoTrayIcon

; Проверка ком. строки и перезапуск в "тихом" режиме
If Not StringRegExp($CmdLineRaw, '(?i)^/ErrorStdOut(?:\s|$)') Then
$iPid = Run(@AutoItExe & ' /ErrorStdOut ' & $CmdLineRaw, @ScriptDir, 0, 2)
_ScriptWriteErrLog($iPid)
Exit
EndIf


; Текст скрипта (пример ошибочной команды)
MsgBox(0, "", $Undeclared_Var)

; Сохранение ошибок в лог-файле
Func _ScriptWriteErrLog($iPid)
Local $sLogFile = StringTrimRight(@ScriptFullPath, 3) & 'log'
Local $sStdOutRead = ''

FileWrite($sLogFile, @YEAR & '/' & @MON & '/' & @MDAY & ', ' & @HOUR & ':' & @MIN & ':' & @SEC & @CRLF)

While ProcessExists($iPid)
$sStdOutRead = StdoutRead($iPid)
If @error Then ExitLoop

FileWriteLine($sLogFile, $sStdOutRead)
Wend
EndFunc
Автор: NIKZZZZ
Дата сообщения: 11.05.2008 16:25
XpycTMD

Цитата:
можно как то читать StdOut поток из скомпилированного скрипта.

При компиляции в бета-версии ставишь галку "Create CUI instead of GUI EXE." , после этого получается стандартный поток StdOut, который можно перенаправить куда угодно, например в файл.

Код: Test.exe>TestLog.txt
Автор: Mister_Che
Дата сообщения: 11.05.2008 18:59
Maza Faka, как сделать, чтоб твой скрипт заработал?
Автор: ViSiToR
Дата сообщения: 12.05.2008 00:17
NIKZZZZ 17:25 11-05-2008
Цитата:
его можно скомпилировать как пускач.

Мой пример показывает как использовать скрипт, с выводом ошибок в файл. С CUI будет тоже самое, только будут разные процессы.

Mister_Che
Что имеется в виду под «чтобы все слова в нем перемешались»?
Автор: zero1632
Дата сообщения: 12.05.2008 00:23

Подскажите как сделать из целого, или дробного числа, число вида xxxx.xxxx
То есть чтобы получилось было 0123.3450
Если после точки можно сделать через $New=StringFormat ("%.4f",$old), то как добавить нули для выравнивания - не пойму.

Еще пара вопросов. Если не делать свою менюшку, то из трея можно вызвать стандартное autoit меню со script paused и выходом. Так вот, если сделать свою менюшку, надо периодически (и лучше как можно чаще) опрашивать, не нажата ли та же меню выхода. А когда идет процесс допусти поиска файлов, то отвлекаться и так не хочется. Стандартное же реагирует сразу, без задержек. Можно ли сделать сове менюшку, но чтобы не тормозило так?

Каким образом заставить аutoit не выводить в случае ошибок никаких сообщений, а просто выходить c определенным errorlevel, например в случае вылезания variable not defined?
Автор: gregaz
Дата сообщения: 12.05.2008 03:16

Цитата:
gregaz 10:05 11-05-2008
Цитата:предусмотреть и возможность добавки файлов с предварительной очисткой окна ?


Можно, я позже перезалью полностью библиотеку (там ещё пару изменении есть).

Спасибо большое я получил именно то,что хотел
Теперь похоже можно управлять WINAMPом из скрипта (без диалоговых окон)

Похоже пока еще не давал ф-ии _Winamp_GetPLPosition() ?
Автор: Loopback
Дата сообщения: 12.05.2008 15:55

Цитата:
Подскажите как сделать из целого, или дробного числа, число вида xxxx.xxxx
То есть чтобы получилось было 0123.3450
Если после точки можно сделать через $New=StringFormat ("%.4f",$old), то как добавить нули для выравнивания - не пойму.

Да, стандартным способом вроде не сделать. Ну можно математикой выкрутиться:

Код: $n = 123.3450
MsgBox (0, "", StringFormat("%04d.%04d", Int($n), Round(Mod($n, Int($n))*10000)))
Автор: Mister_Che
Дата сообщения: 13.05.2008 22:01
ViSiToR

Цитата:

Mister_Che
Что имеется в виду под «чтобы все слова в нем перемешались»?

Чтобы текст "Осенняя пора - очей очарованье." стал, например, "пора - очарованье. Осенняя очей".
Автор: NIKZZZZ
Дата сообщения: 14.05.2008 04:15
zero1632

Цитата:
Подскажите как сделать из целого, или дробного числа, число вида xxxx.xxxx



Код: $New=StringRight('0000' & StringFormat ("%.4f",$old),9)
Автор: ViSiToR
Дата сообщения: 14.05.2008 07:09
gregaz 04:16 12-05-2008
Цитата:
Похоже пока еще не давал  ф-ии  _Winamp_GetPLPosition() ?

Выложил полную версию библиотеки автоматизации Winamp'ом.


Добавлено:
Mister_Che 23:01 13-05-2008
Цитата:
Чтобы текст "Осенняя пора - очей очарованье." стал, например, "пора - очарованье. Осенняя очей".

Примерно так:


Код:
$sVar = "Осенняя пора - очей очарованье."

$aWords = StringRegExp($sVar, "\s*([а-яА-Яa-zA-Z0-9-_\.]+)\s*", 3)
$sVar = ""

_ArrayRandomize($aWords)

For $i = 0 To UBound($aWords)-1
$sVar &= $aWords[$i] & " "
Next

MsgBox(0, "", StringStripWS($sVar, 3))

Func _ArrayRandomize(ByRef $avArray, $iBase=0)
Local $iRandom, $sTemp, $iUbound = UBound($avArray)-1

For $i = $iBase To $iUbound
$sTemp
= $avArray[$i]
$iRandom = Random($i, $iUbound, 1)
$avArray[$i] = $avArray[$iRandom]
$avArray[$iRandom] = $sTemp
Next
EndFunc
Автор: Maza Faka
Дата сообщения: 14.05.2008 07:37
Mister_Che
Тебе уже приводили пример

Код: #include <Array.au3>

$str = "Осенняя пора - очей очарованье."

$aWord = StringSplit($str, " ")

;_ArrayReverse($aWord, 1)

_ArraySwap($aWord[1], $aWord[2])
_ArraySwap($aWord[3], $aWord[4])

_ArrayDisplay($aWord)
Автор: gregaz
Дата сообщения: 14.05.2008 17:26
ViSiToR
Цитата:
Выложил полную версию библиотеки автоматизации Winamp'ом.


ViSiToR , Спасибо.
На мой взгляд поскольку есть ф-ия _Winamp_SetVolume желательно иметь и _Winamp_GetVolume



Автор: Maza Faka
Дата сообщения: 15.05.2008 06:44
gregaz

Цитата:
желательно иметь и _Winamp_GetVolume

Ну и добавь, раз нужно

Код: Global Const $sWINAMP_CLASS = "[CLASS:Winamp v1.x]"
Global Const $WM_WA_IPC = 0x0400
Global Const $IPC_SETVOLUME = 122

$hWinamp = WinGetHandle($sWINAMP_CLASS)

$aRet = DllCall("user32.dll", "int", "SendMessage", "hwnd", $hWinamp, "int", $WM_WA_IPC, "int", -666, "int", $IPC_SETVOLUME)

ConsoleWrite("Current volume in value: " & $aRet[0] & @LF & _
"In percent: " & Int($aRet[0] / 255 * 100) & "%" & @LF)
Автор: gregaz
Дата сообщения: 15.05.2008 07:15
Maza Faka , спасибо
Автор: ViSiToR
Дата сообщения: 15.05.2008 07:21
Maza Faka
Откуда инфа о «-666» ?
Автор: Maza Faka
Дата сообщения: 15.05.2008 07:50
ViSiToR
Набрёл в Гугле. Хорошо, что с минусом, а то бы побоялся использовать
Автор: sam117
Дата сообщения: 16.05.2008 06:39
Здраствуйте, возникли сложности со скриптом приведенным ниже

WinActivate("Radmin Viewer")
    Send("{ENTER}")


if WinWaitActive("Система безопасности Radmin:", "Имя пользователя:") Then
    MsgBox(0, "Info", "ЛОГИН+ПАРОЛЬ")
EndIf

if WinWaitActive("Система безопасности Radmin:", "Введите пароль:") Then
MsgBox(0, "Info", "ПАРОЛЬ")

EndIf

Exit


Проблема в том, что проверка второго условия выполняется только после того как сработает первое, а мне нужно что бы они были независимы друг от друга, тоесть могли выполнятся в независимой последовательности

[b][s]Добавлено:[/s][/b]
и ещё вопрос, есть функция WinWaitActive, и все бы нечего, но только в заголовке первое слово при каждом запуске постоянно меняется, не изменным остается второе слово в заголовке. Как сделать так, что бы парсила второе слово а не первое?
Автор: Loopback
Дата сообщения: 16.05.2008 11:27

Цитата:
Здраствуйте, возникли сложности со скриптом приведенным ниже

Я так понимаю, что есть серверы версий 2 и 3, у которых разные диалоги. Проще всего, вместо функции WinWaitActive использовать цикл и WinActive:

Код: While 1
if WinActive("Система безопасности Radmin:", "Имя пользователя:") Then
MsgBox(0, "Info", "ЛОГИН+ПАРОЛЬ")
Exit
EndIf

if
WinActive("Система безопасности Radmin:", "Введите пароль:") Then
MsgBox(0, "Info", "ПАРОЛЬ")
Exit
EndIf


Sleep(500)
Wend
Автор: ViSiToR
Дата сообщения: 16.05.2008 13:01
sam117 07:39 16-05-2008
Цитата:
нужно что бы они были независимы друг от друга

Они и так не зависимы, тут вопрос скорее всего в том, дожидается ли скрипт окна с заголовоком "Система безопасности Radmin:".


Цитата:
в заголовке первое слово при каждом запуске постоянно меняется

Нужно использовать REGEXPTITLE:


Код: WinWaitActive("[REGEXPTITLE:(?i)(.*)Radmin:]", "Имя пользователя:")
Автор: ViSiToR
Дата сообщения: 16.05.2008 22:19
Обновился AutoIt 3.2.12.0!

Список изменении тут, если сильно попросите переведу на русский

Из приятного и долгожданного:

* Убрана опция «RunErrorsFatal», теперь естественно она по умолчанию задействована.
* К Inet-функциям теперь добавляется User Agent, многие сайты блокируют доступ при пустой строке юзер агента.
* Максимальное число создаваемых GUI-окон выросло до 65532.
* Добавлен GUISetAccelerators(), я о нём кажется уже писал ранее.
* Добавили REGEXPCLASS в расширенное распознавание заголовков окон (по моей просьбе ).
* FileReadLine( ,-1) теперь читает последнюю строку в файле.
* Добавили GUICtrlSetDefColor() и GUICtrlSetDefBkColor(), ох сколько я этого ждал, тоже по моей просьбе.
* Добавили Hwnd параметр для функции: MsgBox(), FileSelectFolder(), FileOpenDialog(), FileSaveDialog(). А сколько этого я ждал и просил....

Хеппи скриптинг!
Автор: NIKZZZZ
Дата сообщения: 17.05.2008 08:57

Цитата:
Обновился AutoIt 3.2.12.0!

Добавлю - при компиляции с опцией "Create CUI instead of GUI EXE." идет нормальный вывод в StdOut !
Автор: gregaz
Дата сообщения: 19.05.2008 09:54
В выложенной библиотеке Winamp_Library есть ф-я : _Winamp_GetPlayListToArray() ,
выдающая массив имен треков плейлиста .
Как можно получить этот массив с полными путями к трекам ?
Автор: gsmschik
Дата сообщения: 19.05.2008 10:53
Господа, решил ознакомится с этой программой. Сразу возник первый вопрос.
Запускаю скрипт:


Код: Send("#r")
WinWaitActive("Run")
Send("notepad.exe{Enter}")
Автор: Maza Faka
Дата сообщения: 19.05.2008 11:34
gsmschik
Какая версия Windows? У меня работает с таким заголовком: "Запуск программы"
Автор: gsmschik
Дата сообщения: 19.05.2008 11:38
Maza Faka
Тоже самое, без изменений. Пробовал по другому, всё равно выполняется первая строка, а потом вечная пауза.

Виндовс, ХР немецкий.
Автор: Loopback
Дата сообщения: 19.05.2008 11:52

Цитата:
Виндовс, ХР немецкий.

Так потому и не работает - заголовок окна запуска в каждой локализованной версии свой, а скрипт ждет окно "Run" (или "Запуск программы" в русской версии). Выполни Win+R вручную, посмотри заголовок окна и используй WinWaitActive с этим текстом.

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192

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


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