Сочетания клавиш AHK для Alt + Space в Windows - PullRequest
0 голосов
/ 06 марта 2019

работает AHK в Windows 10, и я пытаюсь создать ярлыки для меню Alt + Space. В частности, я часто использую эту последовательность:

  1. Нажать клавиши Alt + Пробел (вызвать окно меню)
  2. Нажмите клавишу S (выберите Размер, чтобы изменить размер)
  3. Нажмите клавишу влево (при перемещении мыши размер окна изменяется по горизонтали)
  4. Нажмите клавишу Вверх (теперь перемещение мыши изменяет размер вашего окна во всех направлениях)

Как только эта последовательность нажата, вы можете двигать мышью, чтобы изменить размер активного окна, как если бы вы перетаскивали верхний правый угол, без необходимости искать этот угол. (чтобы завершить изменение размера, вы можете нажать 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

В основном это работает, но иногда активное окно будет использовать команды s {Left} {Up}, а не всплывающее меню. Таким образом, иногда этот ярлык приводит к тому, что активное окно, такое как VSCode, имеет символ «s» и курсор на 1 строку вверх по сравнению с предыдущим (как если бы вы набирали s {Left} {Up}), и видимое меню Alt + Space.

Сначала я использовал Sleep 10 и думал, что Sleep 100 исправит это, но это не так. Ярлык уже ощущается медленным с 2x Sleep 100 встроенным.

Я бы хотел проверить, открыто ли меню Alt + Space до SendInput s, и желательно, чтобы я отправлял его в меню, а не в основное приложение.

Ответы [ 2 ]

1 голос
/ 07 марта 2019

Само меню 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 - это более надежный способ сделать то, чего вы пытаетесь достичь, но это сделает то, что у вас есть на данный момент.

1 голос
/ 07 марта 2019

Мне не удалось воспроизвести проблему, используя ваш метод.Возможно, попробуйте использовать 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
...