偶尔会遇到一些非常规的安装窗体,不能用完全用键盘操控,在AutoIt Spy里又找不到控件,这时唯一的方法就是用鼠标操作。如何解决鼠标操作时坐标的准确性和坐标的通用性成为要解决的主要问题。
一般情况下窗体的大小和控件在窗体里的位置都是固定的,因此控件和窗体的相对位置成为解决鼠标坐标的切入点。
由于MouseClick () 函数中鼠标的坐标是屏幕里的绝对坐标,所以我曾经使用过先取得窗体坐标,再计算控件坐标的方法。如下
$ButtonX = $st[0] + 458 ;计算控件X坐标
$ButtonY = $st[1] + 305 ;计算控件Y坐标
虽然上面的方法没有问题,但实际上AutoIt提供了鼠标相对窗体坐标的解决方法,那就是切换鼠标坐标模式Opt ("MouseCoordMode", 1)( 本文出处: http://bbs.yidabu.com/thread-74-1.html )
切换过鼠标坐标模式后,在使用鼠标操作时坐标就可以直接使用相对当前激活窗体的,避免了上面的计算。
上面的操作虽然没有问题但使用时有一个隐含条件,窗体必须完全在屏幕内(至少控件部分),因为鼠标无法点到屏幕外的地方。现实中还是有这种可能的,除去人为因素外,低分辨率是一个直接因素。目前本人能想到两个方法,一是改变分辨率,但还没有找到对应的命令,而且不同的显示器能调节的范围也不一样,这个方法有待考证;另一个方法是将窗体移动到屏幕内,这个方法很容易实现。
下面是移动窗体方法在安装Kv2004的应用
If $st[0] + $st[2] > @DesktopWidth Then
$mx = @DesktopWidth - $st[2]
Else
$mx = $st[0]
EndIf
If $st[1] + $st[3] > @DesktopHeight Then
$my = @DesktopHeight - $st[3] - 35
Else
$my = $st[1]
EndIf
If $mx < $st[0] Or $my < $st[1] Then
WinMove("江民杀毒软件KV2004", "欢迎进入", $mx, $my)
EndIf
在这段脚本中,先取得当前窗体的位置到数组st中,再判断窗体的右边和下边是否有超出屏幕的,计算出恰好在屏幕内时的位置。如果这个位置小于原坐标则进行移动。
上面一句$my = @DesktopHeight - $st[3] - 35,是设置调整到的Y坐标位置,之所以又减35,是为了避开任务栏。
另外上面的方法在实际应用中也不是一成不变的,上面只是考虑窗体右边和下边移入窗口(因为大多安装安装窗体的操作控件在偏右下的位置),但左边和上面是不是在窗体里就不一定了。其实应该以控件是否可以为中心,当然还是这个思路。编写脚本时做相应的修改。
总之:解决窗体是否在屏幕里,然后切换鼠标模式到相对激活窗体,是目前解决鼠标操作可靠性的关键