OSDN Git Service

enable command notify on x64
[yamy/yamy.git] / hook.h
1 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r
2 // hook.h\r
3 \r
4 \r
5 #ifndef _HOOK_H\r
6 #  define _HOOK_H\r
7 \r
8 #  include "misc.h"\r
9 #  include <tchar.h>\r
10 #  include <windef.h>\r
11 \r
12 ///\r
13 #  define HOOK_PIPE_NAME \\r
14  _T("\\\\.\\pipe\\GANAware\\mayu\\{4B22D464-7A4E-494b-982A-C2B2BBAAF9F3}") _T(VERSION)\r
15 ///\r
16 #  define NOTIFY_MAILSLOT_NAME \\r
17 _T("\\\\.\\mailslot\\GANAware\\mayu\\{330F7914-EB5B-49be-ACCE-D2B8DF585B32}") _T(VERSION)\r
18 ///\r
19 #  define WM_MAYU_MESSAGE_NAME _T("GANAware\\mayu\\WM_MAYU_MESSAGE")\r
20 \r
21 ///\r
22 enum MayuMessage {\r
23         MayuMessage_notifyName,\r
24         MayuMessage_funcRecenter,\r
25         MayuMessage_funcSetImeStatus,\r
26         MayuMessage_funcSetImeString,\r
27 };\r
28 \r
29 \r
30 ///\r
31 struct Notify {\r
32         ///\r
33         enum Type {\r
34                 Type_setFocus,                          /// NotifySetFocus\r
35                 Type_name,                                      /// NotifySetFocus\r
36                 Type_lockState,                         /// NotifyLockState\r
37                 Type_sync,                                      /// Notify\r
38                 Type_threadDetach,                              /// NotifyThreadDetach\r
39                 Type_command64,                         /// NotifyCommand64\r
40                 Type_command32,                         /// NotifyCommand32\r
41                 Type_show,                                      /// NotifyShow\r
42                 Type_log,                                       /// NotifyLog\r
43         };\r
44         Type m_type;                                    ///\r
45         DWORD m_debugParam;                             /// (for debug)\r
46 };\r
47 \r
48 \r
49 ///\r
50 struct NotifySetFocus : public Notify {\r
51         DWORD m_threadId;                               ///\r
52         DWORD m_hwnd;                           ///\r
53         _TCHAR m_className[GANA_MAX_PATH];              ///\r
54         _TCHAR m_titleName[GANA_MAX_PATH];              ///\r
55 };\r
56 \r
57 \r
58 ///\r
59 struct NotifyLockState : public Notify {\r
60         bool m_isNumLockToggled;                        ///\r
61         bool m_isCapsLockToggled;                       ///\r
62         bool m_isScrollLockToggled;                     ///\r
63         bool m_isKanaLockToggled;                       ///\r
64         bool m_isImeLockToggled;                        ///\r
65         bool m_isImeCompToggled;                        ///\r
66 };\r
67 \r
68 \r
69 ///\r
70 struct NotifyThreadDetach : public Notify {\r
71         DWORD m_threadId;                               ///\r
72 };\r
73 \r
74 \r
75 ///\r
76 struct NotifyCommand32 : public Notify {\r
77         HWND m_hwnd;                                    ///\r
78         UINT m_message;                         ///\r
79         unsigned int m_wParam;                          ///\r
80         long m_lParam;                          ///\r
81 };\r
82 \r
83 \r
84 ///\r
85 struct NotifyCommand64 : public Notify {\r
86         HWND m_hwnd;                                    ///\r
87         UINT m_message;                         ///\r
88         unsigned __int64 m_wParam;                              ///\r
89         __int64 m_lParam;                               ///\r
90 };\r
91 \r
92 \r
93 enum {\r
94         NOTIFY_MESSAGE_SIZE = sizeof(NotifySetFocus),   ///\r
95 };\r
96 \r
97 \r
98 ///\r
99 struct NotifyShow : public Notify {\r
100         ///\r
101         enum Show {\r
102                 Show_Normal,\r
103                 Show_Maximized,\r
104                 Show_Minimized,\r
105         };\r
106         Show m_show;                                    ///\r
107         bool m_isMDI;                                   ///\r
108 };\r
109 \r
110 \r
111 ///\r
112 struct NotifyLog : public Notify {\r
113         _TCHAR m_msg[GANA_MAX_PATH];                    ///\r
114 };\r
115 \r
116 \r
117 ///\r
118 enum MouseHookType {\r
119         MouseHookType_None = 0,                         /// none\r
120         MouseHookType_Wheel = 1 << 0,                   /// wheel\r
121         MouseHookType_WindowMove = 1 << 1,              /// window move\r
122 };\r
123 \r
124 class Engine;\r
125 typedef unsigned int (WINAPI *INPUT_DETOUR)(Engine *i_engine, WPARAM i_wParam, LPARAM i_lParam);\r
126 \r
127 ///\r
128 class HookData\r
129 {\r
130 public:\r
131         USHORT m_syncKey;                               ///\r
132         bool m_syncKeyIsExtended;                       ///\r
133         bool m_doesNotifyCommand;                       ///\r
134         DWORD m_hwndTaskTray;                           ///\r
135         bool m_correctKanaLockHandling;         /// does use KL- ?\r
136         MouseHookType m_mouseHookType;          ///\r
137         int m_mouseHookParam;                   ///\r
138         DWORD m_hwndMouseHookTarget;            ///\r
139         POINT m_mousePos;                               ///\r
140 };\r
141 \r
142 \r
143 ///\r
144 #  define DllExport __declspec(dllexport)\r
145 ///\r
146 #  define DllImport __declspec(dllimport)\r
147 \r
148 \r
149 #  ifndef _HOOK_CPP\r
150 extern DllImport HookData *g_hookData;\r
151 extern DllImport int installMessageHook(DWORD i_hwndTaskTray);\r
152 extern DllImport int uninstallMessageHook();\r
153 extern DllImport int installKeyboardHook(INPUT_DETOUR i_keyboardDetour, Engine *i_engine, bool i_install);\r
154 extern DllImport int installMouseHook(INPUT_DETOUR i_mouseDetour, Engine *i_engine, bool i_install);\r
155 extern DllImport bool notify(void *data, size_t sizeof_data);\r
156 extern DllImport void notifyLockState();\r
157 #  endif // !_HOOK_CPP\r
158 \r
159 \r
160 #endif // !_HOOK_H\r