Что нового

Работа скрипта на заблокированном компьютере

joe_black

Новичок
Сообщения
3
Репутация
0
Добрый день, коллеги.

Нашёл 3 похожие темы:
http://autoit-script.ru/index.php?topic=3774.msg27617#msg27617
http://autoit-script.ru/index.php?topic=9053.0
http://autoit-script.ru/index.php/topic,6503.msg45285.html#msg45285

но решения или прямого ответа, что поведение такое не возможно, не нашёл.

Суть проблемы: скрипт не работает на залоченном компе.
Краткое описание: Запуск скрипта происходит по расписанию через Windows Scheduler на залоченой машине. Скрипт запускает 3 экземпляра программы (написана на Java), получаем хэндлеры этих окон и производим однотипные действия для каждого.
OS: Win XP SP3
AutoIt version: 3.3.14.0

Комментарий: если комп не залочен, то всё работает хорошо, но на залоченной машине выполняется только часть кода до "Local $WindowExist = WinWait("[TITLE:DE Sniffer COM]", $aList[$i][1], 30)". После этого ControlSend-ы возвращают 1, но по факту никаких действий не происходит.

Код:
Local $iPID1 = Run("C:\Program Files\Luxoft\BitCatcher\sniffer.exe")
Sleep(1000)
Local $iPID2 = Run("C:\Program Files\Luxoft\BitCatcher\sniffer.exe")
Sleep(1000)
Local $iPID3 = Run("C:\Program Files\Luxoft\BitCatcher\sniffer.exe")
Sleep(10000)
Local $aList = WinList("[TITLE:BitCatcher; CLASS:SunAwtFrame]")

Local $counter = 4

Opt("WinTitleMatchMode", 2)
For $i = 1 to $aList[0][0]
   WinActivate($aList[$i][1])
   ControlSend($aList[$i][1], "", "", "{DOWN " & $i & "}")
   ControlSend($aList[$i][1], "", "", "{TAB}")
   ControlSend($aList[$i][1], "", "", "{SPACE}")
   Local $WindowExist = WinWait("[TITLE:DE Sniffer COM]", $aList[$i][1], 30)
   ControlSend($aList[$i][1], "", "", "{TAB}")
   ControlSend($aList[$i][1], "", "", "{DOWN " & $counter & "}")
   ControlSend($aList[$i][1], "", "", "{TAB}")
   ControlSend($aList[$i][1], "", "", "{SPACE}")
   $counter = $counter + 5
Next
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
попробуйте не использовать функции в названиях которые есть active и wait
 
Автор
J

joe_black

Новичок
Сообщения
3
Репутация
0
Не знаю, чем заменить WinActivate.

В таком виде скрипт перестаёт нормально работать на разлоченом компе - команды отправляет только на верхнее окно. В залоченом состоянии скрипт работает так же, как писал в начале темы - выполняется всё до строки "Sleep(20000)".

Код:
For $i = 1 to $aList[0][0]
   ;WinActivate($aList[$i][1])
   ControlSend($aList[$i][1], "", "", "{DOWN " & $i & "}")
   ControlSend($aList[$i][1], "", "", "{TAB}")
   ControlSend($aList[$i][1], "", "", "{SPACE}")
   ;Local $WindowExist = WinWait("[TITLE:DE Sniffer COM]", $aList[$i][1], 30)
   Sleep(20000)
   ControlSend($aList[$i][1], "", "", "{TAB}")
   ControlSend($aList[$i][1], "", "", "{DOWN " & $counter & "}")
   ControlSend($aList[$i][1], "", "", "{TAB}")
   ControlSend($aList[$i][1], "", "", "{SPACE}")
   $counter = $counter + 5
Next
 

nowost

Знающий
Сообщения
178
Репутация
17
будет ли WinSetState или WinSetOnTop работать ?
 

All2khoff

Продвинутый
Сообщения
347
Репутация
65
может будет легче отловить с помощью
Код:
ProcessWait ( "process", [timeout] )
 

vovsla

Осваивающий
Сообщения
607
Репутация
36
У меня аналогичный скрипт работает на залоченной Win7.
Может проще поставить другую винду? :smile:

Хотя, может дело в версии Autoit, у меня Autoit v3.3.10.2
 
Верх