0

我正在运行下面的代码,我希望当我点击逗号时鼠标会移动到当前活动窗口的中心.....而不是移动到屏幕上的不同点,具体取决于窗口在屏幕。只有当窗口位于左上角 (x=0, y=0) 时,它才会正确居中鼠标。

#NoEnv
SendMode Input
#WinActivateForce

Sysget, Mon2, Monitor, 2

,::

WinGetActiveStats, Title, Width, Height, X, Y
 {
MsgBox, The active window "%Title%" is %Width% wide`, %Height% tall`, and positioned at %X%`,%Y%.

;center_x:=X+(Width*.5)
;center_y:=Y+(Height*.5)

MouseMove, X+(Width*.5), Y+(Height*.5), 90

 }
Return
4

5 回答 5

1

CoordMode在文档中查看。

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

CoordMode, ToolTip|Pixel|Mouse|Caret|Menu [, Screen|Window|Client]

默认值CoordMode就是Screen您获得两个不同位置的原因。设置CoordModeWindow以确保您的鼠标居中在活动窗口上有效。

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

于 2014-04-06T15:50:29.443 回答
0

我敢肯定 Width 和 Height 是窗口的实际尺寸,而不是屏幕分辨率。然后检查 X 和 Y 以确保它们是活动窗口的实际左上角。

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

于 2010-01-02T01:47:42.363 回答
0

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

MouseMove, Width*.5, Height*.5

一切都很好。

于 2010-01-02T03:42:28.357 回答
0

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

在我插入睡眠线之前,我无法让它工作,WinGetPos在窗户移动之前获取信息。

~#+right::
~#+left::
    Sleep,1000
    WinGetPos, X, Y, width, height, A
    center_x:=width/2
    center_y:=height/2
    MouseMove,center_x,center_y,
return
于 2014-04-05T16:00:13.003 回答
0

都试过了,没用。诀窍是使用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
于 2019-01-09T13:08:43.383 回答