Automated tests AutoIT ControlGetPos返回错误的XY位置

Automated tests AutoIT ControlGetPos返回错误的XY位置,automated-tests,autoit,Automated Tests,Autoit,在AutoIT中,功能ControlGetPos应返回控件(aka按钮)在窗口中的位置。我应该能够只添加窗口位置到获取屏幕上控件的位置 run("calc") WinWaitActive("Calculator") $m = WinGetPos('[ACTIVE]') $k = ControlGetPos('[ACTIVE]','','Button9') $k[0] += $m[0] $k[1] += $m[1] MouseClick("main",$k[0] + $

在AutoIT中,功能ControlGetPos应返回控件(aka按钮)在窗口中的位置。我应该能够只添加窗口位置到获取屏幕上控件的位置

  run("calc")
  WinWaitActive("Calculator")
  $m = WinGetPos('[ACTIVE]')
  $k = ControlGetPos('[ACTIVE]','','Button9')
  $k[0] += $m[0]
  $k[1] += $m[1]
  MouseClick("main",$k[0] + $k[2]/2, $k[1] + $k[3]/2)  ; click middle of button
  Sleep(2000)
  WinClose("Calculator")
  Sleep(2000)

但这不起作用。它点击太高,大约40像素。为什么?

问题是ControlGetPos返回相对于窗口的客户区的位置,忽略窗口的边框和标题栏

而是使用ControlGetHandle,然后使用WinGetPos,如下所示

  run("calc")
  WinWaitActive("Calculator")
  $hc = ControlGetHandle('[ACTIVE]','','Button9')
  $k = WinGetPos($hc)
  MouseClick("main",$k[0] + $k[2]/2, $k[1] + $k[3]/2)  ; click middle of button
  Sleep(2000)
  WinClose("Calculator")
  Sleep(2000)

我道歉@JohnHenckel,这是不必要的。我想在我不该说的那句屁话背后,我想说的是相信你自己,因为你可以看到这一切都很顺利(在一小时内回答了你自己的问题);)这让你怀疑这是否只是一个bug。为什么ControlGetPos会忽略标题栏?那完全没有用。在我看来,这应该是修复返回屏幕位置。这将与其他api(如WinGetPos)更加一致。它希望您自己获得该职位。不是bug,只是wingtpos()+ControlGetPos():)如果你能做到这一点就好了。然而,WinGetPos()+ControlGetPos()未能考虑标题栏和窗口边框。试图帮助您找到多种方法来获得解决方案,希望能找到最适合您需要的方法。尝试多种方式获得结果输出将是一种很好的学习体验,这也是我如何获得autoit语言知识的方式:)