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

Using ControlClick coordinates on a window without any controls

我需要将点击发送到非活动 window 上的某个位置。此 window 在所述坐标处没有任何可点击的控件。

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

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

几件事。 CoordMode should not be used (unless for some other reason) as it doesn't impact the positioning of a ControlClick -- 始终相对于您使用的 WindowTitle window。

也许设置你的 SetTitleMatchMode to 2 because you are not using the exact correct WindowTitle text; and in addition, if your window is like a Citrix XenApp window, you may have to deal with another criteria for identifying the target window (see WinTitle in help).

另外,您可以尝试识别并使用ClassNN(控件的class名称和实例编号)或控件的name/text,两者都可以通过 Window Spy.

确定

最后,你试过最后没有Pos吗?这主要用于当控件 class 与 x y 位置冲突时。您也可以在 WindowTitle 之后尝试不添加任何内容,因为如果您使用正确的 window 标题或其他标准,ControlClick, x636 y189, WindowTitle(请注意 space)应该可以自行运行:

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

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

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

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

更多想法:

更新您的 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 instead of 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 
}