|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Автоматизация нажатия кнопок в окне браузера в фоновом режиме(?) |
|
[решено] Автоматизация нажатия кнопок в окне браузера в фоновом режиме(?)
|
Новый участник Сообщения: 35 |
Профиль | Отправить PM | Цитировать Собственно, в AutoIt я полный нуб, но в него уже влюбился. А нужно мне организовать посыл заданной комбинации кнопок, для перемещения по веб странице в фоне(свернуто совсем или зафризена на декстопе). Мыслей много как, но вот кодю пока гадко, поатому не осилю сам. Все на что хватило ума:
MouseClick("left",258,167,1);выделяю окошко для таба, а то по умолчанию табать начинает с меню IE Sleep(1500);эт чтоб страница подгрузиться немного успела Send("{TAB}");по хорошему давать задержку после каждого нажати, но так тож канает и немного времени экономит Send("{TAB}") Sleep(500) Send("{TAB}") Send("{TAB}") Sleep(500) Send("{TAB}") Send("{TAB}") Sleep(500) Send("{TAB}") Send("{TAB}") Sleep(500) Send("{TAB}") Send("{TAB}") Sleep(1500) Send("{ENTER}") Sleep(4000) и по-новой Если есть возможность прямого обращения к кнопке на сайте, то через него можно(каждая кнопка это ссылка на новую страницу, и возможно просто забивать его как адрес), аля определяем адрес кнопки копируем его в строку адреса переходим. Или даже тупое повторение моего кода, только для зафризенного окна, пробовал так: WinWaitActive(такое-то окно, '', 3) $hWnd = WinGetHandle(такое-то окно) WinSetState($hWnd, '', @SW_DISABLE) ControlSend($hWnd, "","", "{TAB}") ControlSend($hWnd, "","", "{TAB}") Sleep(15500) ControlSend($hWnd, "","", "{TAB}") ControlSend($hWnd, "","", "{TAB}") Sleep(500) ControlSend($hWnd, "","", "{TAB}") ControlSend($hWnd, "","", "{TAB}") Sleep(500) ControlSend($hWnd, "","", "{TAB}") ControlSend($hWnd, "","", "{TAB}") Sleep(500) ControlSend($hWnd, "","", "{TAB}") ControlSend($hWnd, "","", "{TAB}") Sleep(500) ControlSend($hWnd, "","", "ENTER") WinSetState($hWnd, '', @SW_ENABLE) Подошло бы и кликанье в область окна с кнопкой(ток чтоб мышь при этом не занимало) вообщем вот так Буду рад любой помощи, особенно с подробными комментариями. ЗЫ только к штудированию IE.au3 не засылайте, а то я его смотрел, ток нифига там не понял... |
|
Отправлено: 18:39, 07-09-2009 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата zbruy:
|
|
------- Отправлено: 20:11, 07-09-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 35
|
Профиль | Отправить PM | Цитировать Смотрел я похожие статейки, вот в том и проблема, что нифига там не понял=(
а в рус. гайде на тему IE.au3 вообще нет ничего... |
Отправлено: 16:46, 09-09-2009 | #3 |
Пользователь Сообщения: 143
|
Профиль | Отправить PM | Цитировать А можно ссылку на веб-сайт и что на нем кликать надо?
|
Отправлено: 20:15, 09-09-2009 | #4 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата zbruy:
|
||
------- Отправлено: 21:10, 09-09-2009 | #5 |
Новый участник Сообщения: 35
|
Профиль | Отправить PM | Цитировать Сайт не дам, стесняюсь
Немного поплагиатил и на основе готового варианта сделал так: #Include <WinAPI.au3> $hWnd = WinGetHandle("нужный сайт") _SendMessage($hWnd, 0x6, 0x1) ControlSend($hWnd, "", "", "{TAB}") _SendMessage($hWnd, 0x6, 0x1) _SendMessage($hWnd, 0x6, 0x1) ControlSend($hWnd, "", "", "{TAB}") _SendMessage($hWnd, 0x6, 0x1) _SendMessage($hWnd, 0x6, 0x1) ControlSend($hWnd, "", "", "{TAB}") _SendMessage($hWnd, 0x6, 0x1) _SendMessage($hWnd, 0x6, 0x1) ControlSend($hWnd, "", "", "{TAB}") _SendMessage($hWnd, 0x6, 0x1) _SendMessage($hWnd, 0x6, 0x1) ControlSend($hWnd, "", "", "{TAB}") _SendMessage($hWnd, 0x6, 0x1) _SendMessage($hWnd, 0x6, 0x1) ControlSend($hWnd, "", "", "{TAB}") _SendMessage($hWnd, 0x6, 0x1) _SendMessage($hWnd, 0x6, 0x1) ControlSend($hWnd, "", "", "{TAB}") _SendMessage($hWnd, 0x6, 0x1) _SendMessage($hWnd, 0x6, 0x1) ControlSend($hWnd, "", "", "{TAB}") _SendMessage($hWnd, 0x6, 0x1) _SendMessage($hWnd, 0x6, 0x1) ControlSend($hWnd, "", "", "{TAB}") _SendMessage($hWnd, 0x6, 0x1) _SendMessage($hWnd, 0x6, 0x1) ControlSend($hWnd, "", "", "{TAB}") _SendMessage($hWnd, 0x6, 0x1) _SendMessage($hWnd, 0x6, 0x1) ControlSend($hWnd, "", "", "{ENTER}") _SendMessage($hWnd, 0x6, 0x1) Sleep(3000) И еще, пытался прикрутить поиск окна по процессу, т.к. планирую запустить несколько окон, как вариант в разных браузерах, пока прихобится создавать в виндовс учетки, тоже извращентство. Ну так вот, тоже нарыл тут код: $sWindow = _ProcessGetWindow("сhrome.exe", 1) ConsoleWrite($sWindow & @CRLF) Func _ProcessGetWindow($iPID, $iRet=-1) Local $aWinList = WinList() Local $aRet[2] If IsString($iPID) Then $iPID = ProcessExists($iPID) For $i = 1 To UBound($aWinList)-1 If WinGetProcess($aWinList[$i][1]) = $iPID Then $aRet[0] = $aWinList[$i][0] ;Title $aRet[1] = $aWinList[$i][1] ;WinHandle If $iRet = 0 Then Return $aRet[0] If $iRet = 1 Then Return $aRet[1] Return $aRet EndIf Next Return SetError(1, 0, $aRet) EndFunc Line 64 (File "C:\Documents and 5ettings\Zbruy\Pa6o4MM стол\Копия сайт тест.аиЗ") : Func _ProcessGetWindow($iPID, $iRet=-l) Error: Duplicate function name. |
Отправлено: 13:22, 10-09-2009 | #6 |
Новый участник Сообщения: 35
|
Профиль | Отправить PM | Цитировать Так, как зациклить нашел вроде
#Include <WinAPI.au3> $i = 1 While $i <= 10 $hWnd = WinGetHandle("сайт") _SendMessage($hWnd, 0x6, 0x1) ControlSend($hWnd, "", "", "{TAB}") _SendMessage($hWnd, 0x6, 0x1) _SendMessage($hWnd, 0x6, 0x1) ControlSend($hWnd, "", "", "{TAB}") _SendMessage($hWnd, 0x6, 0x1) _SendMessage($hWnd, 0x6, 0x1) ControlSend($hWnd, "", "", "{TAB}") _SendMessage($hWnd, 0x6, 0x1) _SendMessage($hWnd, 0x6, 0x1) ControlSend($hWnd, "", "", "{TAB}") _SendMessage($hWnd, 0x6, 0x1) _SendMessage($hWnd, 0x6, 0x1) ControlSend($hWnd, "", "", "{TAB}") _SendMessage($hWnd, 0x6, 0x1) _SendMessage($hWnd, 0x6, 0x1) ControlSend($hWnd, "", "", "{TAB}") _SendMessage($hWnd, 0x6, 0x1) _SendMessage($hWnd, 0x6, 0x1) ControlSend($hWnd, "", "", "{TAB}") _SendMessage($hWnd, 0x6, 0x1) _SendMessage($hWnd, 0x6, 0x1) ControlSend($hWnd, "", "", "{TAB}") _SendMessage($hWnd, 0x6, 0x1) _SendMessage($hWnd, 0x6, 0x1) ControlSend($hWnd, "", "", "{TAB}") _SendMessage($hWnd, 0x6, 0x1) _SendMessage($hWnd, 0x6, 0x1) ControlSend($hWnd, "", "", "{TAB}") _SendMessage($hWnd, 0x6, 0x1) _SendMessage($hWnd, 0x6, 0x1) ControlSend($hWnd, "", "", "{ENTER}") _SendMessage($hWnd, 0x6, 0x1) Sleep(3000) WEnd |
Последний раз редактировалось zbruy, 10-09-2009 в 16:08. Отправлено: 14:44, 10-09-2009 | #7 |
$AutoITer Сообщения: 446
|
Профиль | Отправить PM | Цитировать Цитата zbruy:
|
|
------- Отправлено: 15:26, 10-09-2009 | #8 |
Новый участник Сообщения: 35
|
Профиль | Отправить PM | Цитировать проводил тест, в конец извлечения имени из процесса, приписал
MsgBox(64, "Tutorial", $hWnd) так сначало оно мне давало имя типа х*хххххххххх, а после перезагрузки браузера вообще пустое окно. Видимо я не правильно пытался прилепить комбинацию кнопок к конкретному окну поэтому и ошибка выскакивала, скрипт имел вид $hWnd = _ProcessGetWindow("сhrome.exe", 1) ConsoleWrite($hWnd & @CRLF) Func _ProcessGetWindow($iPID, $iRet=-1) Local $aWinList = WinList() Local $aRet[2] If IsString($iPID) Then $iPID = ProcessExists($iPID) For $i = 1 To UBound($aWinList)-1 If WinGetProcess($aWinList[$i][1]) = $iPID Then $aRet[0] = $aWinList[$i][0] ;Title $aRet[1] = $aWinList[$i][1] ;WinHandle If $iRet = 0 Then Return $aRet[0] If $iRet = 1 Then Return $aRet[1] Return $aRet EndIf Next Return SetError(1, 0, $aRet) EndFunc SendMessage($hWnd, 0x6, 0x1) ControlSend($hWnd, "", "", "{TAB}") _SendMessage($hWnd, 0x6, 0x1) |
Последний раз редактировалось zbruy, 10-09-2009 в 17:39. Отправлено: 16:10, 10-09-2009 | #9 |
Новый участник Сообщения: 35
|
Профиль | Отправить PM | Цитировать Собственно перебрал все варианты которые нашел, слегка адаптировал самый рабочий и получил на выходе такую штуку, вполне себе рабочую:
#Include <WinAPI.au3> $g_szVersion = "My Script 1.0000" If WinExists($g_szVersion) Then Exit AutoItWinSetTitle($g_szVersion) Global $Paused HotKeySet("{PAUSE}", "TogglePause") HotKeySet("{Esc}" , "MyExit") While 1=1 $hWnd = WinGetHandle("Имя окна") _SendMessage($hWnd, 0x6, 0x1) ControlSend($hWnd, "", "", "{TAB 10}") _SendMessage($hWnd, 0x6, 0x1) Sleep(100) ControlSend($hWnd, "", "", "{ENTER}") Sleep(3000) WEnd; Func TogglePause() $Paused = NOT $Paused While $Paused sleep(100) ToolTip('скрипт на паузе',0,0) WEnd ToolTip("") EndFunc Func MyExit() MsgBox(0, "Сообщение системы", "скрипт завершен") Exit EndFunc |
Отправлено: 12:22, 04-10-2009 | #10 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Интерфейс - Папки открываются в фоновом режиме | M1ndW0rk | Microsoft Windows 7 | 12 | 04-09-2010 20:01 | |
Окна не реагируют на нажатия кнопок! | manager_rab | Лечение систем от вредоносных программ | 6 | 29-09-2009 14:49 | |
[решено] Блокировка кнопок после нажатия в GUI | ZeroCrash | AutoIt | 7 | 13-07-2009 08:24 | |
Как отслеживать нажатия кнопок в Windows? | Sharkky | Программирование и базы данных | 5 | 29-12-2003 13:55 | |
Программ, работающая в фоновом режиме. | llah ani | Программирование и базы данных | 3 | 13-09-2003 13:38 |
|