Code: Select all
; ====================== Functions =========================
ControlClick2(X, Y, WinTitle="", WinText="", ExcludeTitle="", ExcludeText="")
{
hwnd:=ControlFromPoint(X, Y, WinTitle, WinText, cX, cY
, ExcludeTitle, ExcludeText)
PostMessage, 0x201, 0, cX&0xFFFF | cY<<16,, ahk_id %hwnd% ; WM_LBUTTONDOWN
PostMessage, 0x202, 0, cX&0xFFFF | cY<<16,, ahk_id %hwnd% ; WM_LBUTTONUP
PostMessage, 0x203, 0, cX&0xFFFF | cY<<16,, ahk_id %hwnd% ; WM_LBUTTONDBLCLCK
PostMessage, 0x202, 0, cX&0xFFFF | cY<<16,, ahk_id %hwnd% ; WM_LBUTTONUP
}
; Retrieves the control at the specified point.
; X [in] X-coordinate relative to the top-left of the window.
; Y [in] Y-coordinate relative to the top-left of the window.
; WinTitle [in] Title of the window whose controls will be searched.
; WinText [in]
; cX [out] X-coordinate relative to the top-left of the control.
; cY [out] Y-coordinate relative to the top-left of the control.
; ExcludeTitle [in]
; ExcludeText [in]
; Return Value: The hwnd of the control if found, otherwise the hwnd of the window.
ControlFromPoint(X, Y, WinTitle="", WinText="", ByRef cX="", ByRef cY="", ExcludeTitle="", ExcludeText="")
{
static EnumChildFindPointProc=0
if !EnumChildFindPointProc
EnumChildFindPointProc := RegisterCallback("EnumChildFindPoint","Fast")
if !(target_window := WinExist(WinTitle, WinText, ExcludeTitle, ExcludeText))
return false
VarSetCapacity(rect, 16)
DllCall("GetWindowRect","uint",target_window,"uint",&rect)
VarSetCapacity(pah, 36, 0)
NumPut(X + NumGet(rect,0,"int"), pah,0,"int")
NumPut(Y + NumGet(rect,4,"int"), pah,4,"int")
DllCall("EnumChildWindows","uint",target_window,"uint",EnumChildFindPointProc,"uint",&pah)
control_window := NumGet(pah,24) ? NumGet(pah,24) : target_window
DllCall("ScreenToClient","uint",control_window,"uint",&pah)
cX:=NumGet(pah,0,"int"), cY:=NumGet(pah,4,"int")
return control_window
}
; Ported from AutoHotkey::script2.cpp::EnumChildFindPoint()
EnumChildFindPoint(aWnd, lParam)
{
if !DllCall("IsWindowVisible","uint",aWnd)
return true
VarSetCapacity(rect, 16)
if !DllCall("GetWindowRect","uint",aWnd,"uint",&rect)
return true
pt_x:=NumGet(lParam+0,0,"int"), pt_y:=NumGet(lParam+0,4,"int")
rect_left:=NumGet(rect,0,"int"), rect_right:=NumGet(rect,8,"int")
rect_top:=NumGet(rect,4,"int"), rect_bottom:=NumGet(rect,12,"int")
if (pt_x >= rect_left && pt_x <= rect_right && pt_y >= rect_top && pt_y <= rect_bottom)
{
center_x := rect_left + (rect_right - rect_left) / 2
center_y := rect_top + (rect_bottom - rect_top) / 2
distance := Sqrt((pt_x-center_x)**2 + (pt_y-center_y)**2)
update_it := !NumGet(lParam+24)
if (!update_it)
{
rect_found_left:=NumGet(lParam+8,0,"int"), rect_found_right:=NumGet(lParam+8,8,"int")
rect_found_top:=NumGet(lParam+8,4,"int"), rect_found_bottom:=NumGet(lParam+8,12,"int")
if (rect_left >= rect_found_left && rect_right <= rect_found_right
&& rect_top >= rect_found_top && rect_bottom <= rect_found_bottom)
update_it := true
else if (distance < NumGet(lParam+28,0,"double")
&& (rect_found_left < rect_left || rect_found_right > rect_right
|| rect_found_top < rect_top || rect_found_bottom > rect_bottom))
update_it := true
}
if (update_it)
{
NumPut(aWnd, lParam+24)
DllCall("RtlMoveMemory","uint",lParam+8,"uint",&rect,"uint",16)
NumPut(distance, lParam+28, 0, "double")
}
}
return true
}
; ===============================================
~WheelUp::
#IfWinActive ahk_class QWidget
; Easy
Text:="|<Pic2>0x000065@1.00$71.000000000000000000000000000000000000000000000000000000000000000000000000000000000000U000000000010000000000020000000000040000000000080000280000000000004000000000000000100000000000200008000000400000000000800000080000E0E000000000U00000000001000000000000000000000000000000E000000000000000000000000001"
if (ok:=FindText(0, 0, A_ScreenWidth, A_ScreenHeight, 0, 0, Text, , 0))
{
WinRestore, ahk_exe AkelPad.exe
Click
Sleep 250
ControlClick2(960, 324, "^.*Engvidshortcut.*$")
;MouseGetPos, xpos, ypos
;MouseClick, left, 914, 317, 2, 0 ; [WhichButton , X, Y, ClickCount, Speed, D|U, R]
Sleep 500
ControlSend, , ^c, ^.*Engvidshortcut.*$
Sleep 250
ControlClick, x60 y150, ahk_class QWidget,, Left, 1, NA ; клик по строке ввода текста
;MouseMove, xpos, ypos, 0
}
; Again
Text:="|<Pic3>0x803600@1.00$71.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E0000000000000000000000000804004000100E00000004000U0000000000100U0000000020100000100040200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001"
if (ok:=FindText(0, 0, A_ScreenWidth, A_ScreenHeight, 0, 0, Text, , 0))
{
Click
sleep 5000
ControlClick2(960, 324, "^.*Engvidshortcut.*$")
Sleep 500
ControlSend, , ^c, ^.*Engvidshortcut.*$
Sleep 250
ControlClick, x60 y150, ahk_class QWidget,, Left, 1, NA ;
;MouseMove, xpos, ypos, 0
}