Autohotkey 使用单击/移动鼠标在特定程序中自动热键零星移动鼠标行为
我制作了一个移动鼠标的快速ahk脚本,发现鼠标没有移动到所需的位置。我设置了一个循环,每隔几秒钟不断地将光标移动到相同的位置,而鼠标将被移动到不同的、看似随机的位置。我发现这只是一个特定程序的窗口聚焦的情况,如果我有任何其他程序聚焦,鼠标会按预期移动。我尝试使用Click/MouseMove,它们都表现出这种行为。我还尝试了DllCall(“SetCursorPosition”),但那甚至不能移动鼠标。只是想进一步澄清一下,当问题计划没有集中注意力时,这三种方法都很有效——我只在问题计划集中注意力时才有问题 经进一步检查,这似乎是由于该程序的自定义鼠标灵敏度实现。如果我使用MouseMove将光标相对于当前位置向下移动1个像素,它会向下移动50。如果我增加程序的鼠标灵敏度,它会进一步向下移动。我想这也是为什么我用鼠标点击得到了看似随机的鼠标位置 现在我已经实现了一个自定义的点击功能,它可以取消程序的焦点,移动鼠标,重新聚焦程序,然后点击,但是程序不喜欢这样。有时它可以工作,但有时程序会忽略窗口聚焦时鼠标所在位置的鼠标单击,导致脚本无法执行我希望它能够执行的操作 在使用Click x,y/MouseMove时,我有没有办法考虑到这个程序的鼠标敏感度?或者是一种不受程序鼠标灵敏度影响的移动鼠标的替代方法。我尝试过使用所有类型的CoordMode,但它们都有相同的问题 编辑:我正在使用的脚本Autohotkey 使用单击/移动鼠标在特定程序中自动热键零星移动鼠标行为,autohotkey,Autohotkey,我制作了一个移动鼠标的快速ahk脚本,发现鼠标没有移动到所需的位置。我设置了一个循环,每隔几秒钟不断地将光标移动到相同的位置,而鼠标将被移动到不同的、看似随机的位置。我发现这只是一个特定程序的窗口聚焦的情况,如果我有任何其他程序聚焦,鼠标会按预期移动。我尝试使用Click/MouseMove,它们都表现出这种行为。我还尝试了DllCall(“SetCursorPosition”),但那甚至不能移动鼠标。只是想进一步澄清一下,当问题计划没有集中注意力时,这三种方法都很有效——我只在问题计划集中注意
CoordMode, Mouse,Screen ; I've tried every CoordMode but none solve the problem
AppsKey::
while true {
Click 500,500,0
sleep,2000
}
Return
或者,可能是您没有使用
CoordMode
,默认情况下,如果您没有指定此选项,很遗憾,鼠标位置依赖于活动窗口,这可能会导致您发现的不可预测的结果。为了更可靠,我喜欢在鼠标移动命令之前始终使用此命令,该命令将鼠标坐标系设置为参考屏幕:
CoordMode, Mouse
解释
关于以下方面的文件:
如果未使用此命令,则除另有说明的命令(例如WinMove和InputBox)外,所有命令都使用相对于活动窗口的坐标
完整的命令是
CoordMode, Mouse, Screen
但是文档说我们可以省略第二个参数,它默认为Screen:
如果省略Param2,则默认为Screen
因此,要获得更一致的结果,请使用
CoordMode
命令。或者,可能是因为您没有使用CoordMode
,默认情况下,如果您没有指定,很遗憾,鼠标位置依赖于活动窗口,这可能会导致您发现的不可预测的结果。为了更可靠,我喜欢在鼠标移动命令之前始终使用此命令,该命令将鼠标坐标系设置为参考屏幕:
CoordMode, Mouse
解释
关于以下方面的文件:
如果未使用此命令,则除另有说明的命令(例如WinMove和InputBox)外,所有命令都使用相对于活动窗口的坐标
完整的命令是
CoordMode, Mouse, Screen
但是文档说我们可以省略第二个参数,它默认为Screen:
如果省略Param2,则默认为Screen
因此,要获得更一致的结果,请使用CoordMode
命令。使用SendPlay进行尝试(但如果使用UAC,请参见下文):
SendPlay[v1.0.43+]
SendPlay最大的优势在于它能够在比其他模式更广泛的游戏中“回放”击键和鼠标点击。例如,一个特定的游戏可能只接受带有SendPlay选项的热字符串。但是,如果启用了用户帐户控制,即使脚本以管理员身份运行,SendPlay在Windows Vista或更高版本上也可能完全无效。以下脚本提供了此问题的解决方法:
在三种发送模式中,SendPlay是最不寻常的,因为它本身并不模拟击键和鼠标点击。相反,它创建了一系列事件(消息),这些事件(消息)直接流向活动窗口(类似于ControlSend,但级别较低)。因此,SendPlay不会触发热键或热字符串。尝试使用SendPlay(但如果使用UAC,请参见下文):
SendPlay[v1.0.43+]
SendPlay最大的优势在于它能够在比其他模式更广泛的游戏中“回放”击键和鼠标点击。例如,一个特定的游戏可能只接受带有SendPlay选项的热字符串。但是,如果启用了用户帐户控制,即使脚本以管理员身份运行,SendPlay在Windows Vista或更高版本上也可能完全无效。以下脚本提供了此问题的解决方法:
在三种发送模式中,SendPlay是最不寻常的,因为它本身并不模拟击键和鼠标点击。相反,它创建了一系列事件(消息),这些事件(消息)直接流向活动窗口(类似于ControlSend,但级别较低)。因此,SendPlay不会触发热键或热字符串。您的问题是大量的。阅读太多,间隔太小。保持简短,仅在必要时进行详细说明。如果不删除相关信息,则不能将其缩短。鼠标“移动”部分是否真的很重要,还是您只需单击某些位置?您的问题很大。阅读太多,间隔太小。简明扼要,只有在必要时才详细说明。如果不删除相关信息,就不能将内容缩短。鼠标实际上是“移动”部分吗