エクスプローラキーバインド変更 & 持ち運び用キーバインド変更アプリ
参考1:http://d.hatena.ne.jp/morakana/searchdiary?word=Autohotkey&.submit=%B8%A1%BA%F7&type=detail
参考2:http://hp.vector.co.jp/authors/VA023367/neartech/vb/1.html
概要
Autohotokeyを使ってエクスプローラのキーバインドを変更
持ち運び用に全設定記述
持ち運び用にShift+SpaceでIME切り替えやCapsLock→Ctrlを追加してまとめた
また,変換+j/kでタスクを切り替え,変換+iをEscに設定
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases. SendMode Input ;CapsLockをCtrl sc03a::Ctrl ;Shift+Spaceで半角/全角 +Space::send, {vkF4sc029} /* ;Launthy用 vk1Dsc07B::#Space */ ;変換+j/kでタスク切り替え vk1Csc079 & j::AltTab vk1Csc079 & k::ShiftAltTab ;変換+iでEsc vk1Csc079 & i::Send, {Esc} ;Adobe Reader用設定 #IfWinActive ahk_class AcrobatSDIWindow j::Down J::PgDn k::Up K::PgUp h::^PgUp l::^PgDn g up:: if(A_PriorHotkey = A_ThisHotKey) Send, {Home} return G::End sc033::^+F6 .::^F6 d::^F4 z:: Input, InputChar, C I L1 T2, {Esc}, o,i if ErrorLevel=Match { if InputChar=o Send, ^- if InputChar=i Send, ^`; } return z up:: if(A_PriorHotkey = A_ThisHotKey) Send, ^2 return #IfWinActive ;エクスプローラ用設定 #IfWinActive ahk_class ExploreWClass j:: if GetClassNameOnWindow(WinExist("A")) <> "Edit" send, {Down} else send, j return k:: if GetClassNameOnWindow(WinExist("A")) <> "Edit" send, {Up} else send, k return h:: if GetClassNameOnWindow(WinExist("A")) <> "Edit" send, {Left} else send, h return l:: if GetClassNameOnWindow(WinExist("A")) <> "Edit" send, {Right} else send, l return `;:: if GetClassNameOnWindow(WinExist("A")) <> "Edit" send, {NumpadEnter} else send, `; return Space:: if GetClassNameOnWindow(WinExist("A")) <> "Edit" send, {AppsKey} else send, {Space} return d:: if GetClassNameOnWindow(WinExist("A")) <> "Edit" send, {Del} else send, d return u:: if GetClassNameOnWindow(WinExist("A")) <> "Edit" send, ^z else send, u return r:: if GetClassNameOnWindow(WinExist("A")) <> "Edit" send, {F5} else send, r return f:: if GetClassNameOnWindow(WinExist("A")) <> "Edit" send, !veo else send, f return ^l:: send, !d return #IfWinActive GetClassNameOnWindow(hWindow) { max := VarSetCapacity(s, 256) ActiveThreadID := DllCall("GetWindowThreadProcessId", "UInt", hWindow, "UIntP",0) if(DllCall("AttachThreadInput", "UInt", DllCall("GetCurrentThreadId"), "UInt", ActiveThreadID, "Int", 1)) { hFocus := DllCall("GetFocus") DllCall("GetClassName", "UInt", hFocus, "Str", s, "Int", max) DllCall("AttachThreadInput", "UInt", DllCall("GetCurrentThreadId"), "UInt", ActiveThreadID, "Int", 0) }else s := "Error" return s }
コマンド | 動作 | コマンド | 動作 |
---|---|---|---|
j | ↓ | d | 削除 |
k | ↑ | u | やり直し |
h | ← | r | 再読み込み |
l | → | f | フォルダの表示/非表示 |
; | エンター | Ctrl+l | アドレスバーに移動 |
Space | マウス右クリック |
エクスプローラのフォーカスが入力待ち状態の場合は通常入力
そうでない場合は、上のようにマッピング
最初は参考1を元にIMEのon/offで切り替えるつもりだったが,いちいちIMEをonにしないと通常入力できないので却下
GetFocusでアクティブなコントロールのウィンドウハンドルを取得して,色々しようとしたが取得できなかった
呼び出し元(AutoHotkey)とエクスプローラの入力状態は独立しているので操作出来ないのが原因
解決策としてAttachThreadInput関数を使ってエクスプローラにアタッチすることで取得できた
あとは,GetClassName関数でウィンドウハンドルのクラス名を取得し"Edit"の場合は通常入力するようにする
名前の変更で使われるコントロールもEditらしい
また,GetClassName関数もアタッチした状態じゃないと使えないようだ
スキャンコード
http://www.geocities.jp/makoko1974/scancode.txt
AutoHotkeyを流行らせるページ
http://lukewarm.s101.xrea.com/index.html
msdn-GetWindowThreadProcessId
http://msdn.microsoft.com/ja-jp/library/cc364779.aspx
msdn-AttachThreadInput
http://msdn.microsoft.com/ja-jp/library/cc429027.aspx
msdn-GetCurrentThreadId
http://msdn.microsoft.com/ja-jp/library/cc429114.aspx
msdn-GetFocus
http://msdn.microsoft.com/ja-jp/library/cc364641.aspx
msdn-GetClassName
http://msdn.microsoft.com/ja-jp/library/cc364600.aspx