OSDN Git Service

Improve the member functions of CXkeymacsDll relating the hooks. snap-110830
authorKazuhiro Fujieda <fujieda@users.sourceforge.jp>
Tue, 30 Aug 2011 07:01:56 +0000 (16:01 +0900)
committerKazuhiro Fujieda <fujieda@users.sourceforge.jp>
Tue, 30 Aug 2011 07:01:56 +0000 (16:01 +0900)
Remove the member variables of the hook handles from the shared section.
Remove unnecessary type casts in SetHooks.
Merge the invocations of CallNextHookEx in CallWndProc.
Add the invocations of SetKeyboardHook to CallWndRetProc and GetMsgProc.
Process messages in GetMsgProc only when nCode >= 0.

xkeymacsdll/xkeymacsdll.cpp

index dae3d55..5f45c74 100644 (file)
@@ -207,10 +207,6 @@ DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
 #pragma data_seg(".xkmcs")\r
        bool    CXkeymacsDll::m_bEnableKeyboardHook = false;\r
        DWORD   CXkeymacsDll::m_nHookAltRelease = 0;\r
-       HHOOK   CXkeymacsDll::m_hHookCallWnd = NULL;\r
-       HHOOK   CXkeymacsDll::m_hHookCallWndRet = NULL;\r
-       HHOOK   CXkeymacsDll::m_hHookGetMessage = NULL;\r
-       HHOOK   CXkeymacsDll::m_hHookShell = NULL;\r
        BOOL    CXkeymacsDll::m_bRightControl   = FALSE;\r
        BOOL    CXkeymacsDll::m_bRightAlt               = FALSE;\r
        BOOL    CXkeymacsDll::m_bRightShift             = FALSE;\r
@@ -227,6 +223,10 @@ DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
        TCHAR   CXkeymacsDll::m_M_xTip[128] = "";\r
        CONFIG  CXkeymacsDll::m_Config = {0};\r
 #pragma data_seg()\r
+HHOOK CXkeymacsDll::m_hHookCallWnd = NULL;\r
+HHOOK CXkeymacsDll::m_hHookCallWndRet = NULL;\r
+HHOOK CXkeymacsDll::m_hHookGetMessage = NULL;\r
+HHOOK CXkeymacsDll::m_hHookShell = NULL;\r
 BOOL CXkeymacsDll::m_bRecordingMacro = FALSE;\r
 BOOL CXkeymacsDll::m_bDown[MAX_KEY] = {0};\r
 std::list<KbdMacro> CXkeymacsDll::m_Macro;\r
@@ -270,10 +270,10 @@ void CXkeymacsDll::SetConfig(const CONFIG& config)
 \r
 void CXkeymacsDll::SetHooks()\r
 {\r
-       m_hHookCallWnd = SetWindowsHookEx(WH_CALLWNDPROC, (HOOKPROC)CallWndProc, g_hDllInst, 0);\r
-       m_hHookCallWndRet = SetWindowsHookEx(WH_CALLWNDPROCRET, (HOOKPROC)CallWndRetProc, g_hDllInst, 0);\r
-       m_hHookGetMessage = SetWindowsHookEx(WH_GETMESSAGE, (HOOKPROC)GetMsgProc, g_hDllInst, 0);\r
-       m_hHookShell = SetWindowsHookEx(WH_SHELL, (HOOKPROC)ShellProc, g_hDllInst, 0);\r
+       m_hHookCallWnd = SetWindowsHookEx(WH_CALLWNDPROC, CallWndProc, g_hDllInst, 0);\r
+       m_hHookCallWndRet = SetWindowsHookEx(WH_CALLWNDPROCRET, CallWndRetProc, g_hDllInst, 0);\r
+       m_hHookGetMessage = SetWindowsHookEx(WH_GETMESSAGE, GetMsgProc, g_hDllInst, 0);\r
+       m_hHookShell = SetWindowsHookEx(WH_SHELL, ShellProc, g_hDllInst, 0);\r
        m_bEnableKeyboardHook = true;\r
 }\r
 \r
@@ -353,34 +353,35 @@ BOOL CXkeymacsDll::IsKeyboardHook()
 LRESULT CALLBACK CXkeymacsDll::CallWndProc(int nCode, WPARAM wParam, LPARAM lParam)\r
 {\r
        SetKeyboardHook();\r
-       if (nCode < 0)\r
-               return CallNextHookEx(m_hHookCallWnd, nCode, wParam, lParam);\r
-       const CWPSTRUCT *cwps = reinterpret_cast<CWPSTRUCT *>(lParam);\r
-       switch (cwps->message) {\r
-       case WM_IME_STARTCOMPOSITION:\r
-               InitKeyboardProc(TRUE);\r
-               break;\r
-       case WM_IME_ENDCOMPOSITION:\r
-               InitKeyboardProc(FALSE);\r
-               break;\r
-       case WM_SETFOCUS:\r
-               if (cwps->hwnd == GetForegroundWindow()) {\r
-                       InitKeyboardProc(FALSE);\r
-                       ShowKeyboardHookState();\r
-               }\r
-               break;\r
-       case WM_NCACTIVATE:\r
-               if (cwps->wParam && cwps->hwnd == GetForegroundWindow()) {\r
+       if (nCode >= 0) {\r
+               const CWPSTRUCT *cwps = reinterpret_cast<CWPSTRUCT *>(lParam);\r
+               switch (cwps->message) {\r
+               case WM_IME_STARTCOMPOSITION:\r
+                       InitKeyboardProc(TRUE);\r
+                       break;\r
+               case WM_IME_ENDCOMPOSITION:\r
                        InitKeyboardProc(FALSE);\r
-                       ShowKeyboardHookState();\r
+                       break;\r
+               case WM_SETFOCUS:\r
+                       if (cwps->hwnd == GetForegroundWindow()) {\r
+                               InitKeyboardProc(FALSE);\r
+                               ShowKeyboardHookState();\r
+                       }\r
+                       break;\r
+               case WM_NCACTIVATE:\r
+                       if (cwps->wParam && cwps->hwnd == GetForegroundWindow()) {\r
+                               InitKeyboardProc(FALSE);\r
+                               ShowKeyboardHookState();\r
+                       }\r
+                       break;\r
                }\r
-               break;\r
        }\r
        return CallNextHookEx(m_hHookCallWnd, nCode, wParam, lParam);\r
 }\r
 \r
 LRESULT CALLBACK CXkeymacsDll::CallWndRetProc(int nCode, WPARAM wParam, LPARAM lParam)\r
 {\r
+       SetKeyboardHook();\r
        if (nCode >= 0) {\r
                const CWPRETSTRUCT *cwprets = reinterpret_cast<CWPRETSTRUCT *>(lParam);\r
                switch (cwprets->message) {\r
@@ -398,14 +399,17 @@ LRESULT CALLBACK CXkeymacsDll::CallWndRetProc(int nCode, WPARAM wParam, LPARAM l
 \r
 LRESULT CALLBACK CXkeymacsDll::GetMsgProc(int nCode, WPARAM wParam, LPARAM lParam)\r
 {\r
-       const MSG *msg = reinterpret_cast<MSG *>(lParam);\r
-       switch (msg->message) {\r
-       case WM_IME_STARTCOMPOSITION:\r
-               InitKeyboardProc(TRUE);\r
-               break;\r
-       case WM_IME_ENDCOMPOSITION:\r
-               InitKeyboardProc(FALSE);\r
-               break;\r
+       SetKeyboardHook();\r
+       if (nCode >= 0) {\r
+               const MSG *msg = reinterpret_cast<MSG *>(lParam);\r
+               switch (msg->message) {\r
+               case WM_IME_STARTCOMPOSITION:\r
+                       InitKeyboardProc(TRUE);\r
+                       break;\r
+               case WM_IME_ENDCOMPOSITION:\r
+                       InitKeyboardProc(FALSE);\r
+                       break;\r
+               }\r
        }\r
        return CallNextHookEx(m_hHookGetMessage, nCode, wParam, lParam);\r
 }\r
@@ -420,7 +424,7 @@ LRESULT CALLBACK CXkeymacsDll::ShellProc(int nCode, WPARAM wParam, LPARAM lParam
                        ShowKeyboardHookState();\r
                }\r
        }\r
-       return CallNextHookEx( m_hHookShell, nCode, wParam, lParam );\r
+       return CallNextHookEx(m_hHookShell, nCode, wParam, lParam);\r
 }\r
 \r
 UINT CXkeymacsDll::GetModifierState(BOOL bPhysicalKey)\r