題 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

我注意到的一件事是,如果我點擊任務欄,那麼就這樣做 +LALT/LCtrl,我可以通過按住來順利來回切換  和之間交替 LALT 和 LCtrl

當我單擊任務欄然後執行 +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)

但是,當我剛剛擊中 +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事件從未被解僱,這似乎搞砸了一切。


5
2017-08-05 20:09


起源


我試圖做類似的事情,我有同樣的問題(控制鍵卡住,需要點擊桌面上的某個地方),對我的修復是確保我使用的是Windows鍵的左/右變體和檢測到按鍵時控制鍵。這可能不是上述問題的解決方案,但我想我會留下一個註釋,以防其他人遇到同樣的問題。這是我的案例使用的解決方案 LWin+LCtrl+j/k 在桌面之間切換: <^<#j::Send, ^#{Right} 和 <^<#k::Send, ^#{Left} - Jacob Stanley


答案:


有時當你試圖發送修飾鍵(win / ctrl / alt)並且觸發字符串也有修飾鍵時,你需要等待釋放觸發鍵,否則它們會影響你找到的替換字符串。

嘗試使用 KeyWait 實現這一目標。請注意,我們現在使用熱鍵語法與hotstring

#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
2017-07-19 22:57



這對我有用(能夠在按住winkey的同時切換桌面),但我希望能夠更改熱鍵而不是使用左側: Win+Alt / Win+LCtrl。我更願意使用 !^+H / !^+L。我個人試圖自己替換它,但是keywait似乎並不適用於此,而我必須放棄所有修改器並執行其他熱鍵才能工作(我不能堅持下去)。 - fohrums
通過刪除 KeyWait 我現在可以用了 !^+H / !^+L 仍然抱著它,謝謝凱文。 - fohrums


除非我在某個地方錯過了一點,否則不會是Windows + CTRL +  /  arrow切換台式機?至少它在我的身上。


-1
2017-08-05 20:13



是的確如此,但我想要做的是添加我自己的自定義切換桌面的方式,因為我覺得必須用雙手切換桌面有點不方便。我希望能夠使用Windows鍵+左Alt /左CTRL在桌面之間來回切換。 - MattsterJames
@MattsterJames可能值得修改你的問題以包含它 - 我懷疑我是唯一一個會閱讀它的人並且想到這一點! - Michael B
我想我忘了提到..感謝你指出這一點!我編輯了它。 - MattsterJames


不知道它是否仍然相關,但Reddit的'pzone'編寫了一個腳本,該腳本使用帶有全局變量的函數來記住您所在的桌面,這樣您就可以綁定一個熱鍵在兩個桌面之間切換。只有擁有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


-1
2017-10-23 13:04





例如,我想為下一個桌面設置Page Down,為以前的桌面設置Page Up 安裝AutoHotkey後,我創建一個新的AutoHotKey腳本並添加它代碼並保存它然後運行腳本

PgDn::^#Right ;Next Desktop
return 

PgUp::^#Left ;Previous Desktop
return 

它會很好用:)


-1
2018-01-17 01:35



你在雙貼之前是否讀過這個問題? - jiggunjer
是的我讀了有問題: 或者,是否有一種不同的方式可以切換桌面而不模擬默認的Win 10快捷方式?   並且還有問題:**此代碼有效,但只有在按下鍵之前單擊當前桌面上的窗口或其他任何內容**意味著我的代碼無需點擊任何地方即可工作!!!!! - AliOsat Mostafavi