# 2007/04/24 Hiroyuki Ogasawara # vim:ts=4 sw=4: # em1key script file # http://www.vector.co.jp/authors/VA004474/ # 2007/04/26 説明用のコメント追加、新命令追加 # このファイルはバージョン更新時に上書きされる可能性があります。 # 書き換えて使っている場合は更新前に必ずバックアップを取っておくように # してください。 #----------------------------------------------------------------------------- # Kana キー置き換えのサンプル # 「いろは配列」 # # TABLE_KANA モードで有効。TABLE_DEFAULT の選択で無効にできます。 # # MOD_KANA をつけると IME ON 時でもローマ字変換されず、かな入力になるのが # ポイントです。ローマ字変換のまま配置をカスタマイズする場合は、MOD_KANA # をつけないでそのまま 'A'〜'Z' を送信してください。 # IME の on/off は [文字] キーで行っていてください。このとき状態判定を # 行っています。もしキー配列が変わっていないときは一度 [文字] キーで # IME の切り替えをしてください。 # カスタマイズの土台として参考にしてください。 #----------------------------------------------------------------------------- #------------------------------------------ # キーボードレイアウト対応図 #------------------------------------------ # - # Q W E R T Y U I O P # A S D F G H J K L # Z X C V B N M # , . / #------------------------------------------ # IME on の状態で そのまま押した場合 #------------------------------------------ # ー # い ろ は に ほ へ と ち り ぬ # る を わ か よ た れ そ つ # ね な ら む う ぃ の # 、 。 ・ #------------------------------------------ # IME on の状態で Shift と一緒に押した場合 #------------------------------------------ # = # お く や ま け ふ こ え て あ # さ き ゆ め み し ぇ ひ も # せ す ん っ ぁ ぅ ぉ # ゛ ゜ ? #------------------------------------------------------------------------------ # system 用シンボル #------------------------------------------------------------------------------ # ここは書き換えないでください define CODEEXIT 0 define EXIT 1 define RETURN 2 define JUMP 3 define JUMPALL 4 define LABEL 5 define CALL 6 define CALLVAR 7 # define SETMODIFIER 8 define SENDKEY 9 define SENDVAR 10 define RAWDOWN 11 define RAWUP 12 define EXEC 13 define WINCMD 14 define ROTATE 15 # define CLEARALLSTATE 16 define SAVETIME 17 define SETDIFFTIME 18 define SETGSTATE 19 define RESETGSTATE 20 define ALLOCVSTATE 21 define SETVSTATE 22 define RESETVSTATE 23 define SETSYSFLAG 24 define RESETSYSFLAG 25 define TESTSYSFLAG 26 define TESTGSTATE 27 define TESTVSTATE 28 define DOWNVAR 29 define UPVAR 30 # define SETVAR0 32 define SETVAR1 33 define SETVAR2 34 define SETVAR3 35 define LOADVAR 36 define STOREVAR 37 define LOAD 38 #define STRINGDATA 39 #define STRINGID 40 define MESSAGE 41 define SETTABLE 42 define LOADIVAR 43 define STOREIVAR 44 define PUSHVAR 45 define POPVAR 46 # define IF_DOWN 48 define IF_UP 49 define IF_DIFFTIME 50 define IF_TRUE 51 define IF_FALSE 52 # define IF_VSTATE0 53 define IF_VSTATE1 54 define IF_VSTATE2 55 define IF_VSTATE3 56 define IF_CTRL 57 define IF_SHIFT 58 define IF_RWIN 59 define IF_GSTATE3 60 # define CMP_EQ 61 define CMP_LT 62 define CMP_GT 63 define ADDVAR 64 define SUBVAR 65 define ANDVAR 66 define ORVAR 67 define XORVAR 68 define ADD 69 define SUB 70 define AND 71 define OR 72 define XOR 73 # define TRUE 1 define FALSE 0 # GSTATE define STATE_CTRL 0 define STATE_SHIFT 1 define STATE_RWIN 2 define STATE_KANATABLE 8 # VSTATE define VSTATE_0 0 define VSTATE_1 1 define VSTATE_2 2 # Modifier define MOD_CTRL 0x01 define MOD_SHIFT 0x02 define MOD_RWIN 0x10 define MOD_KANA 0x20 define MOD_KANASHIFT 0x22 # Function Table define TABLE_FUNC 1 define TABLE_DEFAULT 2 define TABLE_KANA 4 define TABLE_ALLMODE 6 # SystemFlag define SYSFLAG_CTRLSWAP 0 define SYSFLAG_ESCSWAP 1 define SYSFLAG_IMESW 2 define SYSFLAG_SCANTEST 3 define SYSFLAG_NAVIMODE 4 define SYSFLAG_IME 16 # WINCMD define WINCMD_CLOSE 0x41 define WINCMD_ALTTAB 0x42 define WINCMD_IMESW 0x43 define WINCMD_GETIMEMODE 0x44 # KeyCode define VK_BACK 0x08 # [BS] define VK_TAB 0x09 # [TAB] define VK_RETURN 0x0d # [Enter] define VK_SHIFT 0x10 # [Shift] define VK_CONTROL 0x11 # [Ctrl] define VK_MENU 0x12 define VK_KANA 0x15 define VK_KANJI 0x19 define VK_ESCAPE 0x1b define VK_SPACE 0x20 define VK_PRIOR 0x21 # PageUp define VK_NEXT 0x22 # PageDown define VK_END 0x23 define VK_HOME 0x24 define VK_LEFT 0x25 define VK_UP 0x26 define VK_RIGHT 0x27 define VK_DOWN 0x28 define VK_SELECT 0x29 define VK_PRINT 0x2a define VK_EXECUTE 0x2b define VK_SNAPSHOT 0x2c define VK_INSERT 0x2d define VK_DELETE 0x2e define VK_HELP 0x2f define VK_LWIN 0x5b define VK_RWIN 0x5c define VK_F1 0x70 # SoftKey1 define VK_F2 0x71 # SoftKey2 define VK_F3 0x72 define VK_F4 0x73 define VK_F5 0x74 define VK_F6 0x75 # RWIN+F6 = OK define VK_F7 0x76 # RWIN+F7 = Moji define VK_F8 0x77 define VK_F9 0x78 define VK_F10 0x79 define VK_F11 0x7a define VK_F12 0x7b define VK_F13 0x7c define VK_F14 0x7d define VK_F15 0x7e define VK_F16 0x7f define VK_F17 0x80 define VK_F18 0x81 define VK_F19 0x82 define VK_F20 0x83 define VK_F21 0x84 define VK_F22 0x85 define VK_F23 0x86 define VK_F24 0x87 define VK_LMENU 0xa4 # ALT define VK_RMENU 0xa5 define VK_SEMICOLON 0xba # ; define VK_EQUAL 0xbb # = define VK_COMMA 0xbc # [,;] define VK_HYPHEN 0xbd # [-=] define VK_PERIOD 0xbe # [.:] define VK_SLASH 0xbf # [/?] define VK_BACKQUOTE 0xc0 # ` define VK_APP1 0xc1 define VK_APP2 0xc2 define VK_APP3 0xc3 define VK_APP4 0xc4 define VK_APP5 0xc5 define VK_APP6 0xc6 define VK_LBRACKET 0xdb define VK_BACKSLASH 0xdc define VK_RBRACKET 0xdd define VK_APOSTROPHE 0xde define VK_OEM_102 0xe2 define VK_DBE_SBCSCHAR 0xf3 define VK_DBE_DBCSCHAR 0xf4 #------------------------------------------------------------------------------ # ここからスクリプトのプログラム開始 #------------------------------------------------------------------------------ #------------------------------------------------------------------------------ # 数値定義 #------------------------------------------------------------------------------ # この数値を書き換えることで長押し時の判定時間を変えることができます。 # 40msec 単位。25で約1秒 define KEEPTIME 25 #------------------------------------------------------------------------------ # 初期化関数 #----------------------------------------------------------------------------- # 初期化 起動時に呼ばれる func TABLE_FUNC 0 # 初期化 CLEARALLSTATE WINCMD WINCMD_GETIMEMODE # SystemFlag の初期値を設定 # デフォルトを Navigation Mode にする。(NumLock解除) SETSYSFLAG SYSFLAG_NAVIMODE # [文字] キーで IME の On/Off できるようにする。 SETSYSFLAG SYSFLAG_IMESW # EMONE/ZERO3 の内蔵キーのみ対象にします。これを off にすると外付け # キーボードや他の機種でもキーの置き換えが有効になります。 SETSYSFLAG SYSFLAG_SCANTEST # 外付けUSBキーボードで CTRL と CAPS を入れ替える。 #SETSYSFLAG SYSFLAG_CTRLSWAP # 外付けUSBキーボードで ESC と 全/半 を入れ替える。 #SETSYSFLAG SYSFLAG_ESCSWAP # 初期状態で使用するキーテーブルの選択 # 1=TABLE_DEFAULT # 2=TABLE_KANA # 1 にすると かな入力時の置き換えが off になります。 SETTABLE 2 endfunc #------------------------------------------------------------------------------ # 関数名と関数番号の割り当て #------------------------------------------------------------------------------ # TABLE_FUNC の関数マップ # 0x00〜 system 用 define _subNumKey 0x10 define _subCurKey 0x11 define _subSymbolKey 0x12 # 0x20〜 [0]〜[9]用 # 0x30〜 [0]〜[9]用 # 0x40〜 記号キー用 # 0x50〜 オプションの拡張配列用 #------------------------------------------------------------------------------ # 共通キー定義 #----------------------------------------------------------------------------- # [Ctrl] ステートの記録だけを行う func TABLE_ALLMODE VK_CONTROL IF_UP 10 # down SETGSTATE STATE_CTRL EXIT FALSE LABEL 10 # up RESETGSTATE STATE_CTRL EXIT FALSE endfunc # [RWIN] ステートの記録だけを行う # 特殊キー判定用 func TABLE_ALLMODE VK_RWIN IF_UP 10 # down SETGSTATE STATE_RWIN EXIT FALSE LABEL 10 # up RESETGSTATE STATE_RWIN EXIT FALSE endfunc # [Shift] ステートの記録だけを行う func TABLE_ALLMODE VK_SHIFT IF_UP 10 # down SETGSTATE STATE_SHIFT EXIT FALSE LABEL 10 # up RESETGSTATE STATE_SHIFT EXIT FALSE endfunc #----------------------------------------------------------------------------- # 数値キースクリプト #----------------------------------------------------------------------------- # @param[in] VAR0 = そのまま押したときの処理用関数番号 # @param[in] VAR1 = CTRLと一緒に押したときの処理用関数番号 # @param[in] VAR2 = 長押ししたときの処理用関数番号 # @brief 長押し判定つき汎用スクリプト # # 長押し判定があるので、キーを離したときに送る場合と押したときに送る場合 # の両方を処理しています。離した時だけの方が簡単ですがキーリピートの処理が # できなくなってしまいます。SHIFT 時の処理は簡単にするために素通りさせて # います。 # 呼び出し元で ALLOCVSTATE しておく必要あり。 # func TABLE_FUNC _subNumKey # NumMode なら素通り TESTSYSFLAG SYSFLAG_NAVIMODE IF_FALSE 30 # NaviMode IF_SHIFT 30 IF_VSTATE2 30 # through-mode (shift用) IF_DOWN 10 # key up IF_VSTATE1 20 # もし送信済みなら無視 # default (直押しは KEYUP 時に送信する) CALLVAR 0 # 直押し時のキー送信呼び出し LABEL 20 RESETVSTATE VSTATE_0 RESETVSTATE VSTATE_1 RESETVSTATE VSTATE_2 EXIT TRUE LABEL 10 # key down IF_CTRL 8 # ctrl が押されていたら直入力へ IF_VSTATE0 16 # すでに時間保存していたら差分判定へ SAVETIME 0 # 長押し用の判定基準時間を保存 SETVSTATE VSTATE_0 # 時間保存をしているマーク RESETVSTATE VSTATE_1 EXIT TRUE LABEL 8 # Ctrl 併用は KEYDOWN で即座に入力(up時は無視) # そうしないと KeyRepeat に対応できない RAWUP VK_CONTROL # Ctrl 状態をいったんキャンセル CALLVAR 1 # Ctrl 併用時のキーコード送信呼び出し RAWDOWN VK_CONTROL # Ctrl キーの状態を戻す SAVETIME 0 # 長押し用の判定基準時間を保存 SETVSTATE VSTATE_0 # 時間保存をしているマーク SETVSTATE VSTATE_1 # 送信済みmark EXIT TRUE LABEL 16 # keep press SETDIFFTIME KEEPTIME # 判定時間設定 IF_DIFFTIME 12 # 時間以上経っていたら飛ぶ EXIT TRUE LABEL 12 # keep press CALLVAR 2 # 長押し時のキーコード送信 SAVETIME 0 # KeyRepeat のための工夫(もう一度判定させる) SETVSTATE VSTATE_1 # 送信済みmark EXIT TRUE LABEL 30 # shift # 素通りさせる IF_UP 32 SETVSTATE VSTATE_2 # through mark(先にSHIFTを離した場合の対処) EXIT FALSE LABEL 32 RESETVSTATE VSTATE_0 RESETVSTATE VSTATE_1 RESETVSTATE VSTATE_2 EXIT FALSE endfunc # [1] func TABLE_ALLMODE '1' ALLOCVSTATE 0 SETVAR0 0x21 # そのまま SETVAR1 0x31 # ctrl+ SETVAR2 0x31 # 長押し CALL _subNumKey endfunc func TABLE_FUNC 0x21 SENDKEY VK_ESCAPE # [ESC] RETURN 0 endfunc func TABLE_FUNC 0x31 SENDKEY '1' # [1] RETURN 0 endfunc # [2] func TABLE_ALLMODE '2' ALLOCVSTATE 0 SETVAR0 0x22 SETVAR1 0x32 SETVAR2 0x32 CALL _subNumKey endfunc func TABLE_FUNC 0x22 SENDKEY VK_LWIN # [Win] RETURN 0 endfunc func TABLE_FUNC 0x32 SENDKEY '2' # [2] RETURN 0 endfunc # [3] func TABLE_ALLMODE '3' ALLOCVSTATE 0 SETVAR0 0x23 SETVAR1 0x33 SETVAR2 0x33 CALL _subNumKey endfunc func TABLE_FUNC 0x23 SENDKEY VK_F1 # ソフトキー左 [-] RETURN 0 endfunc func TABLE_FUNC 0x33 SENDKEY '3' # [3] RETURN 0 endfunc # [4] func TABLE_ALLMODE '4' ALLOCVSTATE 0 SETVAR0 0x24 SETVAR1 0x34 SETVAR2 0x34 CALL _subNumKey endfunc func TABLE_FUNC 0x24 SENDKEY VK_MENU # [ALT] RETURN 0 endfunc func TABLE_FUNC 0x34 SENDKEY '4' # [4] RETURN 0 endfunc # [5] func TABLE_ALLMODE '5' ALLOCVSTATE 0 SETVAR0 0x25 SETVAR1 0x35 SETVAR2 0x35 CALL _subNumKey endfunc func TABLE_FUNC 0x25 WINCMD WINCMD_ALTTAB # [Alt]+[TAB] RETURN 0 endfunc func TABLE_FUNC 0x35 SENDKEY '5' # [5] RETURN 0 endfunc # [6] func TABLE_ALLMODE '6' ALLOCVSTATE 0 SETVAR0 0x26 SETVAR1 0x36 SETVAR2 0x36 CALL _subNumKey endfunc func TABLE_FUNC 0x26 RAWDOWN VK_LWIN SENDKEY VK_APP4 # AppKey 4 [TV]長押し 相当 RAWUP VK_LWIN RETURN 0 endfunc func TABLE_FUNC 0x36 SENDKEY '6' # [6] RETURN 0 endfunc # [7] func TABLE_ALLMODE '7' ALLOCVSTATE 0 SETVAR0 0x27 SETVAR1 0x37 SETVAR2 0x37 CALL _subNumKey endfunc func TABLE_FUNC 0x27 RAWDOWN VK_LWIN SENDKEY VK_APP5 # AppKey 5 [IE]長押し 相当 RAWUP VK_LWIN RETURN 0 endfunc func TABLE_FUNC 0x37 SENDKEY '7' # [7] RETURN 0 endfunc # [8] func TABLE_ALLMODE '8' ALLOCVSTATE 0 SETVAR0 0x28 SETVAR1 0x38 SETVAR2 0x38 CALL _subNumKey endfunc func TABLE_FUNC 0x28 RAWDOWN VK_LWIN SENDKEY VK_APP6 # AppKey 6 [Mail]長押し 相当 RAWUP VK_LWIN RETURN 0 endfunc func TABLE_FUNC 0x38 SENDKEY '8' # [8] RETURN 0 endfunc # [9] func TABLE_ALLMODE '9' ALLOCVSTATE 0 SETVAR0 0x29 SETVAR1 0x39 SETVAR2 0x39 CALL _subNumKey endfunc func TABLE_FUNC 0x29 SETMODIFIER MOD_RWIN SENDKEY VK_F6 # [OK] RETURN 0 endfunc func TABLE_FUNC 0x39 SENDKEY '9' # [9] RETURN 0 endfunc # [0] func TABLE_ALLMODE '0' ALLOCVSTATE 0 SETVAR0 0x20 SETVAR1 0x30 SETVAR2 0x30 CALL _subNumKey endfunc func TABLE_FUNC 0x20 SENDKEY VK_F2 # ソフトキー右 RETURN 0 endfunc func TABLE_FUNC 0x30 SENDKEY '0' # [0] RETURN 0 endfunc #----------------------------------------------------------------------------- # 記号 #----------------------------------------------------------------------------- # @param[in] VAR0 = そのまま # @param[in] VAR1 = Shift 押しながら (Shift 一度押して離してからも同じ) # @param[in] VAR2 = Ctrl 押しながら # @param[in] VAR3 = Shift 一度離して Ctrl 押しながら # @brief 記号の共通処理関数 # # キー処理は全部のっとって 4状態のキーコード送信を全部自前で行います。 # この方が実装は楽です。 # func TABLE_FUNC _subSymbolKey IF_UP 10 # key down IF_CTRL 20 IF_SHIFT 30 CALLVAR 0 # そのまま押したときのキーコード送信 EXIT TRUE LABEL 30 # shift CALLVAR 1 # Shift 時のキーコード送信 EXIT TRUE LABEL 20 # ctrl IF_SHIFT 40 RAWUP VK_CONTROL CALLVAR 2 # Ctrl 時のキーコード送信 RAWDOWN VK_CONTROL EXIT TRUE LABEL 40 # ctrl+shift RAWUP VK_CONTROL CALLVAR 3 # Shift + Ctrl 時のキーコード送信 RAWDOWN VK_CONTROL EXIT TRUE LABEL 10 # key up # KEYUP 時は何もしない EXIT TRUE endfunc # [;,] キー # ',' = そのまま # ';' = Shift 押しながら # '>' = Shift 一度離して [,] # '[' = Ctrl 押しながら # '{' = Shift 一度離して Ctrl 押しながら func TABLE_ALLMODE VK_COMMA SETVAR0 0x40 SETVAR1 0x41 SETVAR2 0x42 SETVAR3 0x43 CALL _subSymbolKey endfunc func TABLE_FUNC 0x40 SENDKEY VK_COMMA # , RETURN 0 endfunc func TABLE_FUNC 0x41 SETMODIFIER MOD_SHIFT SENDKEY VK_COMMA # < RETURN 0 endfunc func TABLE_FUNC 0x42 SENDKEY VK_LBRACKET # [ RETURN 0 endfunc func TABLE_FUNC 0x43 SETMODIFIER MOD_SHIFT SENDKEY VK_LBRACKET # { RETURN 0 endfunc # [:.] キー # '.' = そのまま # ':' = Shift 押しながら # '>' = Shift 一度離して [.] # ']' = Ctrl 押しながら # '}' = Shift 一度離して Ctrl 押しながら func TABLE_ALLMODE VK_PERIOD SETVAR0 0x44 SETVAR1 0x45 SETVAR2 0x46 SETVAR3 0x47 CALL _subSymbolKey endfunc func TABLE_FUNC 0x44 SENDKEY VK_PERIOD # . RETURN 0 endfunc func TABLE_FUNC 0x45 SETMODIFIER MOD_SHIFT SENDKEY VK_PERIOD # > RETURN 0 endfunc func TABLE_FUNC 0x46 SENDKEY VK_RBRACKET # ] RETURN 0 endfunc func TABLE_FUNC 0x47 SETMODIFIER MOD_SHIFT SENDKEY VK_RBRACKET # } RETURN 0 endfunc # [?/] キー # '/' = そのまま # '?' = Shift 押しながら # 画面回転 = Ctrl 押しながら # 回転リセット = Shift 一度離して Ctrl 押しながら func TABLE_ALLMODE VK_SLASH SETVAR0 0x48 SETVAR1 0x49 SETVAR2 0x4a SETVAR3 0x4b CALL _subSymbolKey endfunc func TABLE_FUNC 0x48 SENDKEY VK_SLASH # / RETURN 0 endfunc func TABLE_FUNC 0x49 SETMODIFIER MOD_SHIFT SENDKEY VK_SLASH # ? RETURN 0 endfunc func TABLE_FUNC 0x4a ROTATE 4 # 画面回転 RETURN 0 endfunc func TABLE_FUNC 0x4b ROTATE 1 # 上下反転 RETURN 0 endfunc # [-=] # '-' = そのまま # '=' = Shift 押しながら # NumLock切替 = Ctrl 押しながら # アプリ終了 = Shift 一度離して Ctrl 押しながら func TABLE_ALLMODE VK_HYPHEN SETVAR0 0x4c SETVAR1 0x4d SETVAR2 0x4e SETVAR3 0x4f CALL _subSymbolKey endfunc func TABLE_FUNC 0x4c SENDKEY VK_HYPHEN # - RETURN 0 endfunc func TABLE_FUNC 0x4d SETMODIFIER MOD_SHIFT SENDKEY VK_HYPHEN # = RETURN 0 endfunc func TABLE_FUNC 0x4e # NumLock mode 切り替え TESTSYSFLAG SYSFLAG_NAVIMODE IF_TRUE 10 SETSYSFLAG SYSFLAG_NAVIMODE RETURN 0 LABEL 10 RESETSYSFLAG SYSFLAG_NAVIMODE RETURN 0 endfunc func TABLE_FUNC 0x4f # CALL 0x4e WINCMD WINCMD_CLOSE # 最前面のアプリ終了 RETURN 0 endfunc #----------------------------------------------------------------------------- # カーソルキー #----------------------------------------------------------------------------- # @param[in] VAR0 = 送信コード # @brief カーソルキー共通処理の関数 # # Ctrl 併用時は指定したコードを送信します。 # Ctrl が押されていないときは何もフックしないで本来の処理を素通りさせます。 # 素通りのほうが負担が少ないですが、途中でキーが押されたり離す可能性がある # ので厳密に処理しようとすると併用は意外に処理が複雑になります。 # 呼び出し元で ALLOCVSTATE しておく必要があります。 # func TABLE_FUNC _subCurKey IF_CTRL 10 IF_UP 40 SETVSTATE VSTATE_0 # through で KEYDOWN したことを保存 EXIT FALSE LABEL 10 IF_VSTATE0 30 # through (先に Ctrl を離した時の処理) IF_UP 20 SENDVAR 0 EXIT TRUE LABEL 20 # key up # nop RESETVSTATE VSTATE_0 EXIT TRUE LABEL 30 IF_UP 40 EXIT FALSE LABEL 40 RESETVSTATE VSTATE_0 EXIT FALSE endfunc # [up] func TABLE_ALLMODE VK_UP ALLOCVSTATE 0 SETVAR0 VK_PRIOR # [PageUp] CALL _subCurKey endfunc # [down] func TABLE_ALLMODE VK_DOWN ALLOCVSTATE 0 SETVAR0 VK_NEXT # [PageDown] CALL _subCurKey endfunc # [left] func TABLE_ALLMODE VK_LEFT ALLOCVSTATE 0 SETVAR0 VK_HOME # [Home] CALL _subCurKey endfunc # [right] func TABLE_ALLMODE VK_RIGHT ALLOCVSTATE 0 SETVAR0 VK_END # [End] CALL _subCurKey endfunc #----------------------------------------------------------------------------- # 特殊キー #----------------------------------------------------------------------------- # [文字] キー判定用 # # IME on/off = そのまま # 文字種切替 = Ctrl 押しながら # # IME の on/off は VK_LMENU + VK_KANJI でもできますが、未確定バッファの # 内容が捨てられてしまいます。WINCMD WINCMD_IMESW を使うと未確定バッファ # があるときは IME が off になりません。 # func TABLE_ALLMODE VK_F7 TESTSYSFLAG SYSFLAG_IMESW IF_FALSE 30 # SYSFLAG_IMESW が off なら何もしない(素通り) IF_CTRL 30 # Ctrl 併用時は本来の処理をさせる(素通り) IF_UP 10 # key down IF_RWIN 8 # F7 only SENDKEY VK_F7 EXIT TRUE LABEL 8 # [文字]キーが押されたとき # RWIN + F7 = [Moji] RAWUP VK_RWIN # RWIN をキャンセル # RAWDOWN VK_LMENU # SENDKEY VK_KANJI # RAWUP VK_LMENU WINCMD WINCMD_IMESW # IME の On/Off RAWDOWN VK_RWIN EXIT TRUE LABEL 10 # up # KEYUP 時は何もしない EXIT TRUE LABEL 30 EXIT FALSE endfunc # [Tab] キー判定用 # # Tab = そのまま # TASK切替 = Ctrl 押しながら # func TABLE_ALLMODE VK_TAB IF_CTRL 10 IF_UP 40 # down # ctrl なしの KEYDOWN は素通り SETVSTATE VSTATE_0 # 素通りしたことを保存 EXIT FALSE LABEL 10 # ctrl 併用時 IF_VSTATE0 30 # through (あとから Ctrl が押されたケースを識別) IF_UP 20 WINCMD WINCMD_ALTTAB # Task Change EXIT TRUE LABEL 20 # key up # 何もしない RESETVSTATE VSTATE_0 EXIT TRUE LABEL 30 IF_UP 40 EXIT FALSE LABEL 40 RESETVSTATE VSTATE_0 EXIT FALSE endfunc #----------------------------------------------------------------------------- # プログラム起動設定例 # string 0 "\Program Files\bin\easydial.exe" # EXEC 0 #----------------------------------------------------------------------------- #----------------------------------------------------------------------------- # ここから追加のオプション設定 #----------------------------------------------------------------------------- #----------------------------------------------------------------------------- # Kana キー置き換えのサンプル # 「いろは配列」 # # TABLE_KANA モードで有効。TABLE_DEFAULT の選択で無効にできます。 # # MOD_KANA をつけると IME ON 時でもローマ字変換されず、かな入力になるのが # ポイントです。ローマ字変換のまま配置をカスタマイズする場合は、MOD_KANA # をつけないでそのまま 'A'〜'Z' を送信してください。 # IME の on/off は [文字] キーで行っていてください。このとき状態判定を # 行っています。もしキー配列が変わっていないときは一度 [文字] キーで # IME の切り替えをしてください。 # カスタマイズの土台として参考にしてください。 #----------------------------------------------------------------------------- #------------------------------------------ # キーボードレイアウト対応図 #------------------------------------------ # - # Q W E R T Y U I O P # A S D F G H J K L # Z X C V B N M # , . / #------------------------------------------ # IME on の状態で そのまま押した場合 #------------------------------------------ # ー # い ろ は に ほ へ と ち り ぬ # る を わ か よ た れ そ つ # ね な ら む う ぃ の # 、 。 ・ #------------------------------------------ # IME on の状態で Shift と一緒に押した場合 #------------------------------------------ # = # お く や ま け ふ こ え て あ # さ き ゆ め み し ぇ ひ も # せ す ん っ ぁ ぅ ぉ # ゛ ゜ ? define _SELTABLE TABLE_KANA define _subTestIME 0x18 define _subSendKana 0x19 # @brief かな状態で送信すべきキー判定を行います # # 送信すべき状態だったら元の関数に RETURN します。 # そうでなければ自分で EXIT します。 # # IME off 時 = 元のキーコードを送信する(素通り) # IME on 時 = Ctrl 併用なら元のキーコードを送信する # (そうしないとコントロールコードを入力できない) # Ctrl が無ければ自前コードを送信する # # 呼び出し元で ALLOCVSTATE しておく必要あり # func TABLE_FUNC _subTestIME TESTSYSFLAG SYSFLAG_IME IF_TRUE 10 # IME off なら何もしないで終了(素通り) EXIT FALSE LABEL 10 IF_UP 20 IF_CTRL 30 # IME on かつ Ctrl が無くて KEYDOWN なら戻る RETURN 0 LABEL 20 # KEYUP 時 IF_VSTATE0 40 # KEYUP は無視 RESETVSTATE VSTATE_0 # スルーしたよマークを消す EXIT TRUE LABEL 40 # すでに KEYDOWN をスルー(送信) されていた場合は KEYUP を無視できない RESETVSTATE VSTATE_0 # スルーしたよマークを消す EXIT FALSE LABEL 30 # Ctrl 併用の KEYDOWN 時は KEYDOWN をスルー SETVSTATE VSTATE_0 # KEYDOWN をスルーしたよマーク EXIT FALSE endfunc # @param[in] VAR0 = そのまま押したときの Modifier # @param[in] VAR1 = そのまま押したときのキーコード # @param[in] VAR2 = SHIFT 併用時の Modifier # @param[in] VAR3 = SHIFT 併用時のキーコード # @brief 状態によって自前のコードを送信します # func TABLE_FUNC _subSendKana CALL _subTestIME IF_SHIFT 10 # そのまま押したとき LOADVAR 0 STOREVAR 35 # VAR35 = SETMODIFIER 相当 SENDVAR 1 EXIT TRUE LABEL 10 # Shift と一緒に押したとき RAWUP VK_SHIFT LOADVAR 2 STOREVAR 35 # VAR35 = SETMODIFIER 相当 SENDVAR 3 RAWDOWN VK_SHIFT EXIT TRUE endfunc #------------------------------------------------------------------------------ # func _SELTABLE 'Q' ALLOCVSTATE 0 SETVAR0 MOD_KANA SETVAR1 'E' # い SETVAR2 MOD_KANA SETVAR3 '6' # お CALL _subSendKana endfunc # func _SELTABLE 'W' ALLOCVSTATE 0 SETVAR0 MOD_KANA SETVAR1 VK_OEM_102 # ろ SETVAR2 MOD_KANA SETVAR3 'H' # く CALL _subSendKana endfunc # func _SELTABLE 'E' ALLOCVSTATE 0 SETVAR0 MOD_KANA SETVAR1 'F' # は SETVAR2 MOD_KANA SETVAR3 '7' # や CALL _subSendKana endfunc # func _SELTABLE 'R' ALLOCVSTATE 0 SETVAR0 MOD_KANA SETVAR1 'I' # に SETVAR2 MOD_KANA SETVAR3 'J' # ま CALL _subSendKana endfunc # func _SELTABLE 'T' ALLOCVSTATE 0 SETVAR0 MOD_KANA SETVAR1 VK_HYPHEN # ほ SETVAR2 MOD_KANA SETVAR3 VK_APOSTROPHE # け CALL _subSendKana endfunc # func _SELTABLE 'Y' ALLOCVSTATE 0 SETVAR0 MOD_KANA SETVAR1 VK_EQUAL # へ SETVAR2 MOD_KANA SETVAR3 '2' # ふ CALL _subSendKana endfunc # func _SELTABLE 'U' ALLOCVSTATE 0 SETVAR0 MOD_KANA SETVAR1 'S' # と SETVAR2 MOD_KANA SETVAR3 'B' # こ CALL _subSendKana endfunc # func _SELTABLE 'I' ALLOCVSTATE 0 SETVAR0 MOD_KANA SETVAR1 'A' # ち SETVAR2 MOD_KANA SETVAR3 '5' # え CALL _subSendKana endfunc # func _SELTABLE 'O' ALLOCVSTATE 0 SETVAR0 MOD_KANA SETVAR1 'L' # り SETVAR2 MOD_KANA SETVAR3 'W' # て CALL _subSendKana endfunc # func _SELTABLE 'P' ALLOCVSTATE 0 SETVAR0 MOD_KANA SETVAR1 '1' # ぬ SETVAR2 MOD_KANA SETVAR3 '3' # あ CALL _subSendKana endfunc #------------------------------------------------------------------------------ # func _SELTABLE 'A' ALLOCVSTATE 0 SETVAR0 MOD_KANA SETVAR1 VK_PERIOD # る SETVAR2 MOD_KANA SETVAR3 'X' # さ CALL _subSendKana endfunc # func _SELTABLE 'S' ALLOCVSTATE 0 SETVAR0 MOD_KANASHIFT SETVAR1 '0' # を SETVAR2 MOD_KANA SETVAR3 'G' # き CALL _subSendKana endfunc # func _SELTABLE 'D' ALLOCVSTATE 0 SETVAR0 MOD_KANA SETVAR1 '0' # わ SETVAR2 MOD_KANA SETVAR3 '8' # ゆ CALL _subSendKana endfunc # func _SELTABLE 'F' ALLOCVSTATE 0 SETVAR0 MOD_KANA SETVAR1 'T' # か SETVAR2 MOD_KANA SETVAR3 VK_SLASH # め CALL _subSendKana endfunc # func _SELTABLE 'G' ALLOCVSTATE 0 SETVAR0 MOD_KANA SETVAR1 '9' # よ SETVAR2 MOD_KANA SETVAR3 'N' # み CALL _subSendKana endfunc # func _SELTABLE 'H' ALLOCVSTATE 0 SETVAR0 MOD_KANA SETVAR1 'Q' # た SETVAR2 MOD_KANA SETVAR3 'D' # し CALL _subSendKana endfunc # func _SELTABLE 'J' ALLOCVSTATE 0 SETVAR0 MOD_KANA SETVAR1 VK_SEMICOLON # れ SETVAR2 MOD_KANASHIFT SETVAR3 '5' # ぇ CALL _subSendKana endfunc # func _SELTABLE 'K' ALLOCVSTATE 0 SETVAR0 MOD_KANA SETVAR1 'C' # そ SETVAR2 MOD_KANA SETVAR3 'V' # ひ CALL _subSendKana endfunc # func _SELTABLE 'L' ALLOCVSTATE 0 SETVAR0 MOD_KANA SETVAR1 'Z' # つ SETVAR2 MOD_KANA SETVAR3 'M' # も CALL _subSendKana endfunc #------------------------------------------------------------------------------ # func _SELTABLE 'Z' ALLOCVSTATE 0 SETVAR0 MOD_KANA SETVAR1 VK_COMMA # ね SETVAR2 MOD_KANA SETVAR3 'P' # せ CALL _subSendKana endfunc # func _SELTABLE 'X' ALLOCVSTATE 0 SETVAR0 MOD_KANASHIFT SETVAR1 'U' # な SETVAR2 MOD_KANA SETVAR3 'R' # す CALL _subSendKana endfunc # func _SELTABLE 'C' ALLOCVSTATE 0 SETVAR0 MOD_KANA SETVAR1 'O' # ら SETVAR2 MOD_KANA SETVAR3 'Y' # ん CALL _subSendKana endfunc # func _SELTABLE 'V' ALLOCVSTATE 0 SETVAR0 MOD_KANA SETVAR1 VK_RBRACKET # む SETVAR2 MOD_KANASHIFT SETVAR3 'Z' # っ CALL _subSendKana endfunc # func _SELTABLE 'B' ALLOCVSTATE 0 SETVAR0 MOD_KANA SETVAR1 '4' # う SETVAR2 MOD_KANASHIFT SETVAR3 '3' # ぁ CALL _subSendKana endfunc # func _SELTABLE 'N' ALLOCVSTATE 0 SETVAR0 MOD_KANASHIFT SETVAR1 'E' # ぃ SETVAR2 MOD_KANASHIFT SETVAR3 '4' # ぅ CALL _subSendKana endfunc # func _SELTABLE 'M' ALLOCVSTATE 0 SETVAR0 MOD_KANA SETVAR1 'K' # の SETVAR2 MOD_KANASHIFT SETVAR3 '6' # ぉ CALL _subSendKana endfunc #------------------------------------------------------------------------------ # 濁点、半濁点用のスペシャル処理 # [;,] キー # ',' = そのまま # ';' = Shift 押しながら # '>' = Shift 一度離してから。IME On では「゛」 # '[' = Ctrl 押しながら # '{' = Shift 一度離して Ctrl 押しながら func TABLE_KANA VK_COMMA SETVAR0 0x40 # , SETVAR1 0x51 # ゛(濁点) <= ここだけ置き換え SETVAR2 0x42 # [ SETVAR3 0x43 # { CALL _subSymbolKey endfunc func TABLE_FUNC 0x51 SETMODIFIER MOD_KANA SENDKEY VK_BACKQUOTE # 濁点 RETURN 0 endfunc # [:.] キー # '.' = そのまま # ':' = Shift 押しながら # '>' = Shift 一度離してから。IME On では「゜」 # ']' = Ctrl 押しながら # '}' = Shift 一度離して Ctrl 押しながら func TABLE_KANA VK_PERIOD SETVAR0 0x44 # . SETVAR1 0x55 # ゜(半濁点) <= ここだけ置き換え SETVAR2 0x46 # ] SETVAR3 0x47 # } CALL _subSymbolKey endfunc func TABLE_FUNC 0x55 RAWUP VK_SHIFT SETMODIFIER MOD_KANA SENDKEY VK_LBRACKET # ゜(半濁点) RAWDOWN VK_SHIFT RETURN 0 endfunc # [;] キー、Shift 同時押しの濁点用 # Shift押してから離した場合も同時押しも同じ文字を打てるようにするためのパッチ func TABLE_KANA VK_SEMICOLON ALLOCVSTATE 0 CALL _subTestIME SETMODIFIER MOD_KANA SENDKEY VK_BACKQUOTE # 濁点 EXIT TRUE endfunc # [:] キー Shift同時押しの半濁点用 # Shift押してから離した場合も同時押しも同じ文字を打てるようにするためのパッチ func TABLE_KANA VK_APOSTROPHE ALLOCVSTATE 0 CALL _subTestIME RAWUP VK_SHIFT SETMODIFIER MOD_KANA SENDKEY VK_LBRACKET # ゜(半濁点) RAWDOWN VK_SHIFT EXIT TRUE endfunc #------------------------------------------------------------------------------ # 「いろは配列」ここまで #------------------------------------------------------------------------------