
Я написал небольшой скрипт AutoHotKey для переключения виртуальных рабочих столов в Windows 10. Я написал этот код, чтобы иметь возможность переключать рабочие столы с помощью собственного сочетания клавиш вместо использования сочетания клавиш по умолчанию в Windows 10 (WIN + CTRL + LEFT/RIGHT).
Код:
#LAlt::^#Right ; switch to next desktop with Windows key + Left Alt key
#LCtrl::^#Left ; switch to next desktop with Windows key + Left CTRL key
Этот код работает, но только если вы нажмете на окно или что-нибудь еще на текущем рабочем столе перед нажатием клавиш. Я попробовал использовать функцию Click для имитации щелчка до переключения рабочих столов (что сработало), но она переместила мышь в координаты, по которым я щелкнул, что, очевидно, не то, что мне нужно. Я немного поигрался с ControlClick, но так и не добился того, чтобы это заработало.
Итак, мой вопрос таков: есть ли способ, которым я могу установить фокус на текущий рабочий стол перед выполнением команды переключения рабочих столов? Или, может быть, есть другой способ переключения рабочих столов без имитации стандартных ярлыков Win 10?
Спасибо!
ПРАВКА 1
Я заметил одну вещь: если я нажимаю на панель задач, а ПОТОМ нажимаю LWin+ LAlt/ LCtrl, я могу плавно переключаться вперед и назад, удерживая LWinи чередуя LAltи LCtrl.
Когда я нажимаю на панель задач, а затем нажимаю LWin+ LAlt, вот что выдает KeyHistory:
VK SC Type Up/Dn Elapsed Key Window
----------------------------------------------
5B 15B d 1.91 LWin
A4 038 h d 0.31 LAlt
A2 01D i d 0.00 LControl
A2 01D i u 0.00 LControl
A4 038 i u 0.00 LAlt
A2 01D i d 0.05 LControl
5B 15B i d 0.02 LWin
27 14D i d 0.02 Right
27 14D i u 0.00 Right
A2 01D i u 0.01 LControl
5B 15B i u 0.02 LWin
A2 01D i d 0.01 LControl
5B 15B i d 0.00 LWin
A2 01D i u 0.00 LControl
A4 038 s u 0.00 LAlt
5B 15B u 0.06 LWin
A2 01D i d 0.00 LControl
A2 01D i u 0.00 LControl
(This is what I want it to do without clicking the taskbar)
Но когда я ПРОСТО нажимаю LWin+ LAlt, KeyHistory показывает, что события клавиш останавливаются после события «Right Up»:
VK SC Type Up/Dn Elapsed Key Window
----------------------------------------------
5B 15B d 1.91 LWin
A4 038 h d 0.31 LAlt
A2 01D i d 0.00 LControl
A2 01D i u 0.00 LControl
A4 038 i u 0.00 LAlt
A2 01D i d 0.05 LControl
5B 15B i d 0.02 LWin
27 14D i d 0.02 Right
27 14D i u 0.00 Right
(There should be more after this)
Событие LControl Up никогда не срабатывает, и это, похоже, все портит.
решение1
Иногда, когда вы пытаетесь отправить клавиши-модификаторы (win/ctrl/alt), а в строке запуска также есть клавиши-модификаторы, вам нужно дождаться, пока клавиши запуска будут отпущены, иначе они повлияют на строку замены, как вы выяснили.
Попробуйте использовать KeyWait
для этого. Обратите внимание, что теперь мы используем синтаксис горячих клавиш вместо горячей строки
#LAlt:: ; switch to next desktop with Windows key + Left Alt key
KeyWait LAlt
SendInput #^{Right}
Return
#LCtrl:: ; switch to previous desktop with Windows key + Left CTRL key
KeyWait LCtrl
SendInput #^{Left}
Return
Для переключения рабочих столов мне помогло вышеизложенное.
В других случаях бывают случаи, когда даже этот подход не работает, и есть другое возможное решение. Вместо таких ожиданий ключей...
KeyWait LAlt
KeyWait LCtrl
...замените на соответствующее одно из этих нажатий клавиш, чтобы очистить состояние клавиши:
Send,{LAlt Down}{LAlt Up}
Send,{LCtrl Down}{LCtrl Up}
решение2
Если я ничего не упускаю, разве Windows + ctrl+ ←/ →стрелка не переключает рабочие столы? По крайней мере, у меня так.
решение3
Не знаю, актуально ли это еще, но 'pzone' из Reddit написал скрипт, который использует функцию с глобальной переменной, которая запоминает, на каком рабочем столе вы находитесь, и таким образом вы можете назначить одну горячую клавишу для переключения между двумя рабочими столами. Это будет работать только если у вас 2 рабочих стола.
switchedDesktop := false
switchDesktop()
{
global switchedDesktop
if switchedDesktop
{
SendEvent ^#{Right}
switchedDesktop := false
}
else
{
SendEvent ^#{Left}
switchedDesktop := true
}
}
решение4
Например, я хочу установить Page Down для следующего рабочего стола и Page Up для предыдущего рабочего стола. После установки AutoHotkey я создаю новый скрипт AutoHotKey, добавляю в него эти коды, сохраняю и запускаю скрипт.
PgDn::^#Right ;Next Desktop
return
PgUp::^#Left ;Previous Desktop
return
и это будет хорошо работать :)