# 2007/04/24 Hiroyuki Ogasawara # vim:ts=4 sw=4: # em1key script file # http://www.vector.co.jp/authors/VA004474/ # 「EM・ONE 向けカスタム設定」 # 数字キー列[0]〜[9]にさまざまな機能を割り当てます。 # W-ZERO3 でも動きます。 # 2007/09/29 RBK-2000BT2 用設定を追加 (追加部はファイル最後に独立している) # 2007/05/04 新命令追加、v1.21 ヘルプ命令対応 # 2007/04/29 新命令追加、Ctrl + カーソル時 の問題修正 # このファイルはバージョン更新時に上書きされる可能性があります。 # 書き換えて使っている場合は更新前に必ずバックアップを取っておくように # してください。 # vim:ts=4 sw=4: #------------------------------------------------------------------------------ # system 用共通シンボル定義ヘッダ #------------------------------------------------------------------------------ # ここは書き換えないでください # system ヘッダ部分の最終更新日 2007/05/15 # script の詳しい説明はこちらです。 # http://flatlib.main.jp/dench/vec/more/em1keyscript.txt # opcode #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 PUSHIMM 47 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 MULVAR 74 define DIVVAR 75 define MODVAR 76 define SLVAR 77 define SRVAR 78 define CMPVAR_EQ 79 define CMPVAR_LT 80 define CMPVAR_GT 81 define CALLVARDEF 82 define CALLVAREXT 83 define SETHELP 84 # constant 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 # GVAR define GVAR_SAVETIME 33 define GVAR_DIFFTIME 34 define GVAR_MODIFIER 35 define GVAR_KEYCODE 37 define GVAR_EVENTTIME 38 define GVAR_TABLE 40 # 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_EXT 4 define TABLE_KANA 4 define TABLE_ALLMODE 6 define TABLEID_FUNC 0 define TABLEID_DEFAULT 1 define TABLEID_EXT 2 # 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 define SYSFLAG_SCANVALID 17 define SYSFLAG_SCANANY 18 # 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_CLEAR 0x0c define VK_RETURN 0x0d # [Enter] define VK_SHIFT 0x10 # [Shift] define VK_CONTROL 0x11 # [Ctrl] define VK_MENU 0x12 # [ALT](CE) define VK_PAUSE 0x13 define VK_CAPITAL 0x14 define VK_KANA 0x15 define VK_KANJI 0x19 # [Kanji] define VK_ESCAPE 0x1b # [ESC] define VK_CONVERT 0x1c # [変換] define VK_NCONVERT 0x1d # [無変換] define VK_SPACE 0x20 # [Space] define VK_PRIOR 0x21 # [PageUp] define VK_NEXT 0x22 # [PageDown] define VK_END 0x23 # [End] define VK_HOME 0x24 # [Home] 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 # [PrintScreen] define VK_INSERT 0x2d define VK_DELETE 0x2e # [Del] define VK_HELP 0x2f # '0'〜'9' 'A'〜'Z' はそのまま記述します define VK_LWIN 0x5b # [Win] define VK_RWIN 0x5c # RWIN define VK_F1 0x70 # 左SoftKey define VK_F2 0x71 # 右SoftKey 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_NUMLOCK 0x90 define VK_SCROLL 0x91 # [ScrollLock] define VK_LSHIFT 0xa0 # pc only define VK_RSHIFT 0xa1 # pc only define VK_LCONTROL 0xa2 # pc only define VK_RCONTROL 0xa3 # pc only define VK_LMENU 0xa4 # [ALT] define VK_RMENU 0xa5 ifce define VK_SEMICOLON 0xba # CE keyb [;+] define VK_EQUAL 0xbb # CE keyb [^~] define VK_APOSTROPHE 0xde # CE keyb [:*] endif ifpc define VK_OEM_1 0xba # PC [:*] define VK_OEM_PLUS 0xbb # PC [;+] define VK_OEM_MINUS 0xbd # PC [-=] define VK_OEM_7 0xde # PC [^~] define VK_SEMICOLON 0xbb # PC [;+] (CE互換用) define VK_EQUAL 0xde # PC [^~] (CE互換用) define VK_APOSTROPHE 0xba # PC [:*] (CE互換用) endif define VK_HYPHEN 0xbd # [-=] define VK_COMMA 0xbc # [,;] 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 # []}] (us:\|) define VK_APOSTROPHE 0xde # define VK_OFF 0xdf # define VK_OEM_102 0xe2 # [ _] define VK_DBE_ALPHANUMERIC 0xf0 # [英数/Caps] define VK_DBE_KATAKANA 0xf1 # define VK_DBE_HIRAGANA 0xf2 # [かな] define VK_DBE_SBCSCHAR 0xf3 # [半] define VK_DBE_DBCSCHAR 0xf4 # [全] define VK_DBE_ROMAN 0xf5 # define VK_DBE_NOROMAN 0xf6 # #------------------------------------------------------------------------------ # system 用シンボル定義ヘッダここまで #------------------------------------------------------------------------------ #------------------------------------------------------------------------------ # ここからスクリプトのプログラム開始 #------------------------------------------------------------------------------ #------------------------------------------------------------------------------ # 「EM・ONE 向けカスタム設定」 #------------------------------------------------------------------------------ #------------------------------------------------------------------------------ # 数値定義 #------------------------------------------------------------------------------ # この数値を書き換えることで長押し時の判定時間を変えることができます。 # 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_EXT SETTABLE 1 # タイトル&ヘルプ設定 string 0 "EM・ONE(S01SH)向けカスタム設定" SETHELP 0 string 0 " 数値入力は[0]〜[9]長押し(Ctrl+数字でもOK)" SETHELP 1 string 0 " [3]=左ソフトキー [0]=右ソフトキー" SETHELP 2 string 0 " [2]=Win [9]=OK [4]=ALT [5]=Task切替" SETHELP 3 string 0 " Ctrl+[;.]=[ Ctrl+[:.]=] Ctrl+[=-]=NumLock" SETHELP 4 string 0 " Shift,Ctrl+[=-]=アプリ終了 詳細はマニュアルを!" SETHELP 5 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 TESTSYSFLAG SYSFLAG_SCANVALID IF_TRUE 20 TESTSYSFLAG SYSFLAG_CTRLSWAP IF_TRUE 30 LABEL 20 # # [Ctrl]キーとして実行 IF_UP 10 # down SETGSTATE STATE_CTRL EXIT FALSE LABEL 10 # up RESETGSTATE STATE_CTRL EXIT FALSE LABEL 30 # Ctrl swap IF_UP 40 RAWDOWN VK_DBE_ALPHANUMERIC EXIT TRUE LABEL 40 RAWUP VK_DBE_ALPHANUMERIC EXIT TRUE endfunc # [英数] func TABLE_ALLMODE VK_DBE_ALPHANUMERIC TESTSYSFLAG SYSFLAG_SCANVALID IF_TRUE 20 TESTSYSFLAG SYSFLAG_CTRLSWAP IF_TRUE 30 LABEL 20 # Ctrl swap しない EXIT FALSE LABEL 30 # # Ctrl キーとして実行 IF_UP 10 # down SETGSTATE STATE_CTRL RAWDOWN VK_CONTROL EXIT TRUE LABEL 10 # up RESETGSTATE STATE_CTRL RAWUP VK_CONTROL EXIT TRUE endfunc # [ESC] func TABLE_ALLMODE VK_ESCAPE TESTSYSFLAG SYSFLAG_SCANVALID IF_TRUE 20 TESTSYSFLAG SYSFLAG_ESCSWAP IF_TRUE 30 LABEL 20 # ESC swap しない EXIT FALSE LABEL 30 # # 全/半 キーとして実行 IF_UP 10 # down RAWDOWN VK_DBE_SBCSCHAR EXIT TRUE LABEL 10 # up RAWUP VK_DBE_SBCSCHAR EXIT TRUE endfunc # [全/半] func TABLE_ALLMODE VK_DBE_SBCSCHAR TESTSYSFLAG SYSFLAG_SCANVALID IF_TRUE 20 TESTSYSFLAG SYSFLAG_ESCSWAP IF_TRUE 30 LABEL 20 # ESC swap しない EXIT FALSE LABEL 30 # # ESC キーとして実行 IF_UP 10 # down RAWDOWN VK_ESCAPE EXIT TRUE LABEL 10 # up RAWUP VK_ESCAPE EXIT TRUE 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 # 内蔵キーボードじゃなければ素通り TESTSYSFLAG SYSFLAG_SCANVALID 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 RAWUP VK_CONTROL # Ctrl 押下状態をキャンセルする SENDVAR 0 RAWDOWN VK_CONTROL 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]〜[right] の SETVAR0 のところを書き換えると、 # Ctrl+カーソルキー時の動作を変更することができます。 # [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 #----------------------------------------------------------------------------- # 「EM・ONE 向けカスタム設定」ここまで #----------------------------------------------------------------------------- #----------------------------------------------------------------------------- # RBK-2000BT2 用追加カスタマイズ #----------------------------------------------------------------------------- # 2007/09/29 # [0] (Shift+0 で '_' 入力) default の設定を上書き func TABLE_ALLMODE '0' TESTSYSFLAG SYSFLAG_SCANVALID IF_TRUE 20 IF_SHIFT 30 EXIT FALSE LABEL 30 IF_UP 40 RAWDOWN VK_OEM_102 EXIT TRUE LABEL 40 RAWUP VK_OEM_102 EXIT TRUE LABEL 20 ALLOCVSTATE 0 SETVAR0 0x20 SETVAR1 0x30 SETVAR2 0x30 CALL _subNumKey endfunc # [半] func TABLE_ALLMODE VK_DBE_SBCSCHAR TESTSYSFLAG SYSFLAG_SCANVALID IF_TRUE 20 TESTSYSFLAG SYSFLAG_ESCSWAP IF_TRUE 30 LABEL 20 # ESC swap しない EXIT FALSE LABEL 30 # # ESC キーとして実行 IF_UP 10 # down RAWDOWN VK_ESCAPE EXIT TRUE LABEL 10 # up RAWUP VK_ESCAPE EXIT TRUE endfunc # [全] func TABLE_ALLMODE VK_DBE_DBCSCHAR TESTSYSFLAG SYSFLAG_SCANVALID IF_TRUE 20 TESTSYSFLAG SYSFLAG_ESCSWAP IF_TRUE 30 LABEL 20 # ESC swap しない EXIT FALSE LABEL 30 # # ESC キーとして実行 IF_UP 10 # down RAWDOWN VK_ESCAPE EXIT TRUE LABEL 10 # up RAWUP VK_ESCAPE EXIT TRUE endfunc # [Delete] (Deleteキーを [\|] にする) func TABLE_ALLMODE VK_DELETE TESTSYSFLAG SYSFLAG_SCANVALID IF_TRUE 20 # [\|] IF_UP 40 RAWDOWN VK_BACKSLASH EXIT TRUE LABEL 40 RAWUP VK_BACKSLASH EXIT TRUE LABEL 20 EXIT FALSE endfunc # [BS] (Ctrl+[BS] で [Delete] キーになる) func TABLE_ALLMODE VK_BACK TESTSYSFLAG SYSFLAG_SCANVALID IF_TRUE 20 IF_CTRL 10 LABEL 20 EXIT FALSE # [DELETE] LABEL 10 IF_UP 40 RAWUP VK_CONTROL RAWDOWN VK_DELETE EXIT TRUE LABEL 40 RAWUP VK_CONTROL RAWUP VK_DELETE EXIT TRUE endfunc # [:*] (Ctrl + [:*] で '_' を入力できるようにする) func TABLE_ALLMODE VK_APOSTROPHE TESTSYSFLAG SYSFLAG_SCANVALID IF_TRUE 20 IF_CTRL 10 LABEL 20 EXIT FALSE # [_] LABEL 10 IF_UP 40 RAWUP VK_CONTROL RAWDOWN VK_SHIFT RAWDOWN VK_OEM_102 EXIT TRUE LABEL 40 RAWUP VK_CONTROL RAWUP VK_OEM_102 RAWUP VK_SHIFT EXIT TRUE endfunc # [ALT] ( [Alt] で IME の On/Off を可能にする) func TABLE_ALLMODE VK_MENU IF_UP 40 RAWUP VK_LMENU WINCMD WINCMD_IMESW # IME の On/Off EXIT TRUE LABEL 40 EXIT TRUE endfunc # 以下 4つの設定で、[/?] キーの位置を変更して本来の場所になる。 # その代わりカーソルキーが横一列(vi配列)になる。 # # [>.] [↑] [Sft] [/?] # [←] [↓] [→] [Del] # ↓ # [>.] [/?] [Sft] [\|] # [←] [↓] [↑] [→ ] # [Delete] (Delete キーを [→] に変更) func TABLE_ALLMODE VK_DELETE TESTSYSFLAG SYSFLAG_SCANVALID IF_TRUE 20 # [\|] IF_UP 40 RAWDOWN VK_RIGHT EXIT TRUE LABEL 40 RAWUP VK_RIGHT EXIT TRUE LABEL 20 EXIT FALSE endfunc # [↑] (↑ を [/?] キーにする) func TABLE_ALLMODE VK_UP TESTSYSFLAG SYSFLAG_SCANVALID IF_TRUE 20 IF_UP 40 RAWDOWN VK_SLASH EXIT TRUE LABEL 40 RAWUP VK_SLASH EXIT TRUE LABEL 20 EXIT FALSE endfunc # [/] ([/?] を [\|] キーにする) func TABLE_ALLMODE VK_SLASH TESTSYSFLAG SYSFLAG_SCANVALID IF_TRUE 20 IF_UP 40 RAWDOWN VK_BACKSLASH EXIT TRUE LABEL 40 RAWUP VK_BACKSLASH EXIT TRUE LABEL 20 EXIT FALSE endfunc # [→] ([→] を [↑] キーにする) func TABLE_ALLMODE VK_RIGHT TESTSYSFLAG SYSFLAG_SCANVALID IF_TRUE 20 IF_UP 40 RAWDOWN VK_UP EXIT TRUE LABEL 40 RAWUP VK_UP EXIT TRUE LABEL 20 EXIT FALSE endfunc #----------------------------------------------------------------------------- # プログラム起動設定例 # string 0 "\Program Files\bin\easydial.exe" # EXEC 0 #-----------------------------------------------------------------------------