1

Тема: AHK: ControlClick против контекстного меню

Доброго времени суток!

Есть вот такой кусок кода:

SetControlDelay -1
SetTitleMatchMode, 2

^LButton::
    MouseGetPos xpos, ypos
    WinGet, p, pid, Opera
    if (p)
    {
        ControlClick, x%xpos% y%ypos%, ahk_pid %p%, , Left, 2, NA 
    }
Return

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

ControlClick, x%xpos% y%ypos%, ahk_pid %pid2%, , Right, , NA
ControlClick, x%XP% y%YP%, ahk_pid %pid2%, , Left, , NA

Сначало вызываю контекстное меню, затем вхожу в комнату... Однако Контекстное меню, которое постоянно возникает меня сильно раздражает, т.к. пока скрипт "пробивается" в комнату я постоянно наюблюдаю за мерцанием этой менюшки (пока смотрю фильм или брожу в интернете хотя у этих окон стоит значение "поверх всех")

Соответственно два вопроса:
1. Как можно попробовать заставить работать двойной щелчек мышкой?
p.s. пробовал такой вариант (с Sleep, 20-200 и без)

ControlClick, x%XP% y%YP%, ahk_pid %pid2%, , Left, , NA
;Sleep, 50 пробовал тут разные значения для слипа
ControlClick, x%XP% y%YP%, ahk_pid %pid2%, , Left, , NA

2. Как можно избавиться от назойливого контекстного меню поверх всех окон?

2

Re: AHK: ControlClick против контекстного меню

... пока смотрю фильм или брожу в интернете ...

То есть окно оперы перекрыто другими, я правильно понимаю? В таком случае MouseGetPos берет координаты относительно того окна, которое находится на самом верху,
а ControlClick кликает по этим же кординатам, но уже в окне оперы, отсюда и "непонимание" (если только они  не совпадают по размеру и положению на 100%)

3

Re: AHK: ControlClick против контекстного меню

Irbis пишет:

То есть окно оперы перекрыто другими, я правильно понимаю? В таком случае MouseGetPos берет координаты относительно того окна, которое находится на самом верху,
а ControlClick кликает по этим же кординатам, но уже в окне оперы, отсюда и "непонимание" (если только они  не совпадают по размеру и положению на 100%)

Нет, в момент нажатия комбинации Cntrl+Left Button я нахожусь в том окне, что надо... но потом переключаюсь на другие и появляется поверх них мерцание (быстрое появляние\исчезновение контекстного меню, от окна в которое была нажата комбинация)

4

Re: AHK: ControlClick против контекстного меню

Может кому пригодится... справился с проблемой с помощью PostMessage

^LButton::
    MouseGetPos X, Y ;получаем координаты мышки
    ControlGet, hwnd, HWND, , Control, WinTitle ;получаем hwnd контрола
    ControlGetPos, cX, cY, , , Control, WinTitle ;получаем позицию котрола
    Xclick:=X-cX ;рассчитываем куда мы кликнули, относительно контрола
    Yclick:=Y-cY ;рассчитываем куда мы кликнули, относительно контрола
    PostMessage, 0x201, 0, Xclick&0xFFFF | Yclick<<16,, ahk_id %hwnd% ; WM_LBUTTONDOWN
    PostMessage, 0x202, 0, Xclick&0xFFFF | Yclick<<16,, ahk_id %hwnd% ; WM_LBUTTONUP
    PostMessage, 0x203, 0, Xclick&0xFFFF | Yclick<<16,, ahk_id %hwnd% ; WM_LBUTTONDBLCLCK
    PostMessage, 0x202, 0, Xclick&0xFFFF | Yclick<<16,, ahk_id %hwnd% ; WM_LBUTTONUP

Отлично подойдет для всяких ListView

5 (изменено: Irbis, 2012-04-09 10:03:33)

Re: AHK: ControlClick против контекстного меню

Xclick&0xFFFF | Yclick<<16 = Xclick ^ Yclick<<16 (если предположить, что Xclick и Yclick меньше 65536, что является верным примерно в 100% случаев).