6

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

4 ответа4

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}
-1

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

PgDn::^#Right ;Next Desktop
return 

PgUp::^#Left ;Previous Desktop
return 

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

-1

Разве я где-то упускаю точку, разве Windows + Ctrl + / стрелка не переключает рабочие столы? По крайней мере, на моем.

-1

Не знаю, актуально ли это, но 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/automatically_switch_between_windows_10_virtual

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .