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

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

Ответить
Настройки темы
[решено] Отследить нажатие кнопки

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


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

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


Как можно в скрипте отследить нажатие определенной кнопки в программе, запущенной из этого скрипта?

Отправлено: 12:37, 06-08-2009

 

Аватара для FlatX007

Ветеран


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

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


Сам понял что написал ?

Отправлено: 13:11, 06-08-2009 | #2



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

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


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


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

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


Из скрипта запускается некая программа.
Далее нужно чтобы скрипт отловил нажатие определенной кнопки в программе человеком.
Что не так?

Отправлено: 13:20, 06-08-2009 | #3


Аватара для SyDr

Старожил


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

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


Нажатие определённой кнопки интерфейса или кнопки клавиатуры?

-------

"Что мы думаем, знаем или во что верим в конце концов не так уж и важно.
Важно лишь то, что мы делаем."
Джон Раскин


Отправлено: 14:47, 06-08-2009 | #4


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


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

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


Кнопки (Button) интерфейса

Отправлено: 14:49, 06-08-2009 | #5


Аватара для FlatX007

Ветеран


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

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


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

Незнаю кароче вот только это на ум пришло ...хотя мож какая функция есть невникал.

Отправлено: 21:36, 06-08-2009 | #6


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


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

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


Блин. ControlID этой кнопки-то определяется, нажать из скрипта я на нее могу,но в том-то и дело, что по логике именно человек на нее должен нажать и скрипт дальше поедет.
Неужели нет решения?

Отправлено: 06:53, 07-08-2009 | #7


Googler


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

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


w3d1, само собой, можно - пример для кнопки "Пуск":
Код: Выделить весь код
Global Const $WH_MOUSE_LL             = 14
Global Const $MOUSE_PRIMARYDOWN_EVENT = 513
Global Const $MOUSE_PRIMARYUP_EVENT   = 514
; Наш подопытный контрол (кнопка "Пуск")
Global $sMyWinTitle = "[CLASS:Shell_TrayWnd]"
Global $sMyWinText  = ""
Global $sMyControl  = "Button1"
; Рабочие глобальные переменные
Global $iMyToggle   = False
Global $hMyControl  = ControlGetHandle($sMyWinTitle, $sMyWinText, $sMyControl)
; Регистрируем ф-цию перехвата сообщений мышки
Global $hKeyProc = DllCallbackRegister ("_KeyProc", "int", "int;ptr;ptr")
Global $hmod = DllCall("kernel32.dll","hwnd","GetModuleHandle","ptr",0)
Global $hHook = DllCall("user32.dll","hwnd","SetWindowsHookEx","int", $WH_MOUSE_LL, _
    "ptr", DllCallbackGetPtr($hKeyProc), "hwnd", $hmod[0], "dword", 0)

MsgBox(64, "Сообщение", 'На 20 секунд кнопка "Пуск" будет завачена под полный контроль!"')
Sleep (20000)

; Процедура перехвата/обработки событий мышки
Func _KeyProc($nCode, $wParam, $lParam)
    Local $aRet, $iRet
    Select
        Case $wParam = $MOUSE_PRIMARYDOWN_EVENT And _ControlIsHovered($hMyControl) ; нажали левую кнопку
            $iMyToggle = True ; запомнили где нажали
            Return 1 ; блокируем событие
        Case $wParam = $MOUSE_PRIMARYUP_EVENT   And _ControlIsHovered($hMyControl) ; отпустили левую кнопку
            If $iMyToggle = True Then ; проверили, где отпустили
                $iRet = MsgBox(52, "Перехвачено действие", "Выполнить нажатие на кнопку?")
                If $iRet =  6 Then ControlClick($sMyWinTitle, $sMyWinText, $sMyControl)
            EndIf
            $iMyToggle = False
            Return 1 ; блокируем событие
        Case Else ; корректно пропускаем все остальные события
            $aRet = DllCall("user32.dll","long","CallNextHookEx","hwnd", $hHook[0], _
                "int", $nCode, "ptr", $wParam, "ptr", $lParam)
            Return $aRet[0]
    EndSelect
EndFunc

; Функция, проверяющая HWND контрола под мышкой
Func _ControlIsHovered($hWnd)
    Local $aRet = DllCall("User32.dll", "int", "WindowFromPoint", _
        "long", MouseGetPos(0), _
        "long", MouseGetPos(1))

    Return (HWnd($aRet[0])==$hWnd)
EndFunc
P.S. У Creat0R'а есть интересная UDF как раз для такого случая - MouseSetOnEvent_UDF, но кое в чем она меня не устраивает: Во-первых, нет возможности условной блокировки события в самой процедуре обработки... хотя ИМХО это вполне можно сделать на основе возвращаемого функцией значения... Во-вторых, его _IsHoveredWnd() не подходит для контролов, (виноват WinActive)... Короче, реализовать мою задумку на этой UDF у меня не получилось, а вносить свои правки тут неуместно... Зато на моём примере видно, как вся эта кухня работает.
Это сообщение посчитали полезным следующие участники:

Отправлено: 05:29, 09-08-2009 | #8


Аватара для SyDr

Старожил


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

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


Вроде немного неправильно работает...
Без скрипта - нажмите на кнопку, а потом на рабочий стол. Менюшка исчезает.
Со скриптом - остаётся.

-------

"Что мы думаем, знаем или во что верим в конце концов не так уж и важно.
Важно лишь то, что мы делаем."
Джон Раскин


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


Googler


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

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


SyDr, правда странно... только это не скрипт, а ControlClick() так работает для "Пуска", интересно почему?
Код: Выделить весь код
ControlClick("[CLASS:Shell_TrayWnd]", "", "Button1")

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



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Нажатие кнопки или переход по ссылке с меняющимся параметром. ikif AutoIt 3 23-07-2009 01:09
[решено]Нажатие кнопки-картинки в IE ikif AutoIt 10 13-07-2009 22:06
[решено] Отловить нажатие по плюсику morgan1991 AutoIt 6 30-06-2009 10:54
Samsung SyncMaster 940MW - невеная реакция на нажатие кнопки ИС_ Прочее железо 0 24-02-2009 15:41
как передать параметром нажатие кнопки ок. qpa3ep Microsoft Windows NT/2000/2003 1 04-05-2006 18:00




 
Переход