+
|
←サンプルを表示する |
#SingleInstance, Force
#Persistent
OnMessage(99999, "HidMacros")
Menu, Tray, Add , GetScript
settimer, keycheck, 50 ; キー押し下げ/開放を keycheck で 50ms 間隔で調べる
tkey1 = Numpad1
tkey2 = Numpad2
tkey3 = Numpad3
tkey4 = Numpad4
tkey5 = Numpad5
tkey6 = Numpad6
tkey7 = Numpad7
tkey8 = Numpad8
tkey9 = Numpad9
tkey10 = Numpad0
tkey11 = Numpaddot
tkey12 = Tab
tkey13 = NumpadDiv
tkey14 = NumpadMult
tkey15 = Bs
tkey16 = Numpadsub
tkey17 = Numpadadd
tkey18 = NumpadEnter
;ChangekeyでテンキーをF13~F24置き換えた場合は場合は↓のtkey1~tkey18の行頭のセミコロン(;)を削除して使う。
;tkey1 = F13
;tkey2 = F14
;tkey3 = F15
;tkey4 = F16
;tkey5 = Numpad5
;tkey6 = F17
;tkey7 = F18
;tkey8 = F19
;tkey9 = F20
;tkey10 = F21
;tkey11 = F22
;tkey12 = tab
;tkey13 = NumpadDiv
;tkey14 = NumpadMult
;tkey15 = Bs
;tkey16 = F23
;tkey17 = F24
;tkey18 = NumpadEnter
return ; Autoexecセクション はここまで
esc::exitapp ; Escキーでスクリプトを終了させる。 ループから抜けられなくなったとき用。
GetScript: ; スクリプトをクリップボードにコピーする
DetectHiddenWindows, On
SetTitleMatchMode,RegEx
Hwnd := WinExist(".*\\ahk_hidmacros.ahk\s-\sAutoHotkey.* ahk_class AutoHotkey")
WinGetTitle, WinTitle, ahk_id %Hwnd%
Clipboard = hWnd = FindWindow ( "AutoHotkey", `"%WinTitle%`" )
Clipboard = %Clipboard%`nIf hWnd then`n Call PostMessage(hWnd, 99999, 1, 1 )
Clipboard = %Clipboard%`nEnd If
msgbox, %Clipboard%`nをクリップボードにコピーしました。
DetectHiddenWindows, Off
return
HidMacros(wParam, lParam) { ; 第三と第四引数は必要ないので省く。
global tkey1, tkey2, tkey3, tkey4, tkey5, tkey6, tkey7, tkey8, tkey9, tkey10
global tkey11, tkey12, tkey13, tkey14, tkey15, tkey16, tkey17, tkey18
global tkey1down, tkey2down, tkey3down, tkey4down, tkey5down, tkey6down
global tkey7down, tkey8down, tkey9down, tkey10down, tkey11down, tkey12down
global tkey13down, tkey14down, tkey15down, tkey16down, tkey17down, tkey18down
; キーが押されたら代入する。テンキー1(tkey1)が押されたら tkey1 を tkey1down に代入する
loop, 18
If ( lParam = A_Index ) {
tkey%A_Index%down := tkey%A_Index%
break
}
}
keycheck:
IfWinActive, ahk_class sfl_window_class ; Saiがアクティブなら
{
If ( tkey1down ) { ; 1キーが押されているなら
If !tkey10down ; 0キーが押されていなければ
tkey1down := HoldDownKey2(tkey1down, "space")
Else ; 0キーが押されているなら
tkey1down := HoldDownKey2(tkey1down, "ctrl", "space")
}
If ( tkey2down ) { ; 2キーが押されているなら
If !tkey10down ; 0キーが押されていなければ
tkey2down := HoldDownKey2(tkey2down, "alt")
Else ; 0キーが押されているなら
tkey2down := HoldDownKey2(tkey2down, "ctrl", "alt", "space")
}
If ( tkey3down ) { ; 3キーが押されているなら
If !tkey10down ; 0キーが押されていなければ
tkey3down := HoldDownKey2(tkey3down, "ctrl")
Else ; 0キーが押されているなら
tkey3down := HoldDownKey2(tkey3down, "ctrl", "alt")
}
If ( tkey4down ) ; 4キーが押されているなら
tkey4down := HoldDownKey2(tkey4down, "shift")
If ( tkey5down ) ; 5キーが押されているなら
tkey5down := HoldDownKey2(tkey5down, "alt", "space")
If ( tkey10down ) ; 0キー ※コンビネーションキーの起点とする。
tkey10down := HoldDownKey2(tkey10down, "")
; 割り当てていないキーを通常のテンキーにする。
If ( tkey6down || tkey7down || tkey8down || tkey9down || tkey11down || tkey12down
|| tkey13down || tkey14down || tkey15down || tkey16down || tkey17down || tkey18down )
gosub, TenkeyMode
} Else { ; Sai以外なら通常のテンキーにする。
gosub, TenkeyMode
}
return
HoldDownKey2(tkeydown, vkey1="", vkey2="", vkey3="", vkey4="") {
keywait, %tkeydown%, T0.01
if ( vkey1 ) {
If !errorlevel {
send, {%vkey1% up}
send, % vkey2 ? "{" vkey2 " up}" :
send, % vkey3 ? "{" vkey3 " up}" :
send, % vkey4 ? "{" vkey4 " up}" :
return 0
}
If ( !getkeystate(vkey) ) {
send, {%vkey1% down}
send, % vkey2 ? "{" vkey2 " down}" :
send, % vkey3 ? "{" vkey3 " down}" :
send, % vkey4 ? "{" vkey4 " down}" :
}
return %tkeydown%
} Else {
return % errorlevel ? tkeydown : 0 ; キーが開放されたら 0 を返す
}
}
TenkeyMode: ; 通常のテンキーにする
tenkeys = %tkey1%|%tkey2%|%tkey3%|%tkey4%|%tkey5%|%tkey6%|%tkey7%|%tkey8%|%tkey9%|%tkey10%
tenkeys = %tenkeys%|%tkey11%|%tkey12%|%tkey13%|%tkey14%|%tkey15%|%tkey16%|%tkey17%|%tkey18%
Loop, Parse, tenkeys, |
{
If tkey%A_Index%down
{
send, {%A_LoopField%}
tkey%A_Index%down = 0
}
}
return
|