(AutoHotkey)(質問に対する回答)
オヤジさんから 以下のような質問を頂きましたので
それを実現するスクリプトを考えてみました
個人的には ホットキーによる ルーチンの呼び出しの中で
アクティブなウインドウを判断する書き方が ほとんどなので
そのように 書き直させてもらいました
もしも 思っていたのと違う場合は 追って コメントに書いてくださいです
ではでは
それを実現するスクリプトを考えてみました
AutoHotkeyを使い始めたばかりの者です。 XPのエクスプローラでフォルダを作成するショートカットキーを作りました。 #IfWinActive ahk_class CabinetWClass ^k::Send,!fwf #IfWinActive ですが、IMEがONの時には誤動作してしまいます。 そこでインターネットで調べていたら、ここにたどり着いたのですが、 公開された関数を使って、IMEのON/OFFにかかわらず上記の機能を実現するには どのようにすればいいのが教えていただければありがたいです。質問では #IfWinActive で アクティブウインドウを 判断されていますが
個人的には ホットキーによる ルーチンの呼び出しの中で
アクティブなウインドウを判断する書き方が ほとんどなので
そのように 書き直させてもらいました
; Ctrl+kの時に呼び出されるルーチン ^k:: { ; アクティブなウインドウのハンドルを取得する hWindow := WinExist("A") ; 上で取得したハンドルから クラス名を取得する WinGetClass, ClassName, ahk_id %hWindow% ; クラス名が「ExploreWClass」か「CabinetWClass」だったら 以下のブロックを実行 If RegExMatch(ClassName, "ExploreWClass|CabinetWClass") { ; IME_IsONユーザ関数 を 使って 現在の IMEのモードを保存する LastImeMode := IME_IsON(hWindow) ; IME_ONユーザ関数 を 使って IMEのモードを強制的に OFFにする IME_ON(hWindow, False) ; Alt+f、w、f と Sendする Send, {Alt Down}f{Alt Up}wf ; 保存しておいた IMEのモードに戻す IME_ON(hWindow, LastImeMode) } Return } IME_IsON(hWindow) { ; WM_IME_CONTROL = 0x0283 ; IMC_GETOPENSTATUS = 0x0005 bufCurrentDetectMode := A_DetectHiddenWindows DetectHiddenWindows, On buf := DllCall("user32.dll\SendMessageA", "UInt", DllCall("imm32.dll\ImmGetDefaultIMEWnd", "Uint",hWindow) , "UInt", 0x0283, "Int", 0x0005, "Int", 0) DetectHiddenWindows, %bufCurrentDetectMode% Return buf } IME_ON(hWindow, IsON) { ; WM_IME_CONTROL = 0x0283 ; IMC_SETOPENSTATUS = 0x0006 bufCurrentDetectMode := A_DetectHiddenWindows DetectHiddenWindows, On buf := DllCall("user32.dll\SendMessageA", "UInt", DllCall("imm32.dll\ImmGetDefaultIMEWnd", "Uint",hWindow) , "UInt", 0x0283, "Int", 0x0006, "Int", IsON) DetectHiddenWindows, %bufCurrentDetectMode% Return buf }とりあえず これで上手く行くかなと思います 笑)
もしも 思っていたのと違う場合は 追って コメントに書いてくださいです
ではでは