Windows 中 Alt+Space 的 AHK 快捷方式

AHK shortcuts for Alt+Space in Windows

运行 AHK in Windows 10,我正在尝试为 Alt+[=76= 创建快捷方式] 菜单。具体来说,我经常使用这个序列:

  1. 按键Alt+Space(调出window菜单)
  2. 按键S(select尺寸调整)
  3. 按下 左键(现在移动鼠标会水平调整 window 的大小)
  4. 按下 Up 键(现在移动鼠标正在全方位调整 window 的大小)

按下此序列后,您可以移动鼠标来调整活动 window 的大小,就像单击并拖动右上角一样,而无需寻找那个角。 (要完成调整大小,您可以按 EnterLeftMouseKey,或按 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 之前打开并且最好确保我发送到菜单而不是主应用程序。

我无法使用您的方法重现该问题。也许尝试使用 SendSendEventSendPlaySendRaw#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

是实现您想要实现的目标的更可靠方法,但这将使您当前的工作发挥作用。