--- /dev/null
+#include "KeyString.h"\r
+#include "../xkeymacsdll/defs.h"\r
+\r
+static const struct {\r
+ UINT Type;\r
+ LPCTSTR Name;\r
+} Types[] = {\r
+ {CONTROLX, _T("Ctrl+X ")},\r
+ {CONTROL, _T("Ctrl+")},\r
+ {META, _T("Meta+")},\r
+ {SHIFT, _T("Shift+")},\r
+};\r
+\r
+static LPCTSTR Keys[] = {\r
+ _T(""), // 0\r
+ _T("Left mouse button"), // VK_LBUTTON\r
+ _T("Right mouse button"), // VK_RBUTTON\r
+ _T("Break"), // VK_CANCEL\r
+ _T("Middle mouse button"), // VK_MBUTTON\r
+ _T("X1 mouse button"), // VK_XBUTTON1\r
+ _T("X2 mouse button"), // VK_XBUTTON2\r
+ _T("Undefined"), // 0x07\r
+ _T("Backspace"), // VK_BACK\r
+ _T("Tab"), // VK_TAB\r
+ _T("Reserved"), // 0x0a\r
+ _T("Reserved"), // 0x0b\r
+ _T("Clear"), // VK_CLEAR\r
+ _T("Enter"), // VK_RETURN\r
+ _T("Undefined"), // 0x0e\r
+ _T("Undefined"), // 0x0f\r
+ _T("Shift"), // VK_SHIFT\r
+ _T("Ctrl"), // VK_CONTROL\r
+ _T("Alt"), // VK_MENU\r
+ _T("Pause"), // VK_PAUSE\r
+ _T("Caps Lock"), // VK_CAPITAL\r
+ _T("Kana"), // VK_KANA {VK_HANGUEL, "Hanguel"}, {VK_HANGUL, "Hangul"} \r
+ _T("Undefined"), // 0x16\r
+ _T("Junja"), // VK_JUNJA\r
+ _T("Final"), // VK_FINAL\r
+ _T("Kanji"), //VK_KANJI {VK_HANJA, "Hanja"}\r
+ _T("Undefined"), // 0x1a\r
+ _T("Esc"), // VK_ESCAPE\r
+ _T("Convert"), // VK_CONVERT \95Ï\8a·\r
+ _T("Nonconvert"), // VK_NONCONVERT \96³\95Ï\8a·\r
+ _T("Accept"), // VK_ACCEPT\r
+ _T("Mode change"), // VK_MODECHANGE\r
+ _T("Space"), // VK_SPACE\r
+ _T("Page Up"), // VK_PRIOR\r
+ _T("Page Down"), // VK_NEXT\r
+ _T("End"), // VK_END\r
+ _T("Home"), // VK_HOME\r
+ _T("Left"), // VK_LEFT\r
+ _T("Up"), // VK_UP\r
+ _T("Right"), // VK_RIGHT\r
+ _T("Down"), // VK_DOWN\r
+ _T("Select"), // VK_SELECT\r
+ _T("Print"), // VK_PRINT\r
+ _T("Execute"), // VK_EXECUTE\r
+ _T("Print Screen"), // VK_SNAPSHOT\r
+ _T("Ins"), // VK_INSERT\r
+ _T("Del"), // VK_DELETE\r
+ _T("Help"), // VK_HELP\r
+ _T("0"), // '0'\r
+ _T("1"), // '1'\r
+ _T("2"), // '2'\r
+ _T("3"), // '3'\r
+ _T("4"), // '4'\r
+ _T("5"), // '5'\r
+ _T("6"), // '6'\r
+ _T("7"), // '7'\r
+ _T("8"), // '8'\r
+ _T("9"), // '9'\r
+ _T("Undefined"), // 0x3a\r
+ _T("Undefined"), // 0x3b\r
+ _T("Undefined"), // 0x3c\r
+ _T("Undefined"), // 0x3d\r
+ _T("Undefined"), // 0x3e\r
+ _T("Undefined"), // 0x3f\r
+ _T("Undefined"), // 0x40\r
+ _T("A"), // 'A'\r
+ _T("B"), // 'B'\r
+ _T("C"), // 'C'\r
+ _T("D"), // 'D'\r
+ _T("E"), // 'E'\r
+ _T("F"), // 'F'\r
+ _T("G"), // 'G'\r
+ _T("H"), // 'H'\r
+ _T("I"), // 'I'\r
+ _T("J"), // 'J'\r
+ _T("K"), // 'K'\r
+ _T("L"), // 'L'\r
+ _T("M"), // 'M'\r
+ _T("N"), // 'N'\r
+ _T("O"), // 'O'\r
+ _T("P"), // 'P'\r
+ _T("Q"), // 'Q'\r
+ _T("R"), // 'R'\r
+ _T("S"), // 'S'\r
+ _T("T"), // 'T'\r
+ _T("U"), // 'U'\r
+ _T("V"), // 'V'\r
+ _T("W"), // 'W'\r
+ _T("X"), // 'X'\r
+ _T("Y"), // 'Y'\r
+ _T("Z"), // 'Z'\r
+ _T("Left Windows"), // VK_LWIN\r
+ _T("Right Windows"), // VK_RWIN\r
+ _T("Application"), // VK_APPS\r
+ _T("Reserved"), // 0x5e\r
+ _T("Sleep"), // VK_SLEEP\r
+ _T("Num 0"), // VK_NUMPAD0\r
+ _T("Num 1"), // VK_NUMPAD1\r
+ _T("Num 2"), // VK_NUMPAD2\r
+ _T("Num 3"), // VK_NUMPAD3\r
+ _T("Num 4"), // VK_NUMPAD4\r
+ _T("Num 5"), // VK_NUMPAD5\r
+ _T("Num 6"), // VK_NUMPAD6\r
+ _T("Num 7"), // VK_NUMPAD7\r
+ _T("Num 8"), // VK_NUMPAD8\r
+ _T("Num 9"), // VK_NUMPAD9\r
+ _T("Num *"), // VK_MULTIPLY\r
+ _T("Num +"), // VK_ADD\r
+ _T("Separator"), // VK_SEPARATOR\r
+ _T("Num -"), // VK_SUBTRACT\r
+ _T("Num ."), // VK_DECIMAL\r
+ _T("Num /"), // VK_DIVIDE\r
+ _T("F1"), // VK_F1\r
+ _T("F2"), // VK_F2\r
+ _T("F3"), // VK_F3\r
+ _T("F4"), // VK_F4\r
+ _T("F5"), // VK_F5\r
+ _T("F6"), // VK_F6\r
+ _T("F7"), // VK_F7\r
+ _T("F8"), // VK_F8\r
+ _T("F9"), // VK_F9\r
+ _T("F10"), // VK_F10\r
+ _T("F11"), // VK_F11\r
+ _T("F12"), // VK_F12\r
+ _T("F13"), // VK_F13\r
+ _T("F14"), // VK_F14\r
+ _T("F15"), // VK_F15\r
+ _T("F16"), // VK_F16\r
+ _T("F17"), // VK_F17\r
+ _T("F18"), // VK_F18\r
+ _T("F19"), // VK_F19\r
+ _T("F20"), // VK_F20\r
+ _T("F21"), // VK_F21\r
+ _T("F22"), // VK_F22\r
+ _T("F23"), // VK_F23\r
+ _T("F24"), // VK_F24\r
+ _T("Unassigned"), // 0x88\r
+ _T("Unassigned"), // 0x89\r
+ _T("Unassigned"), // 0x8a\r
+ _T("Unassigned"), // 0x8b\r
+ _T("Unassigned"), // 0x8c\r
+ _T("Unassigned"), // 0x8d\r
+ _T("Unassigned"), // 0x8e\r
+ _T("Unassigned"), // 0x8f\r
+ _T("Num Lock"), // VK_NUMLOCK\r
+ _T("Scroll Lock"), // VK_SCROLL\r
+ _T("OEM specific"), // 0x92\r
+ _T("OEM specific"), // 0x93\r
+ _T("OEM specific"), // 0x94\r
+ _T("OEM specific"), // 0x95\r
+ _T("OEM specific"), // 0x96\r
+ _T("Unassigned"), // 0x97\r
+ _T("Unassigned"), // 0x98\r
+ _T("Unassigned"), // 0x99\r
+ _T("Unassigned"), // 0x9a\r
+ _T("Unassigned"), // 0x9b\r
+ _T("Unassigned"), // 0x9c\r
+ _T("Unassigned"), // 0x9d\r
+ _T("Unassigned"), // 0x9e\r
+ _T("Unassigned"), // 0x9f\r
+ _T("Left Shift"), // VK_LSHIFT\r
+ _T("Right Shift"), // VK_RSHIFT\r
+ _T("Left Ctrl"), // VK_LCONTROL\r
+ _T("Right Ctrl"), // VK_RCONTROL\r
+ _T("Left Alt"), // VK_LMENU\r
+ _T("Right Alt"), // VK_RMENU\r
+ _T("Browser Back"), // VK_BROWSER_BACK\r
+ _T("Browser Forward"), // VK_BROWSER_FORWARD\r
+ _T("Browser Refresh"), // VK_BROWSER_REFRESH\r
+ _T("Browser Stop"), // VK_BROWSER_STOP\r
+ _T("Browser Search"), // VK_BROWSER_SEARCH\r
+ _T("Browser Favorites"), // VK_BROWSER_FAVORITES\r
+ _T("Browser Start"), // VK_BROWSER_HOME\r
+ _T("Volume Mute"), // VK_VOLUME_MUTE\r
+ _T("Volume Down"), // VK_VOLUME_DOWN\r
+ _T("Volume Up"), // VK_VOLUME_UP\r
+ _T("Next Track"), // VK_MEDIA_NEXT_TRACK\r
+ _T("Previous Track"), // VK_MEDIA_PREV_TRACK\r
+ _T("Stop Media"), // VK_MEDIA_STOP\r
+ _T("Play/Pause Media"), // VK_MEDIA_PLAY_PAUSE\r
+ _T("Start Mail"), // VK_LAUNCH_MAIL\r
+ _T("Select Media"), // VK_LAUNCH_MEDIA_SELECT\r
+ _T("Start Application 1"), // VK_LAUNCH_APP1\r
+ _T("Start Application 2"), // VK_LAUNCH_APP2\r
+ _T("Reserved"), // 0xb8\r
+ _T("Reserved"), // 0xb9\r
+ _T(";"), // VK_OEM_1 _T(":") for Japanese keyboard\r
+ _T("+"), // VK_OEM_PLUS _T(";") for Japanese keyboard\r
+ _T(","), // VK_OEM_COMMA\r
+ _T("-"), // VK_OEM_MINUS\r
+ _T("."), // VK_OEM_PERIOD\r
+ _T("/"), // VK_OEM_2\r
+ _T("`"), // VK_OEM_3 _T("@") for Japanese keyboard\r
+ _T("Reserved"), // 0xc1\r
+ _T("Reserved"), // 0xc2\r
+ _T("Reserved"), // 0xc3\r
+ _T("Reserved"), // 0xc4\r
+ _T("Reserved"), // 0xc5\r
+ _T("Reserved"), // 0xc6\r
+ _T("Reserved"), // 0xc7\r
+ _T("Reserved"), // 0xc8\r
+ _T("Reserved"), // 0xc9\r
+ _T("Reserved"), // 0xca\r
+ _T("Reserved"), // 0xcb\r
+ _T("Reserved"), // 0xcc\r
+ _T("Reserved"), // 0xcd\r
+ _T("Reserved"), // 0xce\r
+ _T("Reserved"), // 0xcf\r
+ _T("Reserved"), // 0xd0\r
+ _T("Reserved"), // 0xd1\r
+ _T("Reserved"), // 0xd2\r
+ _T("Reserved"), // 0xd3\r
+ _T("Reserved"), // 0xd4\r
+ _T("Reserved"), // 0xd5\r
+ _T("Reserved"), // 0xd6\r
+ _T("Reserved"), // 0xd7\r
+ _T("Unassigned"), // 0xd8\r
+ _T("Unassigned"), // 0xd9\r
+ _T("Unassigned"), // 0xda\r
+ _T("["), // VK_OEM_4\r
+ _T("Backslash"), // VK_OEM_5\r
+ _T("]"), // VK_OEM_6\r
+ _T("'"), // VK_OEM_7\r
+ _T("OEM specific"), // VK_OEM_8\r
+ _T("Reserved"), // 0xe0\r
+ _T("OEM specific"), // 0xe1\r
+ _T("Backslash for 106 keyboard"), // VK_OEM_102\r
+ _T("OEM specific"), // 0xe3\r
+ _T("OEM specific"), // 0xe4\r
+ _T("Process"), // VK_PROCESSKEY\r
+ _T("OEM specific"), // 0xe6\r
+ _T("Packet"), // VK_PACKET\r
+ _T("Unassigned"), // 0xe8\r
+ _T("OEM specific"), // 0xe9\r
+ _T("OEM specific"), // 0xea\r
+ _T("OEM specific"), // 0xeb\r
+ _T("OEM specific"), // 0xec\r
+ _T("OEM specific"), // 0xed\r
+ _T("OEM specific"), // 0xee\r
+ _T("OEM specific"), // 0xef\r
+ _T("Eisu"), // 0xf0 // \89p\90\94\r
+ _T("OEM specific"), // 0xf1\r
+ _T("Hiragana"), // 0xf2 \82Ð\82ç\82ª\82È\r
+ _T("Hankaku/Zenkaku 0xf3"), // 0xf3 "\94¼\8ap/\91S\8ap"\r
+ _T("Hankaku/Zenkaku 0xf4"), // 0xf4 "\94¼\8ap/\91S\8ap"\r
+ _T("OEM specific"), // 0xf5\r
+ _T("Attn"), // VK_ATTN\r
+ _T("CrSel"), // VK_CRSEL\r
+ _T("ExSel"), // VK_EXSEL\r
+ _T("Erace EOF"), // VK_EREOF\r
+ _T("Play"), // VK_PLAY\r
+ _T("Zoom"), // VK_ZOOM\r
+ _T("Noname"), // VK_NONAME\r
+ _T("PA1"), // VK_PA1\r
+ _T("OEM Clear"), // VK_OEM_CLEAR\r
+ _T("Fn"), // 0xff\r
+};\r
+\r
+KeyString::KeyString(bool is106Keyboard)\r
+{\r
+ if (!is106Keyboard)\r
+ return;\r
+ Keys[0xba] = _T(":");\r
+ Keys[0xbb] = _T(";");\r
+ Keys[0xc0] = _T("@");\r
+ Keys[0xde] = _T("^");\r
+}\r
+\r
+CString KeyString::ToString(int type, int key)\r
+{\r
+ CString str;\r
+ for (int i = 0; i < _countof(Types); ++i)\r
+ if ((type & Types[i].Type) != 0)\r
+ str += Types[i].Name;\r
+ str += Keys[key];\r
+ return str;\r
+}\r
+\r
+void KeyString::ToKey(LPCTSTR str, int& type, int& key)\r
+{\r
+ CString s(str);\r
+ type = NONE;\r
+ for (int i = 0; i < _countof(Types); ++i)\r
+ if (s.Find(Types[i].Name) == 0) {\r
+ type |= Types[i].Type;\r
+ s.Delete(0, static_cast<int>(_tcslen(Types[i].Name)));\r
+ }\r
+ key = 0;\r
+ for (int i = 1; i < 256; ++i)\r
+ if (s == Keys[i]) {\r
+ key = i;\r
+ break;\r
+ }\r
+}\r
#define new DEBUG_NEW\r
#endif\r
\r
-struct CommandTypeName\r
-{\r
- int nType;\r
- LPCTSTR szName;\r
-};\r
-\r
-static const CommandTypeName CommandTypes[] = {\r
- {NONE, _T("")},\r
- {SHIFT, _T("Shift+")},\r
- {CONTROL, _T("Ctrl+")},\r
- {CONTROL+SHIFT, _T("Ctrl+Shift+")},\r
- {META, _T("Meta+")},\r
- {META+SHIFT, _T("Meta+Shift+")},\r
- {CONTROL+META, _T("Ctrl+Meta+")},\r
- {CONTROL+META+SHIFT, _T("Ctrl+Meta+Shift+")},\r
- {CONTROLX+NONE, _T("Ctrl+X ")},\r
- {CONTROLX+SHIFT, _T("Ctrl+X Shift+")},\r
- {CONTROLX+CONTROL, _T("Ctrl+X Ctrl+")},\r
- {CONTROLX+CONTROL+SHIFT, _T("Ctrl+X Ctrl+Shift+")},\r
- {CONTROLX+META, _T("Ctrl+X Meta+")},\r
- {CONTROLX+META+SHIFT, _T("Ctrl+X Meta+Shift+")},\r
- {CONTROLX+CONTROL+META, _T("Ctrl+X Ctrl+Meta+")},\r
- {CONTROLX+CONTROL+META+SHIFT, _T("Ctrl+X Ctrl+Meta+Shift+")},\r
-};\r
-\r
-static const KeyName KeyNames[] = {\r
- {0, _T("")},\r
- {VK_LBUTTON, _T("Left mouse button")},\r
- {VK_RBUTTON, _T("Right mouse button")},\r
- {VK_CANCEL, _T("Break")},\r
- {VK_MBUTTON, _T("Middle mouse button")},\r
- {0x05, _T("X1 mouse button")}, // VK_XBUTTON1\r
- {0x06, _T("X2 mouse button")}, // VK_XBUTTON2\r
- {0x07, _T("Undefined")},\r
- {VK_BACK, _T("Backspace")},\r
- {VK_TAB, _T("Tab")},\r
- {0x0a, _T("Reserved")},\r
- {0x0b, _T("Reserved")},\r
- {VK_CLEAR, _T("Clear")},\r
- {VK_RETURN, _T("Enter")},\r
- {0x0e, _T("Undefined")},\r
- {0x0f, _T("Undefined")},\r
- {VK_SHIFT, _T("Shift")},\r
- {VK_CONTROL, _T("Ctrl")},\r
- {VK_MENU, _T("Alt")},\r
- {VK_PAUSE, _T("Pause")},\r
- {VK_CAPITAL, _T("Caps Lock")},\r
- {VK_KANA, _T("Kana")}, // {VK_HANGUEL, "Hanguel"}, {VK_HANGUL, "Hangul"},\r
- {0x16, _T("Undefined")},\r
- {VK_JUNJA, _T("Junja")},\r
- {VK_FINAL, _T("Final")},\r
- {VK_KANJI, _T("Kanji")}, // {VK_HANJA, "Hanja"},\r
- {0x1a, _T("Undefined")},\r
- {VK_ESCAPE, _T("Esc")},\r
- {VK_CONVERT, _T("Convert")}, // \95Ï\8a·\r
- {VK_NONCONVERT, _T("Nonconvert")}, // \96³\95Ï\8a·\r
- {VK_ACCEPT, _T("Accept")},\r
- {VK_MODECHANGE, _T("Mode change")},\r
- {VK_SPACE, _T("Space")},\r
- {VK_PRIOR, _T("Page Up")},\r
- {VK_NEXT, _T("Page Down")},\r
- {VK_END, _T("End")},\r
- {VK_HOME, _T("Home")},\r
- {VK_LEFT, _T("Left")},\r
- {VK_UP, _T("Up")},\r
- {VK_RIGHT, _T("Right")},\r
- {VK_DOWN, _T("Down")},\r
- {VK_SELECT, _T("Select")},\r
- {VK_PRINT, _T("Print")},\r
- {VK_EXECUTE, _T("Execute")},\r
- {VK_SNAPSHOT, _T("Print Screen")},\r
- {VK_INSERT, _T("Ins")},\r
- {VK_DELETE, _T("Del")},\r
- {VK_HELP, _T("Help")},\r
- {'0', _T("0")},\r
- {'1', _T("1")},\r
- {'2', _T("2")},\r
- {'3', _T("3")},\r
- {'4', _T("4")},\r
- {'5', _T("5")},\r
- {'6', _T("6")},\r
- {'7', _T("7")},\r
- {'8', _T("8")},\r
- {'9', _T("9")},\r
- {0x3a, _T("Undefined")},\r
- {0x3b, _T("Undefined")},\r
- {0x3c, _T("Undefined")},\r
- {0x3d, _T("Undefined")},\r
- {0x3e, _T("Undefined")},\r
- {0x3f, _T("Undefined")},\r
- {0x40, _T("Undefined")},\r
- {'A', _T("A")},\r
- {'B', _T("B")},\r
- {'C', _T("C")},\r
- {'D', _T("D")},\r
- {'E', _T("E")},\r
- {'F', _T("F")},\r
- {'G', _T("G")},\r
- {'H', _T("H")},\r
- {'I', _T("I")},\r
- {'J', _T("J")},\r
- {'K', _T("K")},\r
- {'L', _T("L")},\r
- {'M', _T("M")},\r
- {'N', _T("N")},\r
- {'O', _T("O")},\r
- {'P', _T("P")},\r
- {'Q', _T("Q")},\r
- {'R', _T("R")},\r
- {'S', _T("S")},\r
- {'T', _T("T")},\r
- {'U', _T("U")},\r
- {'V', _T("V")},\r
- {'W', _T("W")},\r
- {'X', _T("X")},\r
- {'Y', _T("Y")},\r
- {'Z', _T("Z")},\r
- {VK_LWIN, _T("Left Windows")},\r
- {VK_RWIN, _T("Right Windows")},\r
- {VK_APPS, _T("Application")},\r
- {0x5e, _T("Reserved")},\r
- {0x5f, _T("Sleep")}, // VK_SLEEP\r
- {VK_NUMPAD0, _T("Num 0")},\r
- {VK_NUMPAD1, _T("Num 1")},\r
- {VK_NUMPAD2, _T("Num 2")},\r
- {VK_NUMPAD3, _T("Num 3")},\r
- {VK_NUMPAD4, _T("Num 4")},\r
- {VK_NUMPAD5, _T("Num 5")},\r
- {VK_NUMPAD6, _T("Num 6")},\r
- {VK_NUMPAD7, _T("Num 7")},\r
- {VK_NUMPAD8, _T("Num 8")},\r
- {VK_NUMPAD9, _T("Num 9")},\r
- {VK_MULTIPLY, _T("Num *")},\r
- {VK_ADD, _T("Num +")},\r
- {VK_SEPARATOR, _T("Separator")},\r
- {VK_SUBTRACT, _T("Num -")},\r
- {VK_DECIMAL, _T("Num .")},\r
- {VK_DIVIDE, _T("Num /")},\r
- {VK_F1, _T("F1")},\r
- {VK_F2, _T("F2")},\r
- {VK_F3, _T("F3")},\r
- {VK_F4, _T("F4")},\r
- {VK_F5, _T("F5")},\r
- {VK_F6, _T("F6")},\r
- {VK_F7, _T("F7")},\r
- {VK_F8, _T("F8")},\r
- {VK_F9, _T("F9")},\r
- {VK_F10, _T("F10")},\r
- {VK_F11, _T("F11")},\r
- {VK_F12, _T("F12")},\r
- {VK_F13, _T("F13")},\r
- {VK_F14, _T("F14")},\r
- {VK_F15, _T("F15")},\r
- {VK_F16, _T("F16")},\r
- {VK_F17, _T("F17")},\r
- {VK_F18, _T("F18")},\r
- {VK_F19, _T("F19")},\r
- {VK_F20, _T("F20")},\r
- {VK_F21, _T("F21")},\r
- {VK_F22, _T("F22")},\r
- {VK_F23, _T("F23")},\r
- {VK_F24, _T("F24")},\r
- {0x88, _T("Unassigned")},\r
- {0x89, _T("Unassigned")},\r
- {0x8a, _T("Unassigned")},\r
- {0x8b, _T("Unassigned")},\r
- {0x8c, _T("Unassigned")},\r
- {0x8d, _T("Unassigned")},\r
- {0x8e, _T("Unassigned")},\r
- {0x8f, _T("Unassigned")},\r
- {VK_NUMLOCK, _T("Num Lock")},\r
- {VK_SCROLL, _T("Scroll Lock")},\r
- {0x92, _T("OEM specific")},\r
- {0x93, _T("OEM specific")},\r
- {0x94, _T("OEM specific")},\r
- {0x95, _T("OEM specific")},\r
- {0x96, _T("OEM specific")},\r
- {0x97, _T("Unassigned")},\r
- {0x98, _T("Unassigned")},\r
- {0x99, _T("Unassigned")},\r
- {0x9a, _T("Unassigned")},\r
- {0x9b, _T("Unassigned")},\r
- {0x9c, _T("Unassigned")},\r
- {0x9d, _T("Unassigned")},\r
- {0x9e, _T("Unassigned")},\r
- {0x9f, _T("Unassigned")},\r
- {VK_LSHIFT, _T("Left Shift")},\r
- {VK_RSHIFT, _T("Right Shift")},\r
- {VK_LCONTROL, _T("Left Ctrl")},\r
- {VK_RCONTROL, _T("Right Ctrl")},\r
- {VK_LMENU, _T("Left Alt")},\r
- {VK_RMENU, _T("Right Alt")},\r
- {0xa6, _T("Browser Back")}, // VK_BROWSER_BACK\r
- {0xa7, _T("Browser Forward")}, // VK_BROWSER_FORWARD\r
- {0xa8, _T("Browser Refresh")}, // VK_BROWSER_REFRESH\r
- {0xa9, _T("Browser Stop")}, // VK_BROWSER_STOP\r
- {0xaa, _T("Browser Search")}, // VK_BROWSER_SEARCH\r
- {0xab, _T("Browser Favorites")}, // VK_BROWSER_FAVORITES\r
- {0xac, _T("Browser Start")}, // VK_BROWSER_HOME\r
- {0xad, _T("Volume Mute")}, // VK_VOLUME_MUTE\r
- {0xae, _T("Volume Down")}, // VK_VOLUME_DOWN\r
- {0xaf, _T("Volume Up")}, // VK_VOLUME_UP\r
- {0xb0, _T("Next Track")}, // VK_MEDIA_NEXT_TRACK\r
- {0xb1, _T("Previous Track")}, // VK_MEDIA_PREV_TRACK\r
- {0xb2, _T("Stop Media")}, // VK_MEDIA_STOP\r
- {0xb3, _T("Play/Pause Media")}, // VK_MEDIA_PLAY_PAUSE\r
- {0xb4, _T("Start Mail")}, // VK_LAUNCH_MAIL\r
- {0xb5, _T("Select Media")}, // VK_LAUNCH_MEDIA_SELECT\r
- {0xb6, _T("Start Application 1")}, // VK_LAUNCH_APP1\r
- {0xb7, _T("Start Application 2")}, // VK_LAUNCH_APP2\r
- {0xb8, _T("Reserved")},\r
- {0xb9, _T("Reserved")},\r
- {0xba, _T(";")}, // VK_OEM_1\r
-// {0xba, _T(":")}, // VK_OEM_1 // for Japanese keyboard\r
- {0xbb, _T("+")}, // VK_OEM_PLUS\r
-// {0xbb, _T(";")}, // VK_OEM_PLUS // for Japanese keyboard\r
- {0xbc, _T(",")}, // VK_OEM_COMMA\r
- {0xbd, _T("-")}, // VK_OEM_MINUS\r
- {0xbe, _T(".")}, // VK_OEM_PERIOD\r
- {0xbf, _T("/")}, // VK_OEM_2\r
- {0xc0, _T("`")}, // VK_OEM_3\r
-// {0xc0, _T("@")}, // VK_OEM_3 // for Japanese keyboard\r
- {0xc1, _T("Reserved")},\r
- {0xc2, _T("Reserved")},\r
- {0xc3, _T("Reserved")},\r
- {0xc4, _T("Reserved")},\r
- {0xc5, _T("Reserved")},\r
- {0xc6, _T("Reserved")},\r
- {0xc7, _T("Reserved")},\r
- {0xc8, _T("Reserved")},\r
- {0xc9, _T("Reserved")},\r
- {0xca, _T("Reserved")},\r
- {0xcb, _T("Reserved")},\r
- {0xcc, _T("Reserved")},\r
- {0xcd, _T("Reserved")},\r
- {0xce, _T("Reserved")},\r
- {0xcf, _T("Reserved")},\r
- {0xd0, _T("Reserved")},\r
- {0xd1, _T("Reserved")},\r
- {0xd2, _T("Reserved")},\r
- {0xd3, _T("Reserved")},\r
- {0xd4, _T("Reserved")},\r
- {0xd5, _T("Reserved")},\r
- {0xd6, _T("Reserved")},\r
- {0xd7, _T("Reserved")},\r
- {0xd8, _T("Unassigned")},\r
- {0xd9, _T("Unassigned")},\r
- {0xda, _T("Unassigned")},\r
- {0xdb, _T("[")}, // VK_OEM_4\r
- {0xdc, _T("Backslash")}, // VK_OEM_5\r
- {0xdd, _T("]")}, // VK_OEM_6\r
- {0xde, _T("'")}, // VK_OEM_7\r
- {0xdf, _T("OEM specific")}, // VK_OEM_8\r
- {0xe0, _T("Reserved")},\r
- {0xe1, _T("OEM specific")},\r
- {0xe2, _T("Backslash for 106 keyboard")}, // VK_OEM_102\r
- {0xe3, _T("OEM specific")},\r
- {0xe4, _T("OEM specific")},\r
- {0xe5, _T("Process")}, // VK_PROCESSKEY\r
- {0xe6, _T("OEM specific")},\r
- {0xe7, _T("Packet")}, // VK_PACKET\r
- {0xe8, _T("Unassigned")},\r
- {0xe9, _T("OEM specific")},\r
- {0xea, _T("OEM specific")},\r
- {0xeb, _T("OEM specific")},\r
- {0xec, _T("OEM specific")},\r
- {0xed, _T("OEM specific")},\r
- {0xee, _T("OEM specific")},\r
- {0xef, _T("OEM specific")},\r
- {0xf0, _T("Eisu")}, // \89p\90\94\r
- {0xf1, _T("OEM specific")},\r
- {0xf2, _T("Hiragana")}, // \82Ð\82ç\82ª\82È\r
- {0xf3, _T("Hankaku/Zenkaku 0xf3")}, // "\94¼\8ap/\91S\8ap"\r
- {0xf4, _T("Hankaku/Zenkaku 0xf4")}, // "\94¼\8ap/\91S\8ap"\r
- {0xf5, _T("OEM specific")},\r
- {VK_ATTN, _T("Attn")},\r
- {VK_CRSEL, _T("CrSel")},\r
- {VK_EXSEL, _T("ExSel")},\r
- {VK_EREOF, _T("Erace EOF")},\r
- {VK_PLAY, _T("Play")},\r
- {VK_ZOOM, _T("Zoom")},\r
- {VK_NONAME, _T("Noname")},\r
- {VK_PA1, _T("PA1")},\r
- {VK_OEM_CLEAR, _T("OEM Clear")},\r
- {0xff, _T("Fn")},\r
-};\r
-\r
Config CProfile::m_Config;\r
TCHAR CProfile::m_szAppTitle[MAX_APP][WINDOW_TEXT_LENGTH];\r
TASK_LIST CProfile::m_TaskList[MAX_TASKS];\r
DWORD CProfile::m_dwTasks;\r
+KeyString CProfile::m_KeyString(CProfile::Is106Keyboard() != FALSE);\r
\r
// This function returns the nth string in a window name separated by " - ".\r
// If there aren't a sufficient number of strings, it returns the last string\r
DWORD dwKeyBind = _countof(szKeyBind);\r
for (DWORD dwIndex = 0; RegEnumKeyEx(hKey, dwIndex, szKeyBind, &dwKeyBind, NULL, NULL, NULL, NULL) == ERROR_SUCCESS; ++dwIndex) {\r
int nType, nKey;\r
- ReadKeyBind(nType, nKey, szKeyBind);\r
+ StringToKey(szKeyBind, nType, nKey);\r
m_Config.nCommandID[nAppID][nType][nKey] = nComID;\r
dwKeyBind = _countof(szKeyBind);\r
}\r
DWORD dwKeyBind = _countof(szKeyBind);\r
for (DWORD dwIndex = 0; RegEnumKeyEx(hKey, dwIndex, szKeyBind, &dwKeyBind, NULL, NULL, NULL, NULL) == ERROR_SUCCESS; ++dwIndex) {\r
int nType, nKey;\r
- ReadKeyBind(nType, nKey, szKeyBind);\r
+ StringToKey(szKeyBind, nType, nKey);\r
CDotXkeymacs::SetKey(nFuncID, nAppID, nType, nKey);\r
dwKeyBind = _countof(szKeyBind);\r
}\r
entry.LoadString(IDS_REG_ENTRY_WINDOW_TEXT);\r
AfxGetApp()->WriteProfileString(szAppName, entry, m_Config.szWindowText[nAppID]);\r
\r
- const CString regApp = CString(MAKEINTRESOURCE(IDS_REGSUBKEY_DATA)) + _T("\\") + szAppName;\r
// Create all commands\r
for (int nComID = 1; nComID < MAX_COMMAND; ++nComID)\r
- SaveCommand(szAppName, nComID);\r
+ SaveKeyBind(szAppName, nComID, 0, 0);\r
for (int nType = 0; nType < MAX_COMMAND_TYPE; ++nType)\r
for (int nKey = 0; nKey < MAX_KEY; ++nKey)\r
SaveKeyBind(szAppName, m_Config.nCommandID[nAppID][nType][nKey], nType, nKey);\r
pApp->SendIPCMessage(XKEYMACS_RELOAD);\r
}\r
\r
-void CProfile::ReadKeyBind(int& nCommandType, int& nKey, const LPCTSTR szKeyBind)\r
-{\r
- nCommandType = KeyBind2CommandType(szKeyBind);\r
- nKey = KeyBind2Key(szKeyBind + _tcslen(CommandType2String(nCommandType)));\r
-}\r
-\r
-CString CProfile::WriteKeyBind(const int nType, const int nKey)\r
+void CProfile::SaveKeyBind(const LPCTSTR appName, int comID, int type, int key)\r
{\r
- CString szKeyBind;\r
- szKeyBind.Format(_T("%s%s"), CommandType2String(nType), Key2String(nKey));\r
- return szKeyBind;\r
-}\r
-\r
-int CProfile::KeyBind2CommandType(LPCTSTR szKeyBind)\r
-{\r
- for (int nType = MAX_COMMAND_TYPE - 1; nType; --nType) {\r
- if (IsCommandType(nType, szKeyBind)) {\r
- return nType;\r
- }\r
- }\r
- return NONE;\r
-}\r
-\r
-int CProfile::KeyBind2Key(LPCTSTR szKey)\r
-{\r
- for (int nKey = 1; nKey <= 0xff; ++nKey) {\r
- if (!_tcscmp(szKey, Key2String(nKey))) {\r
- return nKey;\r
- }\r
- }\r
- return 0;\r
-}\r
-\r
-LPCTSTR CProfile::CommandType2String(int nType)\r
-{\r
- if (nType < 0 || sizeof(CommandTypes) / sizeof(CommandTypes[0]) <= nType) {\r
- ASSERT(0);\r
- nType = NONE;\r
- }\r
- return CommandTypes[nType].szName;\r
-}\r
-\r
-LPCTSTR CProfile::Key2String(int nKey)\r
-{\r
- if (CProfile::Is106Keyboard()) {\r
- switch (nKey) {\r
- case 0xBA:\r
- return _T(":");\r
- case 0xBB:\r
- return _T(";");\r
- case 0xC0:\r
- return _T("@");\r
- case 0xDE:\r
- return _T("^");\r
- default:\r
- break;\r
- }\r
- }\r
-\r
- if (nKey < 0 || sizeof(KeyNames) / sizeof(KeyNames[0]) <= nKey) {\r
- ASSERT(0);\r
- nKey = 0;\r
- }\r
- return KeyNames[nKey].name;\r
-}\r
-\r
-BOOL CProfile::IsCommandType(const int nType, LPCTSTR szKeyBind)\r
-{\r
- LPCTSTR szCommandType = CommandType2String(nType);\r
-\r
- if (!_tcsnicmp(szKeyBind, szCommandType, _tcslen(szCommandType))) {\r
- return TRUE;\r
- }\r
-\r
- return FALSE;\r
-}\r
-\r
-void CProfile::SaveKeyBind(const LPCSTR szAppName, const int nComID, const int nType, const int nKey)\r
-{\r
- if (!nComID)\r
+ if (!comID)\r
return;\r
- const LPCSTR szComName = CCommands::GetCommandName(nComID);\r
- if (!szComName[0])\r
+ LPCTSTR comName = CCommands::GetCommandName(comID);\r
+ if (!comName[0])\r
return;\r
- SaveKeyBind(szAppName, szComName, nType, nKey);\r
+ SaveKeyBind(appName, comName, type, key);\r
}\r
\r
-void CProfile::SaveKeyBind(const LPCSTR szAppName, const LPCSTR szComName, const int nType, const int nKey)\r
+void CProfile::SaveKeyBind(const LPCTSTR appName, const LPCTSTR comName, int type, int key)\r
{\r
- const CString szKeyBind = WriteKeyBind(nType, nKey);\r
- CString szSubKey = CString(MAKEINTRESOURCE(IDS_REGSUBKEY_DATA)) + _T("\\") + szAppName + _T("\\") + szComName;\r
- if (!szKeyBind.IsEmpty())\r
- szSubKey += _T("\\") + szKeyBind;\r
+ CString subKey = CString(MAKEINTRESOURCE(IDS_REGSUBKEY_DATA)) + _T("\\") + appName + _T("\\") + comName;\r
+ CString s = KeyToString(type, key);\r
+ if (!s.IsEmpty())\r
+ subKey = subKey + _T("\\") + s;\r
HKEY hKey = NULL;\r
- if (RegCreateKeyEx(HKEY_CURRENT_USER, szSubKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, NULL) == ERROR_SUCCESS)\r
+ if (RegCreateKeyEx(HKEY_CURRENT_USER, subKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, NULL) == ERROR_SUCCESS)\r
RegCloseKey(hKey);\r
}\r
\r
-void CProfile::SaveCommand(const LPCSTR szAppName, const int nComID)\r
+void CProfile::StringToKey(const LPCTSTR str, int& type, int& key)\r
+{\r
+ m_KeyString.ToKey(str, type, key);\r
+}\r
+\r
+CString CProfile::KeyToString(int type, int key)\r
{\r
- SaveKeyBind(szAppName, nComID, 0, 0);\r
+ return m_KeyString.ToString(type, key);\r
}\r
\r
void CProfile::AddKeyBind2C_(const LPCSTR szAppName, const BYTE bVk)\r
DWORD dwKeyBind = sizeof(szKeyBind);\r
for (DWORD dwIndex = 0; RegEnumKeyEx(hKey, dwIndex, szKeyBind, &dwKeyBind, NULL, NULL, NULL, NULL) == ERROR_SUCCESS; ++dwIndex) {\r
int nType, nKey;\r
- ReadKeyBind(nType, nKey, szKeyBind);\r
+ StringToKey(szKeyBind, nType, nKey);\r
SaveKeyBind(appName, CDotXkeymacs::GetFunctionSymbol(nFuncID), nType, nKey);\r
dwKeyBind = sizeof(szKeyBind);\r
}\r