我正在运行以下代码,当我点击逗号时,我希望鼠标移动到当前活动窗口的中心.....而不是它移动到屏幕上的不同点,具体取决于窗口的位置在屏幕上。当窗口位于左上角(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
答案 0 :(得分:1)
查看文档中的CoordMode
。
将各种命令的坐标模式设置为相对于 活动窗口或屏幕。
CoordMode,ToolTip |像素|鼠标|插入|菜单[,屏幕|窗口|客户端]
默认CoordMode
为Screen
,这就是您获得两个不同位置的原因。将CoordMode
设置为Window
以确保鼠标居中在活动窗口上工作。
您可以通过在脚本的“自动执行”部分中调用它来为整个脚本设置它。
答案 1 :(得分:0)
我确定宽度和高度是窗口的实际尺寸,而不是屏幕分辨率。然后检查X和Y以确保它们是活动窗口的实际左上角。
如果宽度和高度不是来自实际窗口,即屏幕尺寸,那么这是预期的行为。也许您可以向我们展示调用函数,以便更好地了解这些参数的来源。
答案 2 :(得分:0)
问题是MousMove默认使用窗口的坐标,所以我将MouseMove行更改为以下内容:
MouseMove, Width*.5, Height*.5
一切都很好。
答案 3 :(得分:0)
以下脚本会将鼠标移动到双屏系统上的Active Window。
在我进入睡眠线之前,我无法让它工作,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
答案 4 :(得分: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