비활성 클릭시에는 마우스 좌표를 스파이에서 가져와,
Active Window의 좌표를 클릭해주면 됩니다만..
실제 좌표와 약간의 오차가 있습니다.
그래서 보정한 함수가 아래 sendClick2 입니다.
아래 코드를 가지고, 블루스택에서 터치좌표를 표시하게끔 한뒤에 F4를 눌러 테스트해보면 알 수 있습니다.
처음 누르는 곳은 Active 윈도우의 마우스 좌표이고,
두번째 누르는 곳은 보정된 좌표입니다.
실제 사용할 때에는 스파이에 나오는 좌표를 그대로 사용하면됩니다.
제 샘플코드에서는 위쪽에 나오는 좌표입니다.
sendClick2(x, y) 이렇게 사용합니다.
마우스에서 윈도우 내부 좌표 370, 288을 클릭하면..
보정된 좌표 366, 261을 클릭하는 것을 보여줍니다.
sendClick(370, 288) ?-> ?윈도우 내부 좌표 클릭은 366, 261
;---- 이하 코드
SendMode Input ?; Recommended for new scripts due to its superior speed and reliability.
CoordMode, Pixel, Screen
Gui, Add, Text, x10 y10 w250 h30 vAID, ActiveID
; Gui, Add, Button, x250 y10 w40 h30 vCopy1, Copy
Gui, Add, Text, x10 y40 w250 h30 vPOS,
Gui, Add, Text, x10 y100 w250 h30 vPOS2,
Gui, Show, AutoSize, SampleWindow
GuiControl, Show, Pic
Return
GuiClose:
ExitApp
F4::
WinGetActiveTitle, ActiveID ; 창이름 가져오기
GuiControl, Text, AID, %ActiveID%
MouseGetPos, x, y ; 1. 마우스 위치를 가져와서
; -- 이부분은 좌표 표시하기 위해 들어간 부분.. 필요없습니다.
WinGetPos, winX, winY, winW, winH, %ActiveID%
SysGet, capH, 4 ; 캡션Height
SysGet, bordW, 32 ; 보더Width
SysGet, bordH, 33 ; 보더Height
px2:=x-bordW/2
py2:=y-bordH/2-capH
GuiControl, Text, POS, 마우스위치 - x : %x% , y : %y%
GuiControl, Text, POS2, 보정위치 - x : %px2% , y : %py2%
p := x|y<<16
PostMessage, 0x201, 0, %p%, , %ActiveID%
PostMessage, 0x202, 0, %p%, , %ActiveID%
Sleep, 500
;-- 여기까지 필요없습니다.
sendClick2(x, y) ; 2. 보정된 좌표를 클릭합니다.
Return
;클릭
sendClick2( x, y) {
? ? global ActiveID
? ? SysGet, capH, 4 ; 캡션Height
? ? SysGet, bordW, 32 ; 보더Width
? ? SysGet, bordH, 33 ; 보더Height
? ? px:=x-bordW/2
? ? py:=y-bordH/2-capH
? ? p := px|py<<16
? ? PostMessage, 0x201, 0, %p%, , %ActiveID%
? ? PostMessage, 0x202, 0, %p%, , %ActiveID%
? ? Sleep, 200
? ? Return
}
CoordMode, Mouse ,Relative
이렇게 설정하고 구했을때 나오는 마우스 좌표값이랑
위에서 보여주는 보정된 마우스 좌표값이랑 다른가요?