OSDN Git Service

Remove TODO comments, some lines commented out.
[xkeymacs/xkeymacs.git] / xkeymacsdll / xkeymacsdll.h
1 // xkeymacs.h: interface for the CXkeymacsDll class.\r
2 //\r
3 //////////////////////////////////////////////////////////////////////\r
4 \r
5 #if !defined(AFX_XKEYMACS_H__88552DEC_1233_4A0A_BE62_9EF7BC618EC6__INCLUDED_)\r
6 #define AFX_XKEYMACS_H__88552DEC_1233_4A0A_BE62_9EF7BC618EC6__INCLUDED_\r
7 \r
8 #if _MSC_VER > 1000\r
9 #pragma once\r
10 #endif // _MSC_VER > 1000\r
11 \r
12 #include "ClipboardSnap.h"\r
13 \r
14 enum { MAX_APP = 64 };\r
15 enum { NONE = 0x0, SHIFT = 0x1, CONTROL = 0x2, META = 0x4, CONTROLX = 0x8,\r
16            MAX_COMMAND_TYPE = NONE + SHIFT + CONTROL + META + CONTROLX + 1 };\r
17 enum { /* WIN_SHIFT = 0x100, */ WIN_CTRL = 0x200, WIN_ALT = 0x400, WIN_WIN = 0x800 };\r
18 enum { MAX_KEY = 256 };\r
19 enum { MAX_FUNCTION = 64 };\r
20 enum { MAX_DEFINITION = 256 };\r
21 \r
22 enum { WINDOW_NAME_LENGTH       = 128 };\r
23 enum { CLASS_NAME_LENGTH        = 128 };\r
24 enum { SUB_KEY_NAME_LENGTH      = 128 };\r
25 enum { WINDOW_TEXT_LENGTH   = 128 + 128 + 3};\r
26 \r
27 enum ICON_TYPE { MAIN_ICON, CX_ICON, MX_ICON, META_ICON, SHIFT_ICON, CTRL_ICON, ALT_ICON, MAX_ICON_TYPE };\r
28 enum XKEYMACS_STATUS { STATUS_ENABLE, STATUS_DISABLE_TMP, STATUS_DISABLE_WOCQ, STATUS_DISABLE, MAX_STATUS };\r
29 enum { ON_ICON, OFF_ICON };     // alias of status\r
30 \r
31 enum GOTO { GOTO_DO_NOTHING, GOTO_HOOK, GOTO_RECURSIVE, GOTO_HOOKX, GOTO_HOOK0_9, CONTINUE };\r
32 enum SETTING_STYLE { SETTING_DEFAULT, SETTING_SPECIFIC, SETTING_DISABLE, SETTING_UNDEFINED };\r
33 \r
34 enum { EXTENDED_KEY = 0x01000000 };\r
35 enum { REPEATED_KEY = 0x40000000 };\r
36 enum { BEING_RELEASED = 0x80000000 };\r
37 \r
38 typedef struct KeyBind\r
39 {\r
40         int nCommandType;\r
41         BYTE bVk;\r
42         int nControlID;\r
43 } KeyBind_t;\r
44 \r
45 typedef struct KbdMacro\r
46 {\r
47         int nCode;\r
48         WPARAM wParam;\r
49         LPARAM lParam;\r
50         BOOL bOriginal;\r
51 } KbdMacro_t;\r
52 \r
53 typedef struct Modifier {\r
54         LPCTSTR name;\r
55         int id;\r
56 } Modifier_t;\r
57 \r
58 static const Modifier_t Modifiers[] = {\r
59 //      { _T("A-"), ALT },\r
60         { _T("C-"), CONTROL},\r
61 //      { _T("H-"), HYPER },\r
62         { _T("M-"), META },\r
63         { _T("S-"), SHIFT },\r
64 //      { _T("s-"), SUPER },\r
65         { _T("Ctrl+"), WIN_CTRL },\r
66         { _T("Alt+"), WIN_ALT },\r
67         { _T("Win+"), WIN_WIN },\r
68 };\r
69 \r
70 typedef struct KeyName\r
71 {\r
72         BYTE bVk;\r
73         LPCTSTR name;\r
74 } KeyName_t;\r
75 \r
76 static const KeyName_t ControlCharacters[] = {\r
77 //      { VK_LBUTTON,           _T("mouse-1") },                                // does not work well\r
78 //      { VK_RBUTTON,           _T("mouse-3") },                                // does not work well\r
79         { VK_CANCEL,            _T("break") },\r
80 //      { VK_MBUTTON,           _T("mouse-2") },                                // does not work well\r
81         { VK_BACK,                      _T("backspace") },\r
82         { VK_TAB,                       _T("tab") },\r
83         { VK_RETURN,            _T("return") },\r
84         { VK_CAPITAL,           _T("capslock") },\r
85         { VK_KANA,                      _T("kana") },\r
86         { VK_KANJI,                     _T("kanji") },\r
87         { VK_ESCAPE,            _T("escape") },\r
88         { VK_CONVERT,           _T("convert") },\r
89         { VK_NONCONVERT,        _T("nonconvert") },\r
90 //      { VK_SPACE,                     _T("SPC") },                                    // [? ]\r
91         { VK_PRIOR,                     _T("prior") },\r
92         { VK_NEXT,                      _T("next") },\r
93         { VK_END,                       _T("end") },\r
94         { VK_HOME,                      _T("home") },\r
95         { VK_LEFT,                      _T("left") },\r
96         { VK_UP,                        _T("up") },\r
97         { VK_RIGHT,                     _T("right") },\r
98         { VK_DOWN,                      _T("down") },\r
99         { VK_SELECT,            _T("select") },\r
100         { VK_PRINT,                     _T("print") },\r
101         { VK_EXECUTE,           _T("execute") },\r
102         { VK_SNAPSHOT,          _T("printscreen") },                    // work as print\r
103         { VK_INSERT,            _T("insert") },\r
104         { VK_DELETE,            _T("delete") },\r
105         { VK_LWIN,                      _T("lwindow") },\r
106         { VK_RWIN,                      _T("rwindow") },\r
107         { VK_APPS,                      _T("apps") },\r
108         { VK_SLEEP,                     _T("sleep") },\r
109         { VK_NUMPAD0,           _T("kp-0") },\r
110         { VK_NUMPAD1,           _T("kp-1") },\r
111         { VK_NUMPAD2,           _T("kp-2") },\r
112         { VK_NUMPAD3,           _T("kp-3") },\r
113         { VK_NUMPAD4,           _T("kp-4") },\r
114         { VK_NUMPAD5,           _T("kp-5") },\r
115         { VK_NUMPAD6,           _T("kp-6") },\r
116         { VK_NUMPAD7,           _T("kp-7") },\r
117         { VK_NUMPAD8,           _T("kp-8") },\r
118         { VK_NUMPAD9,           _T("kp-9") },\r
119         { VK_MULTIPLY,          _T("kp-multiply") },\r
120         { VK_ADD,                       _T("kp-add") },\r
121         { VK_SUBTRACT,          _T("kp-subtract") },\r
122         { VK_DECIMAL,           _T("kp-decimal") },\r
123         { VK_DIVIDE,            _T("kp-divide") },\r
124 //      { VK_F1,                        _T("f1") },                                             // FIXME\r
125 //      { VK_F2,                        _T("f2") },                                             // Move at the end of definition of funcgtion keys to keep away confliction f1/f2 and f1?/f2? by _tcsncmp() i.e. strncmp()\r
126         { VK_F3,                        _T("f3") },\r
127         { VK_F4,                        _T("f4") },\r
128         { VK_F5,                        _T("f5") },\r
129         { VK_F6,                        _T("f6") },\r
130         { VK_F7,                        _T("f7") },\r
131         { VK_F8,                        _T("f8") },\r
132         { VK_F9,                        _T("f9") },\r
133         { VK_F10,                       _T("f10") },\r
134         { VK_F11,                       _T("f11") },\r
135         { VK_F12,                       _T("f12") },\r
136         { VK_F13,                       _T("f13") },\r
137         { VK_F14,                       _T("f14") },\r
138         { VK_F15,                       _T("f15") },\r
139         { VK_F16,                       _T("f16") },\r
140         { VK_F17,                       _T("f17") },\r
141         { VK_F18,                       _T("f18") },\r
142         { VK_F19,                       _T("f19") },\r
143         { VK_F20,                       _T("f20") },\r
144         { VK_F21,                       _T("f21") },\r
145         { VK_F22,                       _T("f22") },\r
146         { VK_F23,                       _T("f23") },\r
147         { VK_F24,                       _T("f24") },\r
148         { VK_F1,                        _T("f1") },\r
149         { VK_F2,                        _T("f2") },\r
150         { VK_NUMLOCK,           _T("kp-numlock") },\r
151         { VK_SCROLL,            _T("scroll") },\r
152         { 0xa6,                         _T("browser-back") },                   // VK_BROWSER_BACK\r
153         { 0xa7,                         _T("browser-forward") },                // VK_BROWSER_FORWARD\r
154         { 0xa8,                         _T("browser-refresh") },                // VK_BROWSER_REFRESH\r
155         { 0xa9,                         _T("browser-stop") },                   // VK_BROWSER_STOP\r
156         { 0xaa,                         _T("browser-search") },                 // VK_BROWSER_SEARCH\r
157         { 0xab,                         _T("browser-favorites") },              // VK_BROWSER_FAVORITES\r
158         { 0xac,                         _T("browser-home") },                   // VK_BROWSER_HOME\r
159         { 0xad,                         _T("volume-mute") },                    // VK_VOLUME_MUTE\r
160         { 0xae,                         _T("volume-down") },                    // VK_VOLUME_DOWN\r
161         { 0xaf,                         _T("volume-up") },                              // VK_VOLUME_UP\r
162         { 0xb0,                         _T("media-next-track") },               // VK_MEDIA_NEXT_TRACK\r
163         { 0xb1,                         _T("media-prev-track") },               // VK_MEDIA_PREV_TRACK\r
164         { 0xb2,                         _T("media-stop") },                             // VK_MEDIA_STOP\r
165         { 0xb3,                         _T("media-play-pause") },               // VK_MEDIA_PLAY_PAUSE\r
166         { 0xb4,                         _T("launch-mail") },                    // VK_LAUNCH_MAIL\r
167         { 0xb5,                         _T("launch-media-select") },    // VK_LAUNCH_MEDIA_SELECT\r
168         { 0xb6,                         _T("launch-1") },                               // VK_LAUNCH_APP1\r
169         { 0xb7,                         _T("launch-2") },                               // VK_LAUNCH_APP2\r
170 };\r
171 \r
172 class AFX_EXT_CLASS CXkeymacsDll  \r
173 {\r
174 public:\r
175         static void ModifyM_xTip(const TCHAR *const szPath);\r
176         static BOOL Get326Compatible();\r
177         void Set326Compatible(int nApplicationID, BOOL b326Compatible);\r
178         void SetCursorData(HCURSOR hEnable, HCURSOR hDisableTMP, HCURSOR hDisableWOCQ, HICON hDisable, BOOL bEnable);\r
179         static unsigned int GetMaxKeyInterval(void);\r
180         static void SetKeyboardSpeed(int nKeyboardSpeed);\r
181         static int GetAccelerate(void);\r
182         static void SetAccelerate(int nAccelerate);\r
183         void SetWindowText(int nApplicationID, CString szWindowText);\r
184         void AddAllShell_NotifyIcon();\r
185         void DeleteAllShell_NotifyIcon();\r
186         void SetKillRingMax(int nApplicationID, int nKillRingMax);\r
187         void CXkeymacsDll::EnableShell_NotifyIcon(ICON_TYPE icon, BOOL bEnable);\r
188         void SetNotifyIconData(ICON_TYPE icon, NOTIFYICONDATA stNtfyIcon, HICON hEnable, HICON hDisableTMP, HICON hDisableWOCQ, HICON hDisable, BOOL bEnable);\r
189         void SetNotifyIconData(ICON_TYPE icon, NOTIFYICONDATA stNtfyIcon, HICON hOn, HICON hOff, BOOL bEnable);\r
190         void Clear(int nApplicationID);\r
191         BOOL IsKeyboardHook();\r
192         void SetCommandID(int nApplicationID, int nCommandType, int nKey, int nCommandID);\r
193         void SetAtIbeamCursorOnly(int nApplicationID, int nCommandType, int nKey, BOOL bAtIbeamCursorOnly);\r
194         void SetApplicationName(int nApplicationID, CString szApplicationName);\r
195         static void ReleaseHooks();\r
196         static void ReleaseKeyboardHook();\r
197         void SetEnableCUA(int nApplicationID, BOOL bEnableCUA);\r
198         void SetIgnoreUndefinedC_x(int nApplicationID, BOOL bIgnoreUndefinedC_x);\r
199         void SetIgnoreUndefinedMetaCtrl(int nApplicationID, BOOL bIgnoreUndefinedMetaCtrl);\r
200         static void SetHooks();\r
201         static void SetKeyboardHook();\r
202         void SetSettingStyle(int nApplicationID, int nSettingStyle);\r
203         void SetUseDialogSetting(int nApplicationID, BOOL bUseDialogSetting);\r
204         static void AddKillRing(BOOL bNewData = TRUE);\r
205         static void CallMacro();\r
206         static void ClearFunctionDefinition();\r
207         static void DefiningMacro(BOOL bDefiningMacro);\r
208         static void DepressKey(BYTE bVk, BOOL bOriginal = TRUE);\r
209         static BOOL GetEnableCUA();\r
210         static CClipboardSnap* GetKillRing(CClipboardSnap *pSnap, BOOL bForce = TRUE);\r
211         static void IncreaseKillRingIndex(int nKillRing = 1);\r
212         static BOOL IsDown(BYTE bVk, BOOL bPhysicalKey = TRUE);\r
213         static void Kdu(BYTE bVk, DWORD n = 1, BOOL bOriginal = TRUE);\r
214         static int ModifyShell_NotifyIcon(ICON_TYPE icon, BOOL bNewStatus, BOOL bForce = TRUE);\r
215         static void ReleaseKey(BYTE bVk);\r
216         static void SetFunctionDefinition(int nFunctionID, CString szDefinition);\r
217         static void SetFunctionKey(int nFunctionID, int nApplicationID, int nCommandType, int nKey);\r
218         static void SetKeyboardHookFlag();\r
219         static void SetKeyboardHookFlag(BOOL bFlag);\r
220         CXkeymacsDll();\r
221         virtual ~CXkeymacsDll();\r
222 private:\r
223         static void InvokeM_x(const TCHAR* const szPath);\r
224         static BOOL m_b326Compatible[MAX_APP];\r
225         static void LogCallWndProcMessage(WPARAM wParam, LPARAM lParam);\r
226         static void DoSetCursor();\r
227         static HCURSOR m_hCurrentCursor;\r
228         static BOOL m_bCursor;\r
229         static HCURSOR m_hCursor[MAX_STATUS];\r
230         static int m_nKeyboardSpeed;\r
231         static int m_nAccelerate;\r
232         static HHOOK m_hHookCallWndRet;\r
233         static LRESULT CALLBACK CallWndRetProc(int nCode, WPARAM wParam, LPARAM lParam);\r
234         static BOOL IsMatchWindowText(CString szWindowText);\r
235         static TCHAR m_szWindowText[MAX_APP][WINDOW_TEXT_LENGTH];\r
236         static BOOL m_bEnableKeyboardHook;\r
237         static HHOOK m_hHookCallWnd;\r
238         static HHOOK m_hHookGetMessage;\r
239         static HHOOK m_hHookShell;\r
240         static void AddShell_NotifyIcon(ICON_TYPE icon);\r
241         void DeleteShell_NotifyIcon(ICON_TYPE icon);\r
242         static BOOL DefiningMacro();\r
243         static BOOL IsControl();\r
244         static BOOL IsMeta();\r
245         static void DoKeybd_event(BYTE bVk, DWORD dwFlags);\r
246         static LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam);\r
247         static LRESULT CALLBACK CallWndProc(int nCode, WPARAM wParam, LPARAM lParam);\r
248         static LRESULT CALLBACK GetMsgProc(int nCode, WPARAM wParam, LPARAM lParam);\r
249         static LRESULT CALLBACK ShellProc(int nCode, WPARAM wParam, LPARAM lParam);\r
250         static KeyBind_t ParseKey(const int nFunctionID, unsigned int &i);\r
251         static BYTE a2v(TCHAR nAscii);\r
252         static BOOL IsShift(TCHAR nAscii);\r
253         static TCHAR m_szFunctionDefinition[MAX_FUNCTION][MAX_DEFINITION];\r
254         static void CallFunction(int nFunctionID);\r
255         static int m_nFunctionID[MAX_APP][MAX_COMMAND_TYPE][MAX_KEY];\r
256         static BOOL m_bEnableCUA[MAX_APP];\r
257         static TCHAR m_szOldApplicationName[MAX_PATH];\r
258         static TCHAR m_szApplicationName[MAX_PATH];\r
259         static int IsPassThrough(BYTE nKey);\r
260         static BOOL IsDepressedShiftKeyOnly(BYTE nKey);\r
261         static BOOL IsDepressedModifier(int Modifier(), BOOL bPhysicalKey = TRUE);\r
262         static BOOL IsValidKey(BYTE bVk);\r
263         static CObList m_Macro;\r
264         static BOOL m_bDefiningMacro;\r
265         static void Original(int nCommandType, BYTE bVk, int nOriginal);\r
266         static int Original(int nCommandType, BYTE bVk);\r
267         static HICON m_hIcon[MAX_ICON_TYPE][MAX_STATUS];\r
268         static BOOL m_bUseDialogSetting[MAX_APP];\r
269         static void InitKeyboardProc(BOOL bImeComposition);\r
270         static BOOL m_bIgnoreUndefinedC_x[MAX_APP];\r
271         static BOOL m_bIgnoreUndefinedMetaCtrl[MAX_APP];\r
272         static int m_nSettingStyle[MAX_APP];\r
273         static int m_nApplicationID;\r
274         static int m_nOriginal[MAX_COMMAND_TYPE][MAX_KEY];\r
275         static int m_nKillRing;\r
276         static CList<CClipboardSnap *, CClipboardSnap *> m_oKillRing;\r
277         static int m_nKillRingMax[MAX_APP];\r
278         static int GetMickey(int nDifferential, int nThreshold1, int nThreshold2, int nAcceleration, int nSpeed);\r
279         static BOOL DoShell_NotifyIcon(ICON_TYPE icon, DWORD dwMessage);\r
280         static BOOL m_bIcon[MAX_ICON_TYPE];\r
281         static DWORD m_dwOldMessage[MAX_ICON_TYPE];\r
282         static NOTIFYICONDATA m_stNtfyIcon[MAX_ICON_TYPE];\r
283         static NOTIFYICONDATA m_stOldNtfyIcon[MAX_ICON_TYPE];\r
284         static BOOL m_bHook;\r
285         static BOOL m_bRightShift;\r
286         static BOOL m_bRightAlt;\r
287         static BOOL m_bRightControl;\r
288         static TCHAR m_szSpecialApp[MAX_APP][CLASS_NAME_LENGTH];\r
289         static int m_nCommandID[MAX_APP][MAX_COMMAND_TYPE][MAX_KEY];\r
290         static BOOL m_bAtIbeamCursorOnly[MAX_APP][MAX_COMMAND_TYPE][MAX_KEY];\r
291 };\r
292 \r
293 \r
294 class AFX_EXT_CLASS CXkeymacsData  \r
295 {\r
296 public:\r
297         void Set326Compatible(BOOL b326Compatible);\r
298         BOOL Get326Compatible();\r
299         int GetWindowTextType();\r
300         void SetWindowTextType(int nWindowTextType);\r
301         CString GetWindowText();\r
302         void SetWindowText(LPCTSTR lpszWindowText);\r
303         static BOOL Is106Keyboard();\r
304         static void Set106Keyboard(BOOL b106Keyboard);\r
305         static int GetToolTipID(int nCommandID);\r
306         static int GetDescriptionID(int nCommandID);\r
307         void SetUseDialogSetting(BOOL bUseDialogSetting);\r
308         BOOL GetUseDialogSetting();\r
309         BOOL GetEnableCUA();\r
310         void SetEnableCUA(BOOL bEnableCUA);\r
311         BOOL GetIgnoreUndefinedC_x();\r
312         void SetIgnoreUndefinedC_x(BOOL bIgnoreUndefinedC_x);\r
313         BOOL GetIgnoreUndefinedMetaCtrl();\r
314         void SetIgnoreUndefinedMetaCtrl(BOOL bIgnoreUndefinedMetaCtrl);\r
315         static int GetCategoryID(int nCommandID);\r
316         void SetSettingStyle(int nSettingStyle);\r
317         int GetSettingStyle();\r
318         static int GetDefaultControlID(int nCommandID, int nIndex);\r
319         static int GetDefaultCommandKey(int nCommandID, int nIndex);\r
320         static int GetDefaultCommandType(int nCommandID, int nIndex);\r
321         static CString GetCommandName(int nCommandID);\r
322         void SetKillRingMax(int nKillRingMax);\r
323         int GetKillRingMax();\r
324         CString GetApplicationTitle();\r
325         void SetApplicationTitle(LPCTSTR lpszApplicationTitle);\r
326         void ClearAll();\r
327         int GetCommandID(int nCommandType, int nKey);\r
328         void SetCommandID(int nCommandType, int nKey, int nCommandID);\r
329         BOOL GetAtIbeamCursorOnly(int nCommandType, int nKey);\r
330         void SetAtIbeamCursorOnly(int nCommandType, int nKey, BOOL bAtIbeamCursorOnly);\r
331         CString GetApplicationName();\r
332         void SetApplicationName(LPCTSTR lpszApplicationName);\r
333         CXkeymacsData();\r
334         virtual ~CXkeymacsData();\r
335 \r
336 private:\r
337         BOOL m_b326Compatible;\r
338         int m_nWindowTextType;\r
339         CString m_strWindowText;\r
340         BOOL m_bEnableCUA;\r
341         static BOOL m_b106Keyboard;\r
342         BOOL m_bUseDialogSetting;\r
343         BOOL m_bIgnoreUndefinedC_x;\r
344         BOOL m_bIgnoreUndefinedMetaCtrl;\r
345         int m_nSettingStyle;\r
346         int m_nKillRingMax;\r
347         CString m_strApplicationTitle;\r
348         CString m_strApplicationName;\r
349         int m_nCommandID[MAX_COMMAND_TYPE][MAX_KEY];\r
350         BOOL m_bAtIbeamCursorOnly[MAX_COMMAND_TYPE][MAX_KEY];\r
351 };\r
352 \r
353 #endif // !defined(AFX_XKEYMACS_H__88552DEC_1233_4A0A_BE62_9EF7BC618EC6__INCLUDED_)\r