Что нового

Копирование строки, вставка в окно программы, нажатие кнопок с задержкой

Andev

Новичок
Сообщения
10
Репутация
0
Версия AutoIt: 3.

Описание: Здравствуйте, форумчане. Я имею опыт программирования на PowerShell, для парсинга логов и других задач подходит нормально, но встала задача обработать большой лист, передать айпишники в диалоговое окно программе, которая не поддерживает выполнение данной задачи через команды, в итоге нужно сэмулировать нажатие кнопок мыши (клавиатурных хоткеев тоже нет). Я нашел PowerShell WASP модуль, но тестирование командлетов на примере калькулятора не дало нужных результатов, просьба помочь в написании скрипта на AutoIT, сам только первый день знаком с этим проектом.

Скрипт должен делать следующее:
1. Копировать IP-адрес с первой строки в текстом файле (файл предварительно отпарсю через PowerShell)
2. Определять окно, видимо по титлу, определять контрол, в который нужно вставлять IP-адрес, скопированный из файла, нажимать кнопку Search, ждать 2 секунды, нажимать кнопку Add.
3. Переходить к следующей итерации, брать второй IP-адрес со второй строки из файла.

Вроде все просто, буду и сам разбираться, но задачу нужно решить к понедельнику, за это время не успею достаточно изучить язык AutoIT, надеюсь на помощь, заранее спасибо.

Примечания:
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
1.
Код:
$ReadFile = FileRead(ПУТЬ К ФАЙЛУ С IP) ;Считываем файл
$Ips = StringRegExp($ReadFile, '\d{2,3}\.\d{2,3}\.\d{1,3}\.\d{1,3}', 3) ;Отделяем IP от прочего текста


2, 3
С помощью Autoit Window Info определи контролы ...
Код:
For $i = 1 to Ubound($Ips) -1
   $hWnd  = WinWait(НАЗВАНИЕ ОКНА) ;Ждем окно
   ControlSetText($hWnd, '', контрол, в который нужно вставлять IP-адрес, $IPs[$i]) ;Вписываем IP контрол
   ControlClick($hWnd, '', кнопка Search) ;Нажимаем кнопку Search
   Sleep(2000) ;Ждем 2 сек
Next


Вроде все :smile:
 
Автор
A

Andev

Новичок
Сообщения
10
Репутация
0
Спасибо!

Есть вопрос по строчке
...'\d{2,3}\.\d{2,3}\.\d{1,3}\.\d{1,3}', 3...
что означают данные символы? по идее у меня только IP-адрес на строчке, правильно ли понимаю, что таким образом программа считывает 4 октета IP-адреса? что означает последняя цифра 3?
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
каждая функция, подсвеченная темно синим цветом в коде – это ссылка на соответствующий раздел в справке. можешь пощелкать и почитать.
 
Автор
A

Andev

Новичок
Сообщения
10
Репутация
0
спасибо всем, мне очень помогла программа AutoIT Windows Info, с ее помощью удалось найти параметры окна, в итоге даже скриптом PowerShell (+WASP) удалось закрыть окно блокнота с дочерним окном подтверждения закрытия Select-Window notepad | Remove-Window -Passthru | Select-childwindow | select-control -title "&Не сохранять" -recurse | Send-Click ;)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Andev,
Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Модератор.
 
Автор
A

Andev

Новичок
Сообщения
10
Репутация
0
доброго всем дня,

попробовал AutoIT Window Info и Control Viewer, они не помогли определить названия контролов, видимо программа сделана по очень старой технологии, одна кнопка не имеет даже ALT альтернативы, помогите, пожалуйста, переписать скрипт, я заметил, что можно поставить курсор в это окно в нужное поле, затем руками писать IP, затем нажимать Enter, который заменяет кнопку Search, а вот кнопку Add видимо надо нажимать по координатам X,Y, которые определяет Control Viewer. Можно ли изменить код так, чтобы программа передавала IP из файла в текущее активное окно в поле, где установлен курсор (фокус), затем нажимала {Enter}, затем по координатам X,Y на кнопку ADD, затем следующая итерация? Ладно хоть AutoIT Window Info и Control Viewer определяют название окна :smile:
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
Код:
MouseMove()
MouseClick()
Send()

Тебе в помощь :smile:
 
Автор
A

Andev

Новичок
Сообщения
10
Репутация
0
спасибо за помощь, у меня получился следующий скрипт:

Код:
$ReadFile = FileRead("C:\Script\ip.txt")
$Ips = StringRegExp($ReadFile, '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}', 3)

For $i = 1 to Ubound($Ips) -1
   $hWnd  = WinWait("CLASS:SunAwtDialog")
   MouseMove(460, 285)
   MouseClick("left")

   Send("$IPs[$i]{Enter}")

   Sleep(2000)

   MouseMove(810, 220, 0) ;move to Add button
   MouseClick("left") ;click on Add button

Next


запускаю скрипт, не работает, но и ошибок нет,

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

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Andev
Вижу пару ошибок:
Код:
$hWnd  = WinWait("[CLASS:SunAwtDialog]")
Send($IPs[$i] & "{Enter}")
 
Автор
A

Andev

Новичок
Сообщения
10
Репутация
0
спасибо, исправил, но скрипт сразу вставляет второй IP со второй строки, игнорируя первую
 
Автор
A

Andev

Новичок
Сообщения
10
Репутация
0
да действительно помогло ;D всем огромнейшее спасибо :IL_AutoIt_1:
 
Автор
A

Andev

Новичок
Сообщения
10
Репутация
0
Странную ситуацию наблюдаю сейчас, нужное окно открыто, запускаю скрипт, он зачем-то открывает окно редактирования и вписывает адрес в свой код, ставя курсор по указанным координатам, чем объясняется такое поведение? В коде ничего не менял, класс окна не менялся.


Добавлено:
Сообщение автоматически объединено:

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

Код:
$ReadFile = FileRead("C:\script\ip.txt")
$Ips = StringRegExp($ReadFile, '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}', 3)
For $i = 0 to Ubound($Ips) -1
   $Wnd = WinWait("[CLASS:SunAwtDialog]")
   If Not $Wnd Then
	   MsgBox(4096, 'window is not found')
	   Exit
   EndIf
   MouseMove(480, 285)
   MouseClick("left")
   Send($IPs[$i] & "{Enter}")
   Sleep(2000)
   MouseMove(810, 255, 0) ;move to Add button
   MouseClick("left") ;click on Add button
Next
 

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628
Код:
WinWait('[CLASS:SunAwtDialog]','',3)

сделай так.
и исправь ошибку в
Код:
MsgBox(4096,'', 'window is not found')


ну и обращай внимание на параметры, когда читаешь справку. ;)
 
Автор
A

Andev

Новичок
Сообщения
10
Репутация
0
не помогло к сожалению, скрипт открывает редактор кода и вставляет все в свой код


Добавлено:
Сообщение автоматически объединено:

проверил скрипт с первоначальным кодом на другом сервере, нормально работает :-X
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Andev
Код:
;...........
EndIf
WinActivate($hWnd);Активирует указанное окно (передаёт ему фокус)
MouseMove(480, 285)
;............
 
Верх