/*AHK屏幕-工作区坐标转换的两种方法演示
By 枫丹白露@XZ 2017.2.23
为啥?
全屏(绝对)、窗口(相对)坐标可能受到系统主题影响(尤其xp)
Client [v1.1.05+]:坐标相对于活动窗口的工作区,其中不包括标题栏、菜单栏(如果它含有标准菜单栏)和边框。Client 坐标模式较少依赖于操作系统版本和主题.
当通过大漠等其它方式得到全屏坐标而又不想频繁转换CoordMode时
方法:
1.取巧,适合固定不动窗口
2.DLLCALL,通用
*/ Gui Show,W750 H600 CEnter,屏幕-工作区坐标转换 Sleep 1000 MouseMove 100,100 Xr:=9999,Yr:=9999 CoordMode,Mouse,Screen MouseGetPos,x1,y1 CoordMode,Mouse,client MouseGetPos,x2,y2 ;计算偏移,只对GUI ZB有效 Xr:=x1-x2 Yr:=y1-y2 MsgBox,% "系统 " x1 "," y1 " 客户区 " x2 "," y2 " 差值 " Xr "," Yr CoordMode,Mouse,Screen Run,Au3_spy.exe ;打开Spy进行对比 loop { MouseGetPos,x,y ToolTip,% "偏移转换 x-xr: " x-Xr " y-yr : " y-Yr ,0,200,1 VarSetCapacity(Rt, 8) NumPut(x,rt, 0, "int") NumPut(y,rt,4,"int") DllCall("ScreenToClient", "Uint", WinExist("屏幕-工作区坐标转换"), "Uint", &rt) ToolTip,% "API转换 X " NumGet(Rt, 0, "Int") " Y " NumGet(Rt, 4, "Int") ,0,240,2 Sleep, 200 } GuiClose: ExitApp
赞