AutoHotKey - Windows 10 で次のデスクトップ/前のデスクトップに切り替えるカスタム ショートカット

AutoHotKey - Windows 10 で次のデスクトップ/前のデスクトップに切り替えるカスタム ショートカット

Windows 10 で仮想デスクトップを切り替えるための小さな AutoHotKey スクリプトを作成しました。このコードは、Windows 10 のデフォルトのショートカット (WIN + CTRL + 左/右) を使用する代わりに、独自のカスタム キーボード ショートカットを使用してデスクトップを切り替えることができるように作成しました。

コード:

#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

気づいたことの 1 つは、タスクバーをクリックしてからLWin+ LAlt/を実行すると、 を押したままとLCtrlを交互に押すことで、スムーズにLWin切り替えることができるということです。LAltLCtrl

タスクバーをクリックして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

まだ関係があるかどうかはわかりませんが、Reddit の「pzone」が、現在どのデスクトップを使用しているかを記憶するグローバル変数を持つ関数を使用するスクリプトを作成しました。これにより、1 つのホットキーをバインドして 2 つのデスクトップを切り替えることができます。デスクトップが 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

答え4

たとえば、次のデスクトップにPage Down、前のデスクトップにPage Upを設定したいのですが、AutoHotkeyをインストールした後、新しいAutoHotKeyスクリプトを作成し、それにこのコードを追加して保存し、スクリプトを実行します。

PgDn::^#Right ;Next Desktop
return 

PgUp::^#Left ;Previous Desktop
return 

そしてそれはうまく機能します:)

関連情報