OSDN Git Service

* use SendMessageTimeout() instead of PostMessage()
authorU-i7\gimy <gimy@users.sourceforge.jp>
Sat, 29 Aug 2009 10:08:45 +0000 (19:08 +0900)
committerU-i7\gimy <gimy@users.sourceforge.jp>
Sat, 29 Aug 2009 10:08:45 +0000 (19:08 +0900)
* unify sending WM_NULL from yamyd32 into yamy64
* don't send WM_NULL during logoff

mayu.cpp
mayu.h
yamyd.cpp

index 6327367..0380688 100644 (file)
--- a/mayu.cpp
+++ b/mayu.cpp
@@ -64,8 +64,11 @@ class Mayu
 #endif // LOG_TO_FILE\r
 \r
        HMENU m_hMenuTaskTray;                  /// tasktray menu\r
+#ifdef _WIN64\r
+       HANDLE m_hMutexYamyd;\r
        STARTUPINFO m_si;\r
        PROCESS_INFORMATION m_pi;\r
+#endif // _WIN64\r
        HANDLE m_mutex;\r
 #ifdef USE_MAILSLOT\r
        HANDLE m_hNotifyMailslot;                       /// mailslot to receive notify\r
@@ -1123,19 +1126,22 @@ public:
                // set initial lock state\r
                notifyLockState();\r
 \r
-               BOOL result;\r
-\r
+#ifdef _WIN64\r
                ZeroMemory(&m_pi,sizeof(m_pi));\r
                ZeroMemory(&m_si,sizeof(m_si));\r
                m_si.cb=sizeof(m_si);\r
-#ifdef _WIN64\r
-               result = CreateProcess(_T("yamyd32"), _T("yamyd32"), NULL, NULL, FALSE,\r
+\r
+               // create mutex to block yamyd\r
+               m_hMutexYamyd = CreateMutex((SECURITY_ATTRIBUTES *)NULL, TRUE, MUTEX_YAMYD_BLOCKER);\r
+\r
+               BOOL result = CreateProcess(_T("yamyd32"), _T("yamyd32"), NULL, NULL, FALSE,\r
                                                           NORMAL_PRIORITY_CLASS, 0, NULL, &m_si, &m_pi);\r
                if (result == FALSE) {\r
                        TCHAR buf[1024];\r
                        TCHAR text[1024];\r
                        TCHAR title[1024];\r
 \r
+                       m_pi.hProcess = NULL;\r
                        LoadString(GetModuleHandle(NULL), IDS_cannotInvoke,\r
                                           text, sizeof(text)/sizeof(text[0]));\r
                        LoadString(GetModuleHandle(NULL), IDS_mayu,\r
@@ -1145,7 +1151,6 @@ public:
                        MessageBox((HWND)NULL, buf, title, MB_OK | MB_ICONSTOP);\r
                } else {\r
                        CloseHandle(m_pi.hThread);\r
-                       CloseHandle(m_pi.hProcess);\r
                }\r
 #endif // _WIN64\r
        }\r
@@ -1169,7 +1174,19 @@ public:
                // stop notify from mayu.dll\r
                g_hookData->m_hwndTaskTray = NULL;\r
                CHECK_FALSE( uninstallMessageHook() );\r
-               PostMessage(HWND_BROADCAST, WM_NULL, 0, 0);\r
+\r
+#ifdef _WIN64\r
+               ReleaseMutex(m_hMutexYamyd);\r
+               if (m_pi.hProcess) {\r
+                       WaitForSingleObject(m_pi.hProcess, 5000);\r
+                       CloseHandle(m_pi.hProcess);\r
+               }\r
+               CloseHandle(m_hMutexYamyd);\r
+#endif // _WIN64\r
+               if (!(m_sessionState & SESSION_END_QUERIED)) {\r
+                       DWORD_PTR result;\r
+                       SendMessageTimeout(HWND_BROADCAST, WM_NULL, 0, 0, SMTO_ABORTIFHUNG, 3000, &result);\r
+               }\r
 \r
                // destroy windows\r
                CHECK_TRUE( DestroyWindow(m_hwndVersion) );\r
diff --git a/mayu.h b/mayu.h
index 9d9900b..96115ed 100644 (file)
--- a/mayu.h
+++ b/mayu.h
 _T("{46269F4D-D560-40f9-B38B-DB5E280FEF47}")\r
 \r
 ///\r
+#  define MUTEX_YAMYD_BLOCKER          \\r
+_T("{267C9CA1-C4DC-4011-B78A-745781FD60F4}")\r
+\r
+///\r
 #  define MAX_MAYU_REGISTRY_ENTRIES 256\r
 \r
 \r
index f49be82..8ab5a48 100644 (file)
--- a/yamyd.cpp
+++ b/yamyd.cpp
@@ -8,7 +8,7 @@
 int WINAPI _tWinMain(HINSTANCE /* i_hInstance */, HINSTANCE /* i_hPrevInstance */,\r
                                         LPTSTR /* i_lpszCmdLine */, int /* i_nCmdShow */)\r
 {\r
-       HANDLE mutex = OpenMutex(SYNCHRONIZE, FALSE, MUTEX_MAYU_EXCLUSIVE_RUNNING);\r
+       HANDLE mutex = OpenMutex(SYNCHRONIZE, FALSE, MUTEX_YAMYD_BLOCKER);\r
        if (mutex != NULL) {\r
                CHECK_FALSE( installMessageHook() );\r
 \r
@@ -17,7 +17,6 @@ int WINAPI _tWinMain(HINSTANCE /* i_hInstance */, HINSTANCE /* i_hPrevInstance *
                ReleaseMutex(mutex);\r
 \r
                CHECK_FALSE( uninstallMessageHook() );\r
-               PostMessage(HWND_BROADCAST, WM_NULL, 0, 0);\r
        }\r
 \r
        return 0;\r