Тема: AHK: HWND контекстного меню.
Добра всем.
Чтобы географически корректно жмякнуть ПКМ или ЛКМ в поле(контрол) окна посредством PostMessage(), нужно знать хендл поля(контрола) и хендл окна, которому оно/он принадлежит, чтобы в последствии высчитать разницу координат, вычитаемую из величин координат клика.
postLclick(new_x, new_y, varWin, varControl ) {
WinGetPos, hw_x, hw_y, hw_w, hw_h, ahk_id %varControl%
WinGetPos, hwWin_x, hwWin_y, hwWin_w, hwWin_h, ahk_id %varWin%
l_param := % ((new_x - (hw_x - hwWin_x)) + ((new_y - (hw_y - hwWin_y)) * 65536))
PostMessage, 0x0201, 0x0001, %l_param%, , ahk_id %varControl%
sleep 50
PostMessage, 0x0202, 0x0000, %l_param%, , ahk_id %varControl%
}
postRclick(new_x, new_y, varWin, varControl ) {
WinGetPos, hw_x, hw_y, hw_w, hw_h, ahk_id %varControl%
WinGetPos, hwWin_x, hwWin_y, hwWin_w, hwWin_h, ahk_id %varWin%
l_param := % ((new_x - (hw_x - hwWin_x)) + ((new_y - (hw_y - hwWin_y)) * 65536))
PostMessage, 0x0204, 0x0002, %l_param%, , ahk_id %varControl%
sleep 50
PostMessage, 0x0205, 0x0000, %l_param%, , ahk_id %varControl%
}
Например, в браузере, с этим можно легко справиться так:
WinGet, winVar, ID, Yandex
WinGet, ctrlVar, ControlListHwnd, Yandex
postRclick(100, 100, winVar, ctrlVar)
Например, отправляя координаты найденных объектов страницы при графическом анализе. Всё достаточно просто, если в контроле окна при ПКМ по объекту генерируется контекстное меню скриптами самой страницы, потому как клик так и будет происходить в контрол текущего окна. Но если вызывать контекстное меню браузера при ПКМ, то генерируемое окно уже является новым контролом. Подскажите пожалуйста как получить хендл этого меню, не прибегая к перемещению указателя мыши?
В прошлом софте, которым пользовался была функция, позволяющая получить хендл объекта имея лишь его координаты, ищу аналогию.