
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
そしてそれはうまく機能します:)