Windows 中 Alt+Space 的 AHK 快捷方式
AHK shortcuts for Alt+Space in Windows
运行 AHK in Windows 10,我正在尝试为 Alt+[=76= 创建快捷方式] 菜单。具体来说,我经常使用这个序列:
- 按键Alt+Space(调出window菜单)
- 按键S(select尺寸调整)
- 按下 左键(现在移动鼠标会水平调整 window 的大小)
- 按下 Up 键(现在移动鼠标正在全方位调整 window 的大小)
按下此序列后,您可以移动鼠标来调整活动 window 的大小,就像单击并拖动右上角一样,而无需寻找那个角。 (要完成调整大小,您可以按 Enter 或 LeftMouseKey,或按 Esc 中止)。我想通过一个快捷方式进入这个状态。
这是我当前的脚本,绑定到 Winkey+Ctrl+Shift+1
;resize window from Top-Left
#^+1::
SendInput !{Space}
Sleep 100
SendInput s
Sleep 100
SendInput {Left}+{Up}
Return
大部分情况下都有效,但有时活动的 window 会使用 s {Left} {Up}
命令,而不是弹出菜单。因此,有时此快捷方式会导致活动 window 像 VSCode 具有“s”字符和光标 1 从之前排成一行(就像键入 s {Left} {Up}
)和可见的 Alt+Space菜单。
我最初使用 Sleep 10,并认为 Sleep 100 可以解决这个问题,但事实并非如此。内置 2x Sleep 100 的快捷方式已经感觉很慢。
我想测试 Alt+Space 菜单是否在 SendInput s
之前打开并且最好确保我发送到菜单而不是主应用程序。
我无法使用您的方法重现该问题。也许尝试使用 Send
、SendEvent
、SendPlay
、SendRaw
、#InstallKeybdHook
、#UseHook
或者,使用 Autohotkey 的 WinMove
语句:
这会调整活动 window 的大小,使左上角位于当前鼠标位置
#^+1::
CoordMode Mouse, screen
id := WinExist("A")
WinGetPos x, y, width, height, ahk_id %id%
MouseGetPos mx, my
neww := width + x - mx
newh := height + y - my
WinMove % "ahk_id" id,, mx, my, neww, newh
return
菜单本身是 ahk_class #32768
,所以等待它存在似乎对我有用。
#^+1::
Send , !{space}
WinWait , ahk_class #32768 ,, 1 ; Waits 1s for menu to exist
If !ErrorLevel ; ErrorLevel is 0 if menu exists
Send , s{left}+{up}
Return
是实现您想要实现的目标的更可靠方法,但这将使您当前的工作发挥作用。
运行 AHK in Windows 10,我正在尝试为 Alt+[=76= 创建快捷方式] 菜单。具体来说,我经常使用这个序列:
- 按键Alt+Space(调出window菜单)
- 按键S(select尺寸调整)
- 按下 左键(现在移动鼠标会水平调整 window 的大小)
- 按下 Up 键(现在移动鼠标正在全方位调整 window 的大小)
按下此序列后,您可以移动鼠标来调整活动 window 的大小,就像单击并拖动右上角一样,而无需寻找那个角。 (要完成调整大小,您可以按 Enter 或 LeftMouseKey,或按 Esc 中止)。我想通过一个快捷方式进入这个状态。
这是我当前的脚本,绑定到 Winkey+Ctrl+Shift+1
;resize window from Top-Left
#^+1::
SendInput !{Space}
Sleep 100
SendInput s
Sleep 100
SendInput {Left}+{Up}
Return
大部分情况下都有效,但有时活动的 window 会使用 s {Left} {Up}
命令,而不是弹出菜单。因此,有时此快捷方式会导致活动 window 像 VSCode 具有“s”字符和光标 1 从之前排成一行(就像键入 s {Left} {Up}
)和可见的 Alt+Space菜单。
我最初使用 Sleep 10,并认为 Sleep 100 可以解决这个问题,但事实并非如此。内置 2x Sleep 100 的快捷方式已经感觉很慢。
我想测试 Alt+Space 菜单是否在 SendInput s
之前打开并且最好确保我发送到菜单而不是主应用程序。
我无法使用您的方法重现该问题。也许尝试使用 Send
、SendEvent
、SendPlay
、SendRaw
、#InstallKeybdHook
、#UseHook
或者,使用 Autohotkey 的 WinMove
语句:
这会调整活动 window 的大小,使左上角位于当前鼠标位置
#^+1::
CoordMode Mouse, screen
id := WinExist("A")
WinGetPos x, y, width, height, ahk_id %id%
MouseGetPos mx, my
neww := width + x - mx
newh := height + y - my
WinMove % "ahk_id" id,, mx, my, neww, newh
return
菜单本身是 ahk_class #32768
,所以等待它存在似乎对我有用。
#^+1::
Send , !{space}
WinWait , ahk_class #32768 ,, 1 ; Waits 1s for menu to exist
If !ErrorLevel ; ErrorLevel is 0 if menu exists
Send , s{left}+{up}
Return