наведите курсор мыши на окно и наведите курсор мыши, чтобы изменить размер окна с помощью автоотключения - PullRequest
0 голосов
/ 02 января 2019

Я пытаюсь создать сценарий, который позволяет пользователю изменять размер окна, наведя курсор мыши, нажимая сочетание клавиш без необходимости каждый раз перемещать мышь к углу окна.

Эта функцияв настоящее время доступно как часть BetterSnapTool для Mac OS X, но я пытаюсь разработать ту же функцию для Windows 10 с использованием AutoHotkey

. Я разработал сценарий для autohotkey, который хорошо работает для большинстваприложения кроме хрома и спойти (см. ниже).Он часто застревает с открытым меню заголовка после нажатия alt + пробел смотрите видео здесь

^+x::
MouseGetPos,,, hwnd 
WinActivate, ahk_id %hwnd%
Send !{Space}
Sleep 1
Send m
sleep 1
send {down}
Return

Есть ли более надежный способ сделать это?

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Я смог решить эту проблему надежно, переместив мышь в верхний правый угол окна рядом с кнопкой свертывания и оставив кнопку мыши нажатой при использовании blockinput.

Преимущества:

  • Это позволяет пользователю свободно перемещать мышь для перемещения окна.
  • Работает также и для изменения размера.
  • возможность перемещать окна, если они зафиксированы в полноэкранном режиме.

СОВЕТ: для работы blockinput должен работать скрипт от имени администратора ...

;Move Window Mode
^+x::
KeyWait Shift
KeyWait Alt
BlockInput, On
MouseGetPos,,, hwnd 
WinActivate, ahk_id %hwnd%
WinGetPos, , , Width, Height, A
MouseMove, Width-186, 10
Click, down
Send {Shift Up}
Send {Ctrl Up}  
BlockInput, Off
Return

;Resize Window Mode
^+z::
KeyWait Shift
KeyWait Alt
BlockInput, On
MouseGetPos,,, hwnd 
WinActivate, ahk_id %hwnd%
WinGetPos, , , Width, Height, A
MouseMove, Width-3, Height-3
Click, down
Send {Shift Up}
Send {Ctrl Up}
BlockInput, Off
Return
0 голосов
/ 03 января 2019

Проблема в том, что Sleep, 1 может не хватить времени для появления меню во всех приложениях.

Самый надежный способ сделать это - полностью отказаться от меню, но это довольно трудоемкая работа с WinGetPos, MouseGetPos и WinMove.

Полагаю, вы все еще будете пытаться использовать меню, поэтому мой совет, по крайней мере, подождать, чтобы убедиться, что меню существует. Вы можете сделать это, получив ProcessID вашего hwnd, и подождать, пока первое найденное окно через этот PID изменится, что можно было бы понять для нас как новое окно. В коде означает что-то вроде этого:

WinGet, WinPID, PID, ahk_id %hwnd%
oldHwnd := WinExist("ahk_pid " WinPID)

Send !{Space}

newHwnd := oldHwnd
while (newHwnd == oldHwnd)
    newHwnd := WinExist("ahk_pid " WinPID)

Но вам потребуются более подходящие условия выхода на случай, если меню не появится (тайм-аут?), Чтобы не застрять там.

Еще после этого Сна 1 может быть недостаточно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...