web-dev-qa-db-ja.com

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

Windows 10で仮想デスクトップを切り替えるための小さなAutoHotKeyスクリプトを作成しました。このコードを作成したのは、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

このコードは機能しますが、キーを押す前に現在のデスクトップ上のウィンドウまたは何かをクリックした場合のみです。デスクトップを切り替える前にクリック機能を使用してクリックをシミュレートしようとしましたが(機能しました)、クリックした座標にマウスが移動しました。これは明らかに私が望むものではありません。 ControlClickを少しいじってみましたが、うまくいきませんでした。

だから私の質問はこれです:デスクトップを切り替えるコマンドを実行する前に、現在のデスクトップにフォーカスを設定する方法はありますか?または、デフォルトのWin 10ショートカットをシミュレートせずにデスクトップを切り替えることができる別の方法はありますか?

ありがとう!


編集1

私が気づいたことの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は、キーイベントが「RightUp」イベントの後に停止することを示しています。

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イベントが発生することはなく、すべてが台無しになっているようです。

7
MattsterJames

場合によっては、修飾キー(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
Kevin McCabe

私はどこかにポイントを逃していない限り、Windows + ctrl 矢印スイッチデスクトップ?少なくともそれは私のものです。

0
Michael B