(AutoHotkey)(覚えさせた 2つのウインドウを ホットキーでトグルさせる 編)

 今回のサンプルは 少し操作が増えます、 けど なるべくシンプルに・・・・

1. 覚えさせたい 一つ目の ウインドウをマウスで指して Ctrl+F2 を 押す事でウインドウを記憶させます
2. 覚えさせたい 二つ目の ウインドウをマウスで指して Ctrl+F2 を 押す事でウインドウを記憶させます
3. Ctrl + F1 で 記憶させたウインドウがトグルします
4. 他のウインドウでやりたい時は もう一度 1. 2.の操作をします

 これは マウスカーソルが 指しているウインドウを覚えますアクティブ状態のものを覚えるわけではないので注意
それと 二つ覚えさせた後に 三つ目だけを登録して Alt + F1 をすると、 二つ目と 三つ目 がトグルするようになります
Tips. わざと 同じウインドウを Alt+F2 で 二回登録すると、 そのウインドウを一発でアクティブにするショートカットとして使えます

必要に応じて変更すれば 3つ 4つ のウインドウを トグルさせるようにも出来ますけど
まぁ そうしたら この ショートカットの意味がなくなりますよね 笑)
つ ま り、 二つだから こそ いいんです! 笑)

[]; --------------------------------------------------------------------------------------------[]
[]; 変数を確保します[]
[]; ハンドルを保存する変数を2つ、フラグをひとつです[]
[]; 組み込む場合は 以下の 3つの変数名が すでにあるものと かぶらないように注意してください[]
[]buf_hWindowA := 0[]
[]buf_hWindowB := 0[]
[]buf_Toggle   := 1[]

[]; Ctrl + F2 で 発動するルーチン[]
[]; 必要に応じて キーアサインは変えてください[]
[]; マウスが指しているウインドウのハンドルを 二つの変数に 交互に代入する[]
[]<^F2::[]
[]	MouseGetPos, , , hWindow[]

[]	If ( buf_Toggle )[]
[]	{[]
[]		buf_hWindowA := hWindow[]
[]		buf_Toggle := 0[]
[]	}[]
[]	Else[]
[]	{[]
[]		buf_hWindowB := hWindow[]
[]		buf_Toggle := 1[]
[]	}[]
[]Return[]

[]; Ctrl + F1 で 発動するルーチン[]
[]; 必要に応じて キーアサインは変えてください[]
[]; 押すごとに 二つのウインドウが 切り替わる[]
[]<^F1::[]
[]	buf := WinExist("A")[]
[]	If ( buf == buf_hWindowA )[]
[]	{[]
[]		WinActivate, ahk_id %buf_hWindowB%[]
[]		Return[]
[]	}[]
[]	If ( buf == buf_hWindowB )[]
[]	{[]
[]		WinActivate, ahk_id %buf_hWindowA%[]
[]		Return[]
[]	}[]
[]	WinActivate, ahk_id %buf_hWindowA%[]
[]Return[]
[]; --------------------------------------------------------------------------------------------[]


 で、 これで OK!、と思ってたら どうも動作がおかしい!!
うむむっ 一部のソフトが 最小化した状態から 復元しないんですよね、 これは困った
ということで おまじないを 送ってやる事に・・・・・
もし ちゃんと 復元出来ないウインドウがあったら このおまじない版をお試しあれ!
ただし 対象になるウインドウは 最大化してたものなども 元のサイズに戻してしまうのでご注意を、 完璧にするためにはもうちょっと 手直しが必要ですね
[]buf_hWindowA := 0[]
[]buf_hWindowB := 0[]
[]buf_Toggle   := 1[]
[]<^F2::[]
[]	MouseGetPos, , , hWindow[]
[]	If ( buf_Toggle )[]
[]	{[]
[]		buf_hWindowA := hWindow[]
[]		buf_Toggle := 0[]
[]	}[]
[]	Else[]
[]	{[]
[]		buf_hWindowB := hWindow[]
[]		buf_Toggle := 1[]
[]	}[]
[]Return[]
[]<^F1::[]
[]	WM_SYSCOMMAND := 0x0112[]
[]	SC_RESTORE    := 0xf120[]
[]	_NULL         := 0x0000[]
[]	buf := WinExist("A")[]
[]	If ( buf == buf_hWindowA )[]
[]	{[]
[]		DllCall("user32.dll\PostMessageA", "Int", buf_hWindowB, "Int", WM_SYSCOMMAND, "Int", SC_RESTORE, "Int", _NULL)[]
[]		WinActivate, ahk_id %buf_hWindowB%[]
[]		Return[]
[]	}[]
[]	If ( buf == buf_hWindowB )[]
[]	{[]
[]		DllCall("user32.dll\PostMessageA", "Int", buf_hWindowA, "Int", WM_SYSCOMMAND, "Int", SC_RESTORE, "Int", _NULL)[]
[]		WinActivate, ahk_id %buf_hWindowA%[]
[]		Return[]
[]	}[]
[]	DllCall("user32.dll\PostMessageA", "Int", buf_hWindowA, "Int", WM_SYSCOMMAND, "Int", SC_RESTORE, "Int", _NULL)[]
[]	WinActivate, ahk_id %buf_hWindowA%[]
[]Return[]