找回密码
 加入
搜索
查看: 6971|回复: 7

[AU3基础] [已解决]鼠标的坐标位置如何确定(在不同分辨率的显示器下)?

  [复制链接]
发表于 2011-2-24 15:06:05 | 显示全部楼层 |阅读模式
本帖最后由 pdp320921 于 2011-2-26 11:44 编辑

对于坐标问题很困惑:
Opt("MouseCoordMode", 1) 
$size = WinGetPos("指定窗口");
$pos =  ControlGetPos("窗口标题", "窗口文本", 控件ID)
$x = $size[0]+$pos[0]
$y = $size[1]+$pos[1]
MouseClick("left",$x,$y)
如果控件ID不存在的话
如果想用MouseClick,可是该函数里面的坐标鼠标相对屏幕的位置,如何保证在不同的分辨率的显示器下确定鼠标点击“控件”坐标
如果控件ID不存在,但通过"窗口信息工具"可以看到"控件点击坐标",应该就是ControlGetPos里的坐标,可是试了不行

如何保证在不同的分辨率的显示器下确定鼠标点击“控件”坐标?

求解!
发表于 2011-2-24 18:22:39 | 显示全部楼层
你没仔细看Opt("MouseCoordMode", 1)这个吧?注意看帮助,
0 = 激活窗口的相对坐标
1 = 绝对屏幕坐标(默认)
2 = 激活窗口客户区的相对坐标
你选0或2不就可以了,屏幕分辨率不一定,窗口尺寸一般总是一定的吧。
当然,如果窗口加入了可调整尺寸边界样式,也就是窗口会因为用户的拖拉改变尺寸,那么就只能通过控件句柄用函数ControlClick来点击了
如果碰上即可以改变尺寸的窗口,又不是标准GUI,控件句柄检索不到的话,那我也不知道怎么办了。
发表于 2011-2-24 18:26:20 | 显示全部楼层
二楼正解....
 楼主| 发表于 2011-2-24 20:24:03 | 显示全部楼层
本帖最后由 pdp320921 于 2011-2-24 20:26 编辑

回复#2楼

Opt("MouseCoordMode", 1)
0 = 激活窗口的相对坐标 ;激活窗口相对什么的坐标?
1 = 绝对屏幕坐标(默认)
2 = 激活窗口客户区的相对坐标 ;是客户区相对窗口的坐标吗?客户去又是怎么定义的呢
发表于 2011-2-25 01:04:27 | 显示全部楼层
懒得截图说明了,下面代码楼主可以摸索摸索

激活窗口的相对坐标:指的是当前所激活的窗口的左上角为基准,左上角的坐标是: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[0] & "        Y: " & $Pos[1])
        
        Opt("MouseCoordMode", 1)
        $Pos = MouseGetPos()
        GUICtrlSetData($Label2, "相对于整个屏幕,        X: " & $Pos[0] & "        Y: " & $Pos[1])
        
        Opt("MouseCoordMode", 2)
        $Pos = MouseGetPos()
        GUICtrlSetData($Label3, "相对于窗口客户区,        X: " & $Pos[0] & "        Y: " & $Pos[1])
EndFunc
 楼主| 发表于 2011-2-25 09:52:57 | 显示全部楼层
感谢5#的回复
窗口客户区就是窗口除了标题外的区域吗?
发表于 2011-2-26 11:35:04 | 显示全部楼层
回复 6# pdp320921


    是的,再说你执行下5楼的代码,然后随便找个窗口看一下不就知道了嘛,显示(0,0)的就是原点
发表于 2011-11-3 10:19:10 | 显示全部楼层
这问题我也遇到过,应该不能通过显示器大小判断!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-10-1 09:49 , Processed in 0.075815 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表