xing999999 发表于 2015-12-20 17:55:51

[已解决]无法获取窗体上任何任何任何控件,要怎么模拟鼠标点击?

本帖最后由 xing999999 于 2015-12-22 12:48 编辑

例子:
Run("calc.exe")
$hwnd=WinWait("计算器","",120)
WinActive($hwnd)
Sleep(1000)
Opt("MouseCoordMode",2);设置鼠标函数的坐标参照,相对当前激活窗口客户区坐标
$a=ControlGetPos("计算器","","Button15");获取指定控件相对其窗口的坐标位置和大小
MouseClick("left",$a,$a)

假设你无法获取Button15,那要怎么模拟鼠标点击到Button15这个位置上呢?而且能在不同的分辨率下都能准确的点击到。

现在好多程序都是这样,举例,360安全浏览器,猎豹浏览器等等,一运行就是一个窗体,根本无法捕捉到窗体里的东西,我用了官方以及非官方的窗口信息工具都是一样。肉眼看上去窗体里有,安装路径,有设置默认浏览器,有参加体验计划,有已阅读并同意,有开始安装按钮(以最新的猎豹浏览器KSbrowser_5.3.108.10728为例。)但是就是无法捕捉到任何控件,愁死了。。

我想知道大概的方案,不需要高手们提供具体的代码(能够提供实例当然最好,就怕有人骂我说是来要代码的,不提供代码只提供方案,我就自己慢慢去研究)。我的想法是,先获取窗口的句柄,然后再获取窗口的体积和坐标,这2步都可以做到,但下一步呢?怎么获取那个要点击的按钮在什么坐标,然后怎么模拟鼠标过去点击,并且在不同的分辨率下都能准确点击到?

xing999999 发表于 2015-12-20 20:36:31

我测试了很长时间,拖动窗口都已经能做到了。以猎豹最新的浏览器。方向如下:
1、调用Opt("WinTitleMatchMode", 4)
2、建立窗口大小的循环判断,因为猎豹浏览器的安装程序一点开会自动变大。
3、建立变量获取句柄
4、根据所获句柄获取窗口大小以及XY坐标
5、用mouseclick来进行模拟点击。唯一要注意的地方是第4点获取的XY坐标是窗口左上那一个点的(为这个我查了N长时间的资料。。。),再根据检测出来的目的位置的鼠标坐标,进行计算以获得+值。

为了测试特地SLEEP了10秒,以方便拖动窗口,最后验证还是准确的点击到了目标。开心不到2分钟。。。

分辨率一改,就不行了。。哎。。。无语

afan 发表于 2015-12-20 21:16:05

本帖最后由 afan 于 2015-12-20 22:12 编辑

Opt("MouseCoordMode", 0);加这一行就可以直接用窗口的“相对”坐标了,不用费劲计算,或者
Opt("MouseCoordMode", 2);加这一行就可以直接用窗口的“用户”坐标,在 Au3.WProbe 探测器中拖动靶标到需要点击的位置,在显示控件坐标的位置,鼠标右键点击“控件”,坐标即会转换为“用户”坐标。单击“用户”,将此坐标复制,在 MouseClick("left",后面粘贴。

仅提醒一句,不参与讨论

xing999999 发表于 2015-12-21 17:31:18

回复 3# afan


    一变分辨率就不行了。。。。悲剧

lxwlxwayy 发表于 2015-12-21 20:54:15

用win,api试下

lxwlxwayy 发表于 2015-12-21 20:54:31

用win,api试下

xing999999 发表于 2015-12-22 12:48:02

谢谢楼上。。。

afan 发表于 2015-12-22 13:24:51

回复afan


    一变分辨率就不行了。。。。悲剧
xing999999 发表于 2015-12-21 17:31 http://www.autoitx.com/images/common/back.gif


    你知道你为什么悲剧吗?别人跟你说了这么多你学到了什么?反馈了什么?
光一楼这两句我都不想再跟你说什么了
WinActive($hwnd)
Sleep(1000)
因为你当别人说的是废话,是空气。

我在3#说的完全就是针对分辨率不同而使用的跟分辨率几乎无关的用户坐标,结果你就回了一句“一变分辨率就不行了”不知道我干嘛费这劲!

jjf 发表于 2016-11-19 11:33:37

回复 8# afan


    精辟、很给力。
页: [1]
查看完整版本: [已解决]无法获取窗体上任何任何任何控件,要怎么模拟鼠标点击?