我想通过右键单击将窗口捕捉到屏幕的一角(四分之一),然后再放开鼠标移动的窗口。我正在努力让活动窗口移动。对于LEFT屏幕,左上角位置我可以让记事本移动,但是当释放鼠标按钮时它会快速回到之前的位置;而且我必须通过名称来调用它 - 我希望它可以与任何活动窗口一起使用。想法?
~Lbutton& 〜Rbutton ::
CoordMode,Mouse,Screen ;mouse position relative to the screen
MouseGetPos,Xpos,Ypos ;get mouse position coordinates
;WinGet, active_id, ID, A
;msgbox %Xpos%,%Ypos% ;show the saved mouse coordinates
RIGHT_height=537
RIGHT_width=848
RIGHT_leftpos=1680
RIGHT_rightpos=2523
RIGHT_toppos=-70
RIGHT_vp=460
LEFT_height=518
LEFT_width=847
LEFT_leftpos=-8
LEFT_rightpos=834
LEFT_toppos=-10
LEFT_vp=503
;LEFT SCREEN
if (Xpos < LEFT_rightpos and ypos < LEFT_vp) { ;LEFT top left
WinMove,Untitled - Notepad,,%LEFT_leftpos%,%LEFT_toppos%,%LEFT_width%,%LEFT_height%
}
if (Xpos > LEFT_rightpos and Xpos < 1680 and ypos < LEFT_vp) { ;LEFT top right
MsgBox LEFT top right
}
if (Xpos < LEFT_rightpos and Xpos < 1680 and ypos > LEFT_vp) { ;LEFT top right
msgbox LEFT Bottom Left
}
if (Xpos > LEFT_rightpos and Xpos < 1680 and ypos > LEFT_vp) { ;LEFT top right
msgbox LEFT Bottom Right
}
;RIGHT SCREEN
if (Xpos < RIGHT_rightpos and Xpos >= 1680 and ypos < RIGHT_vp) { ;RIGHT top left
msgbox RIGHT Top Left
}
if (Xpos > RIGHT_rightpos and Xpos >= 1680 and ypos < RIGHT_vp) { ;RIGHT top right
msgbox RIGHT Top Right
}
if (Xpos < RIGHT_rightpos and Xpos >= 1680 and ypos > RIGHT_vp) { ;RIGHT top right
msgbox RIGHT Bottom Left
}
if (Xpos > RIGHT_rightpos and Xpos >= 1680 and ypos > RIGHT_vp) { ;RIGHT top right
msgbox RIGHT Bottom Right
}
返回
答案 0 :(得分:1)
您需要添加
Send, {LButton Up}
你的代码中的。这可以防止当热键的操作完成时, LButton 被占用窗口。
为了将WinMove
与ahk_id
一起使用,您必须将其放在WinMove
命令中。见下文。
~LButton & ~RButton::
CoordMode,Mouse,Screen
MouseGetPos,Xpos,Ypos
WinGet, active_id, ID, A ; use active_id in WinMove
Send, {LButton Up} ; Prevents window from snapping back
RIGHT_height=537
RIGHT_width=848
RIGHT_leftpos=1680
RIGHT_rightpos=2523
RIGHT_toppos=-70
RIGHT_vp=460
LEFT_height=518
LEFT_width=847
LEFT_leftpos=-8
LEFT_rightpos=834
LEFT_toppos=-10
LEFT_vp=503
;LEFT SCREEN
if (Xpos < LEFT_rightpos and ypos < LEFT_vp) { ;LEFT top left
WinMove,ahk_id %active_id%,,%LEFT_leftpos%,%LEFT_toppos%,%LEFT_width%,%LEFT_height%
}
if (Xpos > LEFT_rightpos and Xpos < 1680 and ypos < LEFT_vp) { ;LEFT top right
MsgBox LEFT top right
}
if (Xpos < LEFT_rightpos and Xpos < 1680 and ypos > LEFT_vp) { ;LEFT top right
msgbox LEFT Bottom Left
}
Return