在没有任何控件的 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
}
我需要将点击发送到非活动 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
}