Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.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
Windows 自动热键鼠标移动未正确居中_Windows_Automation_Autohotkey - Fatal编程技术网

Windows 自动热键鼠标移动未正确居中

Windows 自动热键鼠标移动未正确居中,windows,automation,autohotkey,Windows,Automation,Autohotkey,我正在运行下面的代码,当我点击逗号时,我希望鼠标移动到当前活动窗口的中心……相反,它移动到屏幕上的不同点,这取决于窗口在屏幕上的位置。仅当窗口位于左上角(x=0,y=0)时,它才使鼠标正确居中 我确信宽度和高度是窗口的实际尺寸,而不是屏幕分辨率。然后检查X和Y,确保它们是活动窗口的实际左上角 如果宽度和高度与实际窗口(即屏幕大小)不同,则这是预期行为。也许您可以向我们展示调用函数,以便更好地了解这些参数的来源。问题是MousMove默认使用窗口的坐标,因此我将MousMove行更改为以下内容:

我正在运行下面的代码,当我点击逗号时,我希望鼠标移动到当前活动窗口的中心……相反,它移动到屏幕上的不同点,这取决于窗口在屏幕上的位置。仅当窗口位于左上角(x=0,y=0)时,它才使鼠标正确居中


我确信宽度和高度是窗口的实际尺寸,而不是屏幕分辨率。然后检查X和Y,确保它们是活动窗口的实际左上角


如果宽度和高度与实际窗口(即屏幕大小)不同,则这是预期行为。也许您可以向我们展示调用函数,以便更好地了解这些参数的来源。

问题是MousMove默认使用窗口的坐标,因此我将MousMove行更改为以下内容:

MouseMove, Width*.5, Height*.5

一切正常。

以下脚本将在双屏系统上将鼠标移动到活动窗口

我无法让它工作,直到我进入睡眠队列,
wingtpos
在窗口移动之前获取信息

~#+right::
~#+left::
    Sleep,1000
    WinGetPos, X, Y, width, height, A
    center_x:=width/2
    center_y:=height/2
    MouseMove,center_x,center_y,
return

查看文档中的
CoordMode

将各种命令的坐标模式设置为相对于 活动窗口或屏幕

协作模式,工具提示|像素|鼠标|插入符号|菜单[,屏幕|窗口|客户端]

默认的
CoordMode
Screen
,这就是为什么会出现两个不同的位置。将
CoordMode
设置为
Window
,以确保鼠标在活动窗口上居中


您可以通过在脚本的“自动执行”部分调用它来为整个脚本设置它。

尝试了所有操作,但没有任何效果。诀窍是使用
DllCall(“SetCursorPos”,int,x,int,y)
。 下面是将鼠标移动到窗口中心的代码。适用于多个月和非全屏窗口

MoveMouseInCenterOfActiveWindow:
CoordMode,Mouse,Screen
WinGetPos, winTopL_x, winTopL_y, width, height, A
;MouseMove, X, Y, 0 ; does not work with multi-monitor (always off)
    winCenter_x := winTopL_x + width/2
    winCenter_y := winTopL_y + height/2
DllCall("SetCursorPos", int, winCenter_x, int, winCenter_y)
Tooltip winTopL_x:%winTopL_x% winTopL_y:%winTopL_y% winCenter_x:%winCenter_x% winCenter_y:%winCenter_y%
return

Trey,根据下面的链接,我使用的所有变量都应该对应于活动窗口位置/尺寸。MsgBox显示正在正确读取这些内容,但Mousemove仍然没有将鼠标移动到正确的位置。
MoveMouseInCenterOfActiveWindow:
CoordMode,Mouse,Screen
WinGetPos, winTopL_x, winTopL_y, width, height, A
;MouseMove, X, Y, 0 ; does not work with multi-monitor (always off)
    winCenter_x := winTopL_x + width/2
    winCenter_y := winTopL_y + height/2
DllCall("SetCursorPos", int, winCenter_x, int, winCenter_y)
Tooltip winTopL_x:%winTopL_x% winTopL_y:%winTopL_y% winCenter_x:%winCenter_x% winCenter_y:%winCenter_y%
return