OSDN Git Service

post WM_NULL to attached threads on yamy exit to unmap mayu{32,64}.dll
[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_threadAttach,                              /// NotifyThreadAttach\r
39                 Type_threadDetach,                              /// NotifyThreadDetach\r
40                 Type_command64,                         /// NotifyCommand64\r
41                 Type_command32,                         /// NotifyCommand32\r
42                 Type_show,                                      /// NotifyShow\r
43                 Type_log,                                       /// NotifyLog\r
44         };\r
45         Type m_type;                                    ///\r
46         DWORD m_debugParam;                             /// (for debug)\r
47 };\r
48 \r
49 \r
50 ///\r
51 struct NotifySetFocus : public Notify {\r
52         DWORD m_threadId;                               ///\r
53         DWORD m_hwnd;                           ///\r
54         _TCHAR m_className[GANA_MAX_PATH];              ///\r
55         _TCHAR m_titleName[GANA_MAX_PATH];              ///\r
56 };\r
57 \r
58 \r
59 ///\r
60 struct NotifyLockState : public Notify {\r
61         bool m_isNumLockToggled;                        ///\r
62         bool m_isCapsLockToggled;                       ///\r
63         bool m_isScrollLockToggled;                     ///\r
64         bool m_isKanaLockToggled;                       ///\r
65         bool m_isImeLockToggled;                        ///\r
66         bool m_isImeCompToggled;                        ///\r
67 };\r
68 \r
69 \r
70 ///\r
71 struct NotifyThreadAttach : public Notify {\r
72         DWORD m_threadId;                               ///\r
73 };\r
74 \r
75 \r
76 ///\r
77 struct NotifyThreadDetach : public Notify {\r
78         DWORD m_threadId;                               ///\r
79 };\r
80 \r
81 \r
82 ///\r
83 struct NotifyCommand32 : public Notify {\r
84         HWND m_hwnd;                                    ///\r
85         UINT m_message;                         ///\r
86         unsigned int m_wParam;                          ///\r
87         long m_lParam;                          ///\r
88 };\r
89 \r
90 \r
91 ///\r
92 struct NotifyCommand64 : public Notify {\r
93         HWND m_hwnd;                                    ///\r
94         UINT m_message;                         ///\r
95         unsigned __int64 m_wParam;                              ///\r
96         __int64 m_lParam;                               ///\r
97 };\r
98 \r
99 \r
100 enum {\r
101         NOTIFY_MESSAGE_SIZE = sizeof(NotifySetFocus),   ///\r
102 };\r
103 \r
104 \r
105 ///\r
106 struct NotifyShow : public Notify {\r
107         ///\r
108         enum Show {\r
109                 Show_Normal,\r
110                 Show_Maximized,\r
111                 Show_Minimized,\r
112         };\r
113         Show m_show;                                    ///\r
114         bool m_isMDI;                                   ///\r
115 };\r
116 \r
117 \r
118 ///\r
119 struct NotifyLog : public Notify {\r
120         _TCHAR m_msg[GANA_MAX_PATH];                    ///\r
121 };\r
122 \r
123 \r
124 ///\r
125 enum MouseHookType {\r
126         MouseHookType_None = 0,                         /// none\r
127         MouseHookType_Wheel = 1 << 0,                   /// wheel\r
128         MouseHookType_WindowMove = 1 << 1,              /// window move\r
129 };\r
130 \r
131 class Engine;\r
132 typedef unsigned int (WINAPI *INPUT_DETOUR)(Engine *i_engine, WPARAM i_wParam, LPARAM i_lParam);\r
133 \r
134 ///\r
135 class HookData\r
136 {\r
137 public:\r
138         USHORT m_syncKey;                               ///\r
139         bool m_syncKeyIsExtended;                       ///\r
140         bool m_doesNotifyCommand;                       ///\r
141         DWORD m_hwndTaskTray;                           ///\r
142         bool m_correctKanaLockHandling;         /// does use KL- ?\r
143         MouseHookType m_mouseHookType;          ///\r
144         int m_mouseHookParam;                   ///\r
145         DWORD m_hwndMouseHookTarget;            ///\r
146         POINT m_mousePos;                               ///\r
147 };\r
148 \r
149 \r
150 ///\r
151 #  define DllExport __declspec(dllexport)\r
152 ///\r
153 #  define DllImport __declspec(dllimport)\r
154 \r
155 \r
156 #  ifndef _HOOK_CPP\r
157 extern DllImport HookData *g_hookData;\r
158 extern DllImport int installMessageHook(DWORD i_hwndTaskTray);\r
159 extern DllImport int uninstallMessageHook();\r
160 extern DllImport int installKeyboardHook(INPUT_DETOUR i_keyboardDetour, Engine *i_engine, bool i_install);\r
161 extern DllImport int installMouseHook(INPUT_DETOUR i_mouseDetour, Engine *i_engine, bool i_install);\r
162 extern DllImport bool notify(void *data, size_t sizeof_data);\r
163 extern DllImport void notifyLockState();\r
164 #  endif // !_HOOK_CPP\r
165 \r
166 \r
167 #endif // !_HOOK_H\r