在没有任何控件的窗口上使用ControlClick坐标

时间:2015-12-01 13:03:15

标签: autohotkey

我需要点击一个非活动窗口上的位置。该窗口在所述坐标处没有任何可点击的控件。

CoordMode, Mouse, Screen
SetControlDelay -1
ControlClick, x636 y189,WindowTitle,,,, NA Pos  

每次我运行上面的代码时,它都不会点击我指定的位置。无论窗口是否处于活动状态,它都会点击我当前的鼠标位置。

3 个答案:

答案 0 :(得分:3)

更多想法:

更新您的AHK:
https://autohotkey.com/download/ahk-install.exe

以管理员身份运行您的脚本:

If not A_IsAdmin ;force the script to run as admin
{
    Run *RunAs "%A_ScriptFullPath%"
    ExitApp
}

使用PostMessage代替ControlClick

PostClick(636,189,"WindowTitle")

PostClick(x,y,win="A") {
    lParam := x & 0xFFFF | (y & 0xFFFF) << 16
    PostMessage, 0x201, , %lParam%, , %win% ;WM_LBUTTONDOWN 
    PostMessage, 0x202, , %lParam%, ,  %win% ;WM_LBUTTONUP 
}

答案 1 :(得分:2)

喔。如果窗口中没有控件可以单击这些坐标,那么ControlClick将不起作用。请改用简单的MouseClick命令。如果您每次都没有相同的xy坐标,例如,因为窗口移动,您可以使用WinGetPos查询窗口位置,然后将坐标传递给MouseClick作为基于的变量结果。

    WinGetPos, Xp, Yp, Wi, He, WindowTitle
    MouseClick, left, %Xp% + 636, %Yp% + 189

答案 2 :(得分:0)

有几件事。不应使用CoordMode(除非出于其他原因),因为它不会影响ControlClick的定位 - 它始终相对于您使用的WindowTitle窗口。

可能会将SetTitleMatchMode设置为2,因为您没有使用完全正确的WindowTitle文字;此外,如果您的窗口类似于Citrix XenApp窗口,则可能必须处理另一个标识目标窗口的标准(see WinTitle in help)。

此外,您可以尝试识别并使用ClassNN(控件的类名和实例编号)或控件的名称/文本,这两者都可以通过Window Spy确定。

最后,您是否在最后没有Pos的情况下尝试了?这主要用于控件类与x y位置冲突时。如果您使用正确的窗口标题或其他标准,您也可以在WindowTitle ControlClick, x636 y189, WindowTitle之后没有任何内容尝试它(注意空格)应该自行工作:

    SetTitleMatchMode, 2
    SetControlDelay -1
    ControlClick, x636 y189, WindowTitle,,,, NA

    SetTitleMatchMode, 2
    SetControlDelay -1
    ControlClick, x636 y189, WindowTitle