Вот простой пример отслеживания наведения, двойного клика и клика правой кнопкой:
global WM_MOUSEMOVE := 0x200
, WM_LBUTTONDBLCLK := 0x203
, WM_RBUTTONDOWN := 0x204
Gui, Add, Text, w100 h100 border hwndhControl1
Gui, Add, Text, yp x+5 w100 h100 border hwndhControl2
Gui, Show
controls := [ {hwnd: hControl1, func: Func("Control1")}, {hwnd: hControl2, func: Func("Control2")} ]
OnMessage( WM_MOUSEMOVE, Func("MsgHandling").Bind(controls) )
OnMessage( WM_LBUTTONDBLCLK, Func("MsgHandling").Bind(controls) )
OnMessage( WM_RBUTTONDOWN, Func("MsgHandling").Bind(controls) )
Control1(msg) {
if (msg = WM_MOUSEMOVE) {
TrayTip,, Курсор над контролом 1
}
if (msg = WM_LBUTTONDBLCLK) {
TrayTip,, Двойной клик по контролу 1
}
if (msg = WM_RBUTTONDOWN) {
TrayTip,, Правая кнопка нажата над контролом 1
}
}
Control2(msg) {
if (msg = WM_MOUSEMOVE) {
TrayTip,, Курсор над контролом 2
}
if (msg = WM_LBUTTONDBLCLK) {
TrayTip,, Двойной клик по контролу 2
}
if (msg = WM_RBUTTONDOWN) {
TrayTip,, Правая кнопка нажата над контролом 2
}
}
MsgHandling(controls, wp, lp, msg) {
MouseGetPos,,,, hControl, 2
if (msg = WM_MOUSEMOVE) {
for k, v in controls {
if (hControl = v.hwnd && !v.hover) {
v.hover := true
v.func.Call(msg)
timer := Func("CheckHover").Bind(v)
SetTimer, % timer, 50
}
}
}
if (msg = WM_LBUTTONDBLCLK || msg = WM_RBUTTONDOWN) {
for k, v in controls {
if (hControl = v.hwnd)
v.func.Call(msg)
}
}
}
CheckHover(obj) {
MouseGetPos,,,, hControl, 2
if (hControl != obj.hwnd) {
SetTimer,, Delete
obj.hover := false
}
}
Разработка AHK-скриптов:
e-mail
dfiveg@mail.ruTelegram
jollycoder