0

我想在松开鼠标移动的窗口之前通过右键单击将窗口捕捉到屏幕的一角(四分之一)。我目前正在努力让活动窗口移动。对于 LEFT 屏幕,左上角的位置我可以让记事本移动,但是当释放鼠标按钮时它会弹回原来的位置;而且我必须按名称来称呼它——我希望它可以与任何活动窗口一起使用。想法?

〜L按钮和〜R按钮::

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
}

返回

4

1 回答 1

1

您需要添加

Send, {LButton Up}

在你的代码中。当热键的操作完成时,这可以防止LButton被按住的窗口接管窗口。

为了与您一起使用WinMoveahk_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
于 2013-09-05T20:44:04.997 回答