在Windows 10中运行AHK,我正在尝试为Alt + Space菜单创建快捷方式。具体来说,我经常使用以下顺序:
一旦按下此序列,您就可以移动鼠标来调整活动窗口的大小,就像单击拖动右上角一样,而不必寻找该角。 (要完成调整大小,可以按LeftMouseKey的Enter键,或按Esc放弃)。我想通过一个快捷方式进入此状态。
这是我当前的脚本,绑定到Winkey + Ctrl + Shift + 1
;resize window from Top-Left
#^+1::
SendInput !{Space}
Sleep 100
SendInput s
Sleep 100
SendInput {Left}+{Up}
Return
大多数情况下都可以使用,但是有时活动窗口将使用s {Left} {Up}
命令,而不是弹出菜单。因此,有时此快捷方式将导致诸如VSCode的活动窗口具有“ s”字符,并且光标1从之前开始对齐(就像键入s {Left} {Up}
一样),以及可见的Alt + Space菜单。
我最初使用Sleep 10并认为Sleep 100可以解决此问题,但事实并非如此。内置2倍Sleep 100时,该快捷方式已经感觉很慢。
我想测试SendInput s
之前是否已打开Alt + Space菜单,并且最好确保我要发送到菜单而不是主应用程序。
答案 0 :(得分:1)
我无法使用您的方法重现该问题。也许尝试使用Send,SendEvent,SendPlay,SendRaw,#InstallKeybdHook,#UseHook
或者,使用Autohotkey的WinMove语句:
这将调整活动窗口的大小,以使左上角位于当前鼠标位置
#^+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
答案 1 :(得分:1)
菜单本身是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
Jim U的替代解决方案是一种更可靠的方式来完成您要实现的目标,但这将使您目前所拥有的一切正常。