AutoHotKey — настраиваемое сочетание клавиш для переключения на следующий/предыдущий рабочий стол в Windows 10

AutoHotKey — настраиваемое сочетание клавиш для переключения на следующий/предыдущий рабочий стол в Windows 10

Я написал небольшой скрипт 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
    }
}

https://www.reddit.com/r/AutoHotkey/comments/3fyudo/автоматически_переключаться_между_окнами_10_virtual

решение4

Например, я хочу установить Page Down для следующего рабочего стола и Page Up для предыдущего рабочего стола. После установки AutoHotkey я создаю новый скрипт AutoHotKey, добавляю в него эти коды, сохраняю и запускаю скрипт.

PgDn::^#Right ;Next Desktop
return 

PgUp::^#Left ;Previous Desktop
return 

и это будет хорошо работать :)

Связанный контент