OSDN Git Service

Share the hook state among 32bit and 64bit processes.
[xkeymacs/xkeymacs.git] / xkeymacs / xkeymacs64.cpp
index a8558f7..b5ff41a 100644 (file)
@@ -39,7 +39,7 @@ BOOL CXkeymacsApp::InitInstance()
 \r
 UINT PollIPCMessage(LPVOID param)\r
 {\r
-       HANDLE hPipe = CreateNamedPipe(IPC_PIPE, PIPE_ACCESS_DUPLEX, PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE, 1, 512, 512, 0, NULL);\r
+       HANDLE hPipe = CreateNamedPipe(XKEYMACS64_PIPE, PIPE_ACCESS_DUPLEX, PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE, 1, 512, 512, 0, NULL);\r
        if (hPipe == INVALID_HANDLE_VALUE)\r
                return 1;\r
        for (; ;) {\r
@@ -49,22 +49,28 @@ UINT PollIPCMessage(LPVOID param)
                DWORD read;\r
                if (!ReadFile(hPipe, &msg, sizeof(msg), &read, NULL) || read != sizeof(msg)) \r
                        break;\r
-               DWORD written, nul = 0;\r
-               if (!WriteFile(hPipe, &nul, sizeof(DWORD), &written, NULL) || written != sizeof(DWORD)\r
-                               || !FlushFileBuffers(hPipe) || !DisconnectNamedPipe(hPipe))\r
-                       break;\r
                switch (msg)\r
                {\r
-               case XKEYMACS_EXIT:\r
+               case IPC64_EXIT:\r
                        goto exit;\r
                        break;\r
-               case XKEYMACS_RELOAD:\r
+               case IPC64_RELOAD:\r
                        CXkeymacsDll::LoadConfig();\r
                        break;\r
-               case XKEYMACS_RESET:\r
+               case IPC64_RESET:\r
                        CXkeymacsDll::ResetHooks();\r
                        break;\r
+               case IPC64_DISABLE:\r
+                       CXkeymacsDll::SetHookStateDirect(false);\r
+                       break;\r
+               case IPC64_ENABLE:\r
+                       CXkeymacsDll::SetHookStateDirect(true);\r
+                       break;\r
                }\r
+               DWORD written, ack = 0;\r
+               if (!WriteFile(hPipe, &ack, sizeof(DWORD), &written, NULL) || written != sizeof(DWORD)\r
+                               || !FlushFileBuffers(hPipe) || !DisconnectNamedPipe(hPipe))\r
+                       break;\r
        }\r
 exit:\r
        CloseHandle(hPipe);\r