|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [Архив - Часть 1.2] AutoIt скрипты |
|
[Архив - Часть 1.2] AutoIt скрипты
|
Ветеран Сообщения: 565 |
Профиль | Сайт | Отправить PM | Цитировать
Внимание! Тема переведена в архивное состояние (настоятельно рекомендуется к прочтению/поиску) Руководство к действию по работе c AutoIt. |
|
------- Отправлено: 10:47, 10-02-2006 |
Старожил Сообщения: 205
|
Профиль | Отправить PM | Цитировать Из скрипта запускается консольный nerocmd.exe. Можно ли как то получить данные, показываемые в консоли для отображения их в GUI автоита?
|
Отправлено: 14:55, 02-11-2006 | #431 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать TERMINAL
Цитата:
ControlCommand("ACDSee 8 - InstallShield Wizard", "Customer Information", "Edit3", "EditPaste", $serial) Цитата:
Opt("WinTitleMatchMode", 4) While 1 Global $serial='12345-67890-12345-67890' Run ( @ScriptDir & '\' & 'Setup.exe' ) WinWait("ACDSee 8 - InstallShield Wizard","ACDSee 8 can run with previous") WinActivate("ACDSee 8 - InstallShield Wizard","ACDSee 8 can run with previous") ControlClick("ACDSee 8 - InstallShield Wizard","ACDSee 8 can run with previous","Button1") WinWait("ACDSee 8 - InstallShield Wizard","I &accept the terms in the lic") WinActivate("ACDSee 8 - InstallShield Wizard","I &accept the terms in the lic") ControlClick("ACDSee 8 - InstallShield Wizard","I &accept the terms in the lic","Button3") ControlClick("ACDSee 8 - InstallShield Wizard","I &accept the terms in the lic","Button5") WinWait("ACDSee 8 - InstallShield Wizard","&Organization:") WinActivate("ACDSee 8 - InstallShield Wizard","&Organization:") ControlClick("ACDSee 8 - InstallShield Wizard","&Organization:","RichEdit20W3") ControlCommand("ACDSee 8 - InstallShield Wizard", "Customer Information", "Edit3", "EditPaste", $serial) ControlClick("ACDSee 8 - InstallShield Wizard","&Organization:","Button8") WinWait("ACDSee 8 - InstallShield Wizard","&Complete") WinActivate("ACDSee 8 - InstallShield Wizard","&Complete") WinWait("MM", "", 10) ; ждём 10 секунд окна с заголовком MM If WinExists("MM", "") Then ContinueLoop ExitLoop Wend VelDmi Цитата:
|
|||
------- Отправлено: 17:25, 02-11-2006 | #432 |
Ветеран Сообщения: 753
|
Профиль | Отправить PM | Цитировать Creat0R
<Нужно всё поместить в цикл, и в конце проверять существование окна...> А примерчик простенький можна? |
------- Отправлено: 18:10, 02-11-2006 | #433 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать TERMINAL
Цитата:
Цикл: Это “заставит” скрипт “ходить” от While 1 до Wend, до тех пор, пока что то не заставит выйти из этого цикла... И соответственно строим условие, при существовании которго, что то произойдёт (выход из цикла, или продолжение цикла)... |
|
------- Отправлено: 02:07, 03-11-2006 | #434 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Creat0R
Цитата:
#include <File.au3> $dups = _TextInFile ("c:\test.txt", "Просто текст") Func _TextInFile ($file, $text) Local $i, $txtLines, $res [1][2] = [[0,0]] Local $str='Строки, содержащие "' & $text & '":' & @CRLF & @CRLF _FileReadToArray ($file, $txtLines) If Not IsArray ($txtLines) Then MsgBox (16, 'Ошибка', 'Файл пуст') EndIf For $i=1 To $txtLines [0] If StringInStr ($txtLines [$i], $text) Then ReDim $res [$res [0][0]+2][2] $res [0][0] = $res [0][0] +1 $res [$res [0][0]][0] = $i $res [$res [0][0]][1] = $txtLines [$i] $str = $str & $i & ':' & @TAB & $txtLines [$i] & @CRLF EndIf Next Select Case $res [0][0] =0 MsgBox (16, 'Ошибка', 'Вхождений не обнаружено!') Case $res [0][0] =1 MsgBox (64, 'Сообщение', 'Дублей нет') Case Else MsgBox (48, 'Предупреждение', $str) EndSelect Return $res EndFunc |
|
Отправлено: 05:50, 03-11-2006 | #435 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Lodoss
Цитата:
;=============================================================================== ; Использование: _NetLocalGroupGetMembers ($s_Group, [$s_Computer, [, $i_ShowDomain [, $i_Filter]]]) ; Параметры: $s_Group - имя локальной группы; ; $s_Computer - DNS или NetBIOS имя компьютера, пустая строка или пропущенный ; параметр равнозначны локальному компьютеру; ; $i_ShowDomain - "1" включить имя домена, "0" не включать; ; $i_Filter - набор флагов, задающих фильтр отбираемых записей: ; 1 - пользователи, ; 2 - группы, ; 16 - предопределенные (WellKnown) группы, ; 32 - удаленные учетные записи, ; 128 - неизвестный тип. ; Результат: При успешном завершении возвращает 1-мерный массив учетных записей, ; 1-й элемент массива (индекс 0) содержит количество записей. ; При неудаче 1-й элемент содержит "-1" и @error указывает код ошибки ; ;=============================================================================== Func _NetLocalGroupGetMembers ($sGroup, $sServer = "", $iShowDom = 1, $iFilter = 511) Local $res [1] = [0], $uPTR= DllStructCreate ("ptr") If $iShowDom Then $iShowDom=2 Else $iShowDom=1 EndIf Local $ret = DllCall ("netapi32.dll", "int", "NetLocalGroupGetMembers", _ "wstr", $sServer, _ "wstr", $sGroup, _ "int", $iShowDom, _ "ptr", DllStructGetPtr ($uPTR), _ "int", -1, _ "int_ptr", 0, _ "int_ptr", 0, _ "int_ptr", 0 ) If $ret[0] Then SetError ($ret [0]) $res[0] = -1 Else If $ret[6]>0 Then Local $i, $string Local $uBUF = DllStructCreate ("ptr[" & $ret[6]*3 & "]", DllStructGetData ($uPTR,1) ) For $i=3 To $ret[6]*3 Step 3 If BitAnd (BitShift (1, 1 - DllStructGetData ($uBUF, 1, $i-1) ), $iFilter) Then $ret = DllCall("kernel32.dll", "int", "WideCharToMultiByte", _ "int", 0, _ "int", 0, _ "ptr", DllStructGetData ($uBUF, 1, $i), _ "int", -1, _ "str", "", _ "int", 0, _ "int", 0, _ "int", 0 ) $string = DllStructCreate ("char[" & $ret[0] & "]") $ret = DllCall("kernel32.dll", "int", "WideCharToMultiByte", _ "int", 0, _ "int", 0, _ "ptr", DllStructGetData ($uBUF, 1, $i), _ "int", $ret[0], _ "ptr", DllStructGetPtr ($string), _ "int", $ret[0], _ "int", 0, _ "int", 0 ) ReDim $res [$res[0]+2] $res [0] = $res [0]+1 $res [$res[0]] = DllStructGetData ($string,1) EndIf Next EndIf EndIf DllCall ("netapi32.dll", "int" ,"NetApiBufferFree", _ "ptr" , DllStructGetData ($uPTR,1) ) Return $res EndFunc |
|
Последний раз редактировалось amel27, 17-11-2006 в 11:04. Причина: правка скрипта Отправлено: 07:30, 03-11-2006 | #436 |
Ветеран Сообщения: 753
|
Профиль | Отправить PM | Цитировать Я наверное плохо объяснил...
Суть проблемки с циклами вот в чём-программа имеет сетап и патч. При установки сетапа всё происходит ОК, а при установке патча (если нет видео драйверов) выдаётся ошибка и прекращается установка.Потом опять запускаешь патч до тех пор пока он не начинает сам ставится (это бывает от 1 до 2 раз). Вот я и хочу объяснить скрипту что если ничего не вылезет то можно продолжать установку (а не так как у тебя-ВЫХОД), а если вылезет окно ошибки, то нужно закрыть его и опять устанавливат этот патч пока он не установится. |
------- Отправлено: 10:48, 03-11-2006 | #437 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать amel27
Цитата:
Просто дело в том, что задача у меня примерно такая: -Проверить файл на дубликаты определённово слова (а точнее ссылки), если есть таковы, то просто удалить все дубликаты, оставив один-“оригинал” - Как удалять я знаю, имея номера строк, я могу восспользоваться функцией _FileWriteToLine... #include <File.au3> $Array = StringSplit("1|4|6|8", "|") ;Вместо цифр будет подставлен тот самый массив с номерами строк For $i = 1 to $Array[0] _FileWriteToLine("File.txt", $Array[$i], "", 1) Next --------------------------------- TERMINAL У тебя в примере, нет упоминания о патче, но попробую привести нужны пример на основе воображения : Opt("WinTitleMatchMode", 4) Global $serial='12345-67890-12345-67890' Run ( @ScriptDir & '\' & 'Setup.exe' ) WinWait("ACDSee 8 - InstallShield Wizard","ACDSee 8 can run with previous") WinActivate("ACDSee 8 - InstallShield Wizard","ACDSee 8 can run with previous") ControlClick("ACDSee 8 - InstallShield Wizard","ACDSee 8 can run with previous","Button1") WinWait("ACDSee 8 - InstallShield Wizard","I &accept the terms in the lic") WinActivate("ACDSee 8 - InstallShield Wizard","I &accept the terms in the lic") ControlClick("ACDSee 8 - InstallShield Wizard","I &accept the terms in the lic","Button3") ControlClick("ACDSee 8 - InstallShield Wizard","I &accept the terms in the lic","Button5") WinWait("ACDSee 8 - InstallShield Wizard","&Organization:") WinActivate("ACDSee 8 - InstallShield Wizard","&Organization:") ControlClick("ACDSee 8 - InstallShield Wizard","&Organization:","RichEdit20W3") ControlCommand("ACDSee 8 - InstallShield Wizard", "Customer Information", "Edit3", "EditPaste", $serial) ControlClick("ACDSee 8 - InstallShield Wizard","&Organization:","Button8") WinWait("ACDSee 8 - InstallShield Wizard","&Complete") WinActivate("ACDSee 8 - InstallShield Wizard","&Complete") While 1 Run( @ScriptDir & '\' & 'Path.exe' ) WinWait("MM", "", 10) ; ждём 10 секунд окна с заголовком MM ;В случае появления окна с заголовком “MM”, Закрываем его, и запускаем патч снова If WinExists("MM", "") Then WinClose("MM", "") ContinueLoop EndIf ExitLoop Wend |
|
------- Отправлено: 01:52, 04-11-2006 | #438 |
Ветеран Сообщения: 1073
|
Профиль | Отправить PM | Цитировать Нижеприведенная функция убивает все возможные окна от запущенного ей процесса и если какие-либо окна появлялись - перезапускает прогу заново (убиваются окна также дочерних процессов, просто одноименные окна\процессы не затрагиваются)
;~ Пример запускает+закрывает setup.exe: RunKillWin(@SystemDir&"\setup.exe") ;~ Использование: ;~ RunKillWin("Путь и имя файла"[, таймаут ожидания завершения выполнения exe(сек)][,количество попыток "тихого" выполнения]) ;~ Возвращает количесто выполненых попыток Func RunKillWin($Exe,$MaxTimeOutForProcess=300,$MaxCountToReRun=10) Local $i,$PID,$Timer,$WinArr,$y,$z=0 For $i=1 To $MaxCountToReRun ;~ Корявая поверка необходимости перезапуска If $z=1 Then ExitLoop $z=1 $PID=Run($Exe) ;~ Запуск таймера таймаута выполнения $Timer=TimerInit() While ProcessExists($PID) ;~ Сверка таймера If TimerDiff($Timer)>$MaxTimeOutForProcess*1000 Then ProcessClose($PID) If Not(ProcessWaitClose($PID,30)) Then Return -1 $z=0 ContinueLoop 2 EndIf $WinArr=WinList() For $y=1 To $WinArr[0][0] If Not(WinGetProcess($WinArr[$y][1])=$PID) Then ContinueLoop ;~ Собственно действие над окном\доп. проверку его титла можно поменять здесь WinKill($WinArr[$y][1]) $z=0 Next WEnd Next Return $i-1 EndFunc |
Отправлено: 03:08, 04-11-2006 | #439 |
Ищу Человека… Сообщения: 420
|
Профиль | Сайт | Отправить PM | Цитировать |
------- Отправлено: 03:55, 04-11-2006 | #440 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Открывая 7z архив пишет не удаётся открыть как архив. Можно ли его восстановить? | DreDo | Хочу все знать | 4 | 01-12-2009 18:54 | |
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:. | Vadikan | AutoIt | 1543 | 18-01-2009 10:46 | |
[архив - Часть 2] AutoIt скрипты | Vadikan | AutoIt | 985 | 21-01-2008 09:58 | |
[Архив - Часть 1.3] AutoIt скрипты | biork | AutoIt | 503 | 09-06-2007 11:27 | |
[Архив - Часть 1.1] AutoIt скрипты | EgOrus | AutoIt | 335 | 04-02-2006 16:58 |
|