微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 AutoHotKey 右键单击​​来拖动窗口?

如何解决如何使用 AutoHotKey 右键单击​​来拖动窗口?

我想像左键单击一样使用带有标题栏的右键单击来拖动窗口。可以用 AutoHotkey 做到这一点吗?

背景:我使用戴尔显示管理器,它让我可以在预定义的网格中排列我的窗口。我可以直接拖动或 Shift+拖动来执行此操作。这两个选项都是次优的。直接拖动只会强制不需要的调整大小。 Shift 和 Drag 需要按键和鼠标。我想知道是否可以使用右键单击拖动。我使用名为 RBTray 的应用程序通过右键单击最小化到托盘。所以,我知道我们绝对可以添加类似的东西。我正在 AutoHotkey 中寻找一些东西,因为它比 C++ 更容易编码。

解决方法

这可能就是您要找的:https://www.autohotkey.com/docs/scripts/index.htm#EasyWindowDrag

以下是适用于右键单击的代码:

~RButton::
CoordMode,Mouse  ; Switch to screen/absolute coordinates.
MouseGetPos,EWD_MouseStartX,EWD_MouseStartY,EWD_MouseWin
WinGetPos,EWD_OriginalPosX,EWD_OriginalPosY,ahk_id %EWD_MouseWin%
WinGet,EWD_WinState,MinMax,ahk_id %EWD_MouseWin% 
if EWD_WinState = 0  ; Only if the window isn't maximized 
    SetTimer,EWD_WatchMouse,0 ; Track the mouse as the user drags it.
return

EWD_WatchMouse:
GetKeyState,EWD_LButtonState,RButton,P
if EWD_LButtonState = U  ; Button has been released,so drag is complete.
{
    SetTimer,Off
    return
}
GetKeyState,EWD_EscapeState,Escape,P
if EWD_EscapeState = D  ; Escape has been pressed,so drag is cancelled.
{
    SetTimer,Off
    WinMove,ahk_id %EWD_MouseWin%,%EWD_OriginalPosX%,%EWD_OriginalPosY%
    return
}
; Otherwise,reposition the window to match the change in mouse coordinates
; caused by the user having dragged the mouse:
CoordMode,Mouse
MouseGetPos,EWD_MouseX,EWD_MouseY
WinGetPos,EWD_WinX,EWD_WinY,ahk_id %EWD_MouseWin%
SetWinDelay,-1   ; Makes the below move faster/smoother.
WinMove,EWD_WinX + EWD_MouseX - EWD_MouseStartX,EWD_WinY + EWD_MouseY - EWD_MouseStartY
EWD_MouseStartX := EWD_MouseX  ; Update for the next timer-call to this subroutine.
EWD_MouseStartY := EWD_MouseY
return

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。