Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Автоматизация нажатия кнопок в окне браузера в фоновом режиме(?)

Ответить
Настройки темы
[решено] Автоматизация нажатия кнопок в окне браузера в фоновом режиме(?)

Новый участник


Сообщения: 35
Благодарности: 0

Профиль | Отправить 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)
Но беда в том, что под фризом, ни только не получается определить зону применения таба(нажатия до выделения нужного элемента увеличиваются в 2 раза), но и страница не может обновиться, а снимать фриз на обновление и ставить вновь как-то глупо. Ведь суть применения задачи, свободная работа на компе с запущенным скриптом. И что-бы одно не мешало другому.
Подошло бы и кликанье в область окна с кнопкой(ток чтоб мышь при этом не занимало) вообщем вот так
Буду рад любой помощи, особенно с подробными комментариями.
ЗЫ только к штудированию IE.au3 не засылайте, а то я его смотрел, ток нифига там не понял...

Отправлено: 18:39, 07-09-2009

 

Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата zbruy:
к штудированию IE.au3 не засылайте, а то я его смотрел, ток нифига там не понял »
Если не поняли, это ещё не значит что нужно ковырять извините, извращённые методы. Поищите по форуму, есть немало примеров кликания по кнопкам и ссылкам (в справке кажется тоже должны быть).

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 20:11, 07-09-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 35
Благодарности: 0

Профиль | Отправить PM | Цитировать


Смотрел я похожие статейки, вот в том и проблема, что нифига там не понял=(
а в рус. гайде на тему IE.au3 вообще нет ничего...

Отправлено: 16:46, 09-09-2009 | #3


Пользователь


Сообщения: 143
Благодарности: 24

Профиль | Отправить PM | Цитировать


А можно ссылку на веб-сайт и что на нем кликать надо?

Отправлено: 20:15, 09-09-2009 | #4


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата zbruy:
в рус. гайде на тему IE.au3 вообще нет ничего »
А по IE? И лучше не в рус., он пока(?) устаревший.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 21:10, 09-09-2009 | #5


Новый участник


Сообщения: 35
Благодарности: 0

Профиль | Отправить 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)
А как его теперь зациклить? а то go to что-то не помогает
И еще, пытался прикрутить поиск окна по процессу, т.к. планирую запустить несколько окон, как вариант в разных браузерах, пока прихобится создавать в виндовс учетки, тоже извращентство. Ну так вот, тоже нарыл тут код:
Код: Выделить весь код
$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
Благодарности: 0

Профиль | Отправить 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


Аватара для Medic84

$AutoITer


Автор проектов


Сообщения: 446
Благодарности: 44

Профиль | Отправить PM | Цитировать


Цитата zbruy:
А вот почему не пашет определение окна по процессу не рахобрался=( »
именно такой код как у тебя выше лично у меня работает...

-------

AutoIT Русское сообщество| Моя лаборатория


Отправлено: 15:26, 10-09-2009 | #8


Новый участник


Сообщения: 35
Благодарности: 0

Профиль | Отправить 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)
тоесть я имя окна привязал как переменную $hWnd а так ли оно на самом деле?

Последний раз редактировалось zbruy, 10-09-2009 в 17:39.


Отправлено: 16:10, 10-09-2009 | #9


Новый участник


Сообщения: 35
Благодарности: 0

Профиль | Отправить 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



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Автоматизация нажатия кнопок в окне браузера в фоновом режиме(?)

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Интерфейс - Папки открываются в фоновом режиме 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




 
Переход