Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Autohotkey 使用单击/移动鼠标在特定程序中自动热键零星移动鼠标行为_Autohotkey - Fatal编程技术网

Autohotkey 使用单击/移动鼠标在特定程序中自动热键零星移动鼠标行为

Autohotkey 使用单击/移动鼠标在特定程序中自动热键零星移动鼠标行为,autohotkey,Autohotkey,我制作了一个移动鼠标的快速ahk脚本,发现鼠标没有移动到所需的位置。我设置了一个循环,每隔几秒钟不断地将光标移动到相同的位置,而鼠标将被移动到不同的、看似随机的位置。我发现这只是一个特定程序的窗口聚焦的情况,如果我有任何其他程序聚焦,鼠标会按预期移动。我尝试使用Click/MouseMove,它们都表现出这种行为。我还尝试了DllCall(“SetCursorPosition”),但那甚至不能移动鼠标。只是想进一步澄清一下,当问题计划没有集中注意力时,这三种方法都很有效——我只在问题计划集中注意

我制作了一个移动鼠标的快速ahk脚本,发现鼠标没有移动到所需的位置。我设置了一个循环,每隔几秒钟不断地将光标移动到相同的位置,而鼠标将被移动到不同的、看似随机的位置。我发现这只是一个特定程序的窗口聚焦的情况,如果我有任何其他程序聚焦,鼠标会按预期移动。我尝试使用Click/MouseMove,它们都表现出这种行为。我还尝试了DllCall(“SetCursorPosition”),但那甚至不能移动鼠标。只是想进一步澄清一下,当问题计划没有集中注意力时,这三种方法都很有效——我只在问题计划集中注意力时才有问题

经进一步检查,这似乎是由于该程序的自定义鼠标灵敏度实现。如果我使用MouseMove将光标相对于当前位置向下移动1个像素,它会向下移动50。如果我增加程序的鼠标灵敏度,它会进一步向下移动。我想这也是为什么我用鼠标点击得到了看似随机的鼠标位置

现在我已经实现了一个自定义的点击功能,它可以取消程序的焦点,移动鼠标,重新聚焦程序,然后点击,但是程序不喜欢这样。有时它可以工作,但有时程序会忽略窗口聚焦时鼠标所在位置的鼠标单击,导致脚本无法执行我希望它能够执行的操作

在使用Click x,y/MouseMove时,我有没有办法考虑到这个程序的鼠标敏感度?或者是一种不受程序鼠标灵敏度影响的移动鼠标的替代方法。我尝试过使用所有类型的CoordMode,但它们都有相同的问题

编辑:我正在使用的脚本

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不会触发热键或热字符串。

您的问题是大量的。阅读太多,间隔太小。保持简短,仅在必要时进行详细说明。如果不删除相关信息,则不能将其缩短。鼠标“移动”部分是否真的很重要,还是您只需单击某些位置?您的问题很大。阅读太多,间隔太小。简明扼要,只有在必要时才详细说明。如果不删除相关信息,就不能将内容缩短。鼠标实际上是“移动”部分吗