[已解决]鼠标的坐标位置如何确定(在不同分辨率的显示器下)?
本帖最后由 pdp320921 于 2011-2-26 11:44 编辑对于坐标问题很困惑:
Opt("MouseCoordMode", 1)
$size = WinGetPos("指定窗口");
$pos =ControlGetPos("窗口标题", "窗口文本", 控件ID)
$x = $size+$pos
$y = $size+$pos
MouseClick("left",$x,$y)
如果控件ID不存在的话
如果想用MouseClick,可是该函数里面的坐标鼠标相对屏幕的位置,如何保证在不同的分辨率的显示器下确定鼠标点击“控件”坐标
如果控件ID不存在,但通过"窗口信息工具"可以看到"控件点击坐标",应该就是ControlGetPos里的坐标,可是试了不行
如何保证在不同的分辨率的显示器下确定鼠标点击“控件”坐标?
求解! 你没仔细看Opt("MouseCoordMode", 1)这个吧?注意看帮助,
0 = 激活窗口的相对坐标
1 = 绝对屏幕坐标(默认)
2 = 激活窗口客户区的相对坐标
你选0或2不就可以了,屏幕分辨率不一定,窗口尺寸一般总是一定的吧。
当然,如果窗口加入了可调整尺寸边界样式,也就是窗口会因为用户的拖拉改变尺寸,那么就只能通过控件句柄用函数ControlClick来点击了
如果碰上即可以改变尺寸的窗口,又不是标准GUI,控件句柄检索不到的话,那我也不知道怎么办了。 二楼正解.... 本帖最后由 pdp320921 于 2011-2-24 20:26 编辑
回复#2楼
Opt("MouseCoordMode", 1)
0 = 激活窗口的相对坐标 ;激活窗口相对什么的坐标?
1 = 绝对屏幕坐标(默认)
2 = 激活窗口客户区的相对坐标 ;是客户区相对窗口的坐标吗?客户去又是怎么定义的呢? 懒得截图说明了,下面代码楼主可以摸索摸索
激活窗口的相对坐标:指的是当前所激活的窗口的左上角为基准,左上角的坐标是:X=0,Y=0
激活窗口客户区的相对坐标 :客户区是指窗口边框里面的区域,以该区域的左上角为基准#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$GUI = GUICreate("函数演示", 300, 200) ; 创建居中显示的对话框窗口
GUICtrlCreateLabel("鼠标当前坐标", 10, 10, 80, 20)
$Label1 = GUICtrlCreateLabel("", 10, 40, 250, 20)
$Label2 = GUICtrlCreateLabel("", 10, 60, 250, 20)
$Label3 = GUICtrlCreateLabel("", 10, 80, 250, 20)
GUISetState(@SW_SHOW) ; 显示对话框窗口
AdlibRegister("Pos")
While 1
If WinActive($GUI, "") = 0 Then WinActivate($GUI, "")
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Then Exit
WEnd
Func Pos()
Opt("MouseCoordMode", 0)
$Pos = MouseGetPos()
GUICtrlSetData($Label1, "相对于当前窗口, X: " & $Pos & " Y: " & $Pos)
Opt("MouseCoordMode", 1)
$Pos = MouseGetPos()
GUICtrlSetData($Label2, "相对于整个屏幕, X: " & $Pos & " Y: " & $Pos)
Opt("MouseCoordMode", 2)
$Pos = MouseGetPos()
GUICtrlSetData($Label3, "相对于窗口客户区, X: " & $Pos & " Y: " & $Pos)
EndFunc 感谢5#的回复
窗口客户区就是窗口除了标题外的区域吗? 回复 6# pdp320921
是的,再说你执行下5楼的代码,然后随便找个窗口看一下不就知道了嘛,显示(0,0)的就是原点 这问题我也遇到过,应该不能通过显示器大小判断!
页:
[1]