🎉

個人的AutoHotKeyの設定

に公開

個人的なAutoHotKeyの設定です。

  • 左 Alt 空打ちで IME を OFF
  • 右 Alt 空打ちで IME を ON
  • 左 Win 空打ちで IME を OFF
  • 右 Win 空打ちで IME を ON
  • ESC で IME を OFF
  • 日時入力

ご参考まで。

key_bind.ahk
#Include, IME.ahk

;-----------------------------------------------------
; AutoHotKeyでの記号の意味について
;-----------------------------------------------------
; ^ Ctrl
; + Shift
; ! Alt
; # Win
; * ワイルドカード(*#c とすると Shift+Win+C、Ctrl+Win+C、Alt+Win+C などでも起動される)
; ~ ネイティブ保護(ホットキーが起動してもそのキーのネイティブ機能はブロックされない)


;-----------------------------------------------------
; 主要なキーを HotKey に設定し、何もせずパススルーする
;-----------------------------------------------------
*~a::
*~b::
*~c::
*~d::
*~e::
*~f::
*~g::
*~h::
*~i::
*~j::
*~k::
*~l::
*~m::
*~n::
*~o::
*~p::
*~q::
*~r::
*~s::
*~t::
*~u::
*~v::
*~w::
*~x::
*~y::
*~z::
*~1::
*~2::
*~3::
*~4::
*~5::
*~6::
*~7::
*~8::
*~9::
*~0::
*~F1::
*~F2::
*~F3::
*~F4::
*~F5::
*~F6::
*~F7::
*~F8::
*~F9::
*~F10::
*~F11::
*~F12::
*~`::
*~~::
*~!::
*~@::
*~#::
*~$::
*~%::
*~^::
*~&::
*~*::
*~(::
*~)::
*~-::
*~_::
*~=::
*~+::
*~[::
*~{::
*~]::
*~}::
*~\::
*~|::
*~;::
*~'::
*~"::
*~,::
*~<::
*~.::
*~>::
*~/::
*~?::
*~Esc::
*~Tab::
*~Space::
*~Left::
*~Right::
*~Up::
*~Down::
*~Enter::
*~PrintScreen::
*~Delete::
*~Home::
*~End::
*~PgUp::
*~PgDn::
    Return


;-----------------------------------------------------
; 上部メニューがアクティブになるのを抑制
;-----------------------------------------------------
*~LAlt::Send {Blind}{vk07}
*~RAlt::Send {Blind}{vk07}


;-----------------------------------------------------
; 左 Alt 空打ちで IME を OFF
;-----------------------------------------------------
LAlt up::
    if (A_PriorHotkey == "*~LAlt")
    {
        IME_SET(0)
    }
    Return


;-----------------------------------------------------
; 右 Alt 空打ちで IME を ON
;-----------------------------------------------------
RAlt up::
    if (A_PriorHotkey == "*~RAlt")
    {
        IME_SET(1)
    }
    Return


;-----------------------------------------------------
; スタートメニューがアクティブになるのを抑制
;-----------------------------------------------------
*~LWin::Send {Blind}{vk07}
*~RWin::Send {Blind}{vk07}

;-----------------------------------------------------
; 左 Win 空打ちで IME を OFF
;-----------------------------------------------------
LWin up::
    if (A_PriorHotkey == "*~LWin")
    {
        IME_SET(0)
    }
    Return


;-----------------------------------------------------
; 右 Win 空打ちで IME を ON
;-----------------------------------------------------
RWin up::
    if (A_PriorHotkey == "*~RWin")
    {
        IME_SET(1)
    }
    Return


;-----------------------------------------------------
; ESC で IME を OFF
;-----------------------------------------------------
~Esc::IME_SET(0)


;-----------------------------------------------------
; 日時入力
;-----------------------------------------------------
; Ctrl + Shift + I

^+i::
  FormatTime,TimeString,,yyyyMMdd
  ime_mode := IME_GET()
  IME_SET(0)
  Send,%TimeString%
  IME_SET(ime_mode)
Return

; Ctrl + alt + I

^!i::
  FormatTime,TimeString,,yyyy/MM/dd
  ime_mode := IME_GET()
  IME_SET(0)
  Send,%TimeString%
  IME_SET(ime_mode)
Return

; Ctrl + Shift + alt + I

^+!i::
  FormatTime,TimeString,,yyyy/MM/dd HH:mm:ss
  ime_mode := IME_GET()
  IME_SET(0)
  Send,%TimeString%
  IME_SET(ime_mode)
Return


IME.ahk
;-----------------------------------------------------------
; IMEの状態の取得
;   WinTitle="A"    対象Window
;   戻り値          1:ON / 0:OFF
;-----------------------------------------------------------
IME_GET(WinTitle="A")  {
    ControlGet,hwnd,HWND,,,%WinTitle%
    if    (WinActive(WinTitle))    {
        ptrSize := !A_PtrSize ? 4 : A_PtrSize
        VarSetCapacity(stGTI, cbSize:=4+4+(PtrSize*6)+16, 0)
        NumPut(cbSize, stGTI,  0, "UInt")   ;    DWORD   cbSize;
        hwnd := DllCall("GetGUIThreadInfo", Uint,0, Uint,&stGTI)
                 ? NumGet(stGTI,8+PtrSize,"UInt") : hwnd
    }

    return DllCall("SendMessage"
          , UInt, DllCall("imm32\ImmGetDefaultIMEWnd", Uint,hwnd)
          , UInt, 0x0283  ;Message : WM_IME_CONTROL
          ,  Int, 0x0005  ;wParam  : IMC_GETOPENSTATUS
          ,  Int, 0)      ;lParam  : 0
}

;-----------------------------------------------------------
; IMEの状態をセット
;   SetSts          1:ON / 0:OFF
;   WinTitle="A"    対象Window
;   戻り値          0:成功 / 0以外:失敗
;-----------------------------------------------------------
IME_SET(SetSts, WinTitle="A")    {
    ControlGet,hwnd,HWND,,,%WinTitle%
    if    (WinActive(WinTitle))    {
        ptrSize := !A_PtrSize ? 4 : A_PtrSize
        VarSetCapacity(stGTI, cbSize:=4+4+(PtrSize*6)+16, 0)
        NumPut(cbSize, stGTI,  0, "UInt")   ;    DWORD   cbSize;
        hwnd := DllCall("GetGUIThreadInfo", Uint,0, Uint,&stGTI)
                 ? NumGet(stGTI,8+PtrSize,"UInt") : hwnd
    }

    return DllCall("SendMessage"
          , UInt, DllCall("imm32\ImmGetDefaultIMEWnd", Uint,hwnd)
          , UInt, 0x0283  ;Message : WM_IME_CONTROL
          ,  Int, 0x006   ;wParam  : IMC_SETOPENSTATUS
          ,  Int, SetSts) ;lParam  : 0 or 1
}


Discussion