PROCESS_INFORMATION m_pi;\r
#endif // _WIN64\r
HANDLE m_mutex;\r
-#ifdef USE_MAILSLOT\r
HANDLE m_hNotifyMailslot; /// mailslot to receive notify\r
HANDLE m_hNotifyEvent; /// event on receive notify\r
OVERLAPPED m_olNotify; ///\r
BYTE m_notifyBuf[NOTIFY_MESSAGE_SIZE];\r
-#endif // USE_MAILSLOT\r
static const DWORD SESSION_LOCKED = 1<<0;\r
static const DWORD SESSION_DISCONNECTED = 1<<1;\r
static const DWORD SESSION_END_QUERIED = 1<<2;\r
};\r
\r
private:\r
-#ifdef USE_MAILSLOT\r
static VOID CALLBACK mailslotProc(DWORD i_code, DWORD i_len, LPOVERLAPPED i_ol) {\r
Mayu *pThis;\r
\r
&m_olNotify, Mayu::mailslotProc);\r
return result;\r
}\r
-#endif // USE_MAILSLOT\r
\r
/// register class for tasktray\r
ATOM Register_tasktray() {\r
break;\r
}\r
\r
+ case Notify::Type_threadAttach: {\r
+ NotifyThreadAttach *n = (NotifyThreadAttach *)cd->lpData;\r
+ m_engine.threadAttachNotify(n->m_threadId);\r
+ break;\r
+ }\r
+\r
case Notify::Type_threadDetach: {\r
NotifyThreadDetach *n = (NotifyThreadDetach *)cd->lpData;\r
m_engine.threadDetachNotify(n->m_threadId);\r
break;\r
}\r
\r
- case Notify::Type_command: {\r
- NotifyCommand *n = (NotifyCommand *)cd->lpData;\r
+ case Notify::Type_command64: {\r
+ NotifyCommand64 *n = (NotifyCommand64 *)cd->lpData;\r
+ m_engine.commandNotify(n->m_hwnd, n->m_message,\r
+ n->m_wParam, n->m_lParam);\r
+ break;\r
+ }\r
+\r
+ case Notify::Type_command32: {\r
+ NotifyCommand32 *n = (NotifyCommand32 *)cd->lpData;\r
m_engine.commandNotify(n->m_hwnd, n->m_message,\r
n->m_wParam, n->m_lParam);\r
break;\r
m_engine(m_log) {\r
Registry reg(MAYU_REGISTRY_ROOT);\r
reg.read(_T("escapeNLSKeys"), &m_escapeNlsKeys, 0);\r
-#ifdef USE_MAILSLOT\r
m_hNotifyMailslot = CreateMailslot(NOTIFY_MAILSLOT_NAME, 0, MAILSLOT_WAIT_FOREVER, (SECURITY_ATTRIBUTES *)NULL);\r
ASSERT(m_hNotifyMailslot != INVALID_HANDLE_VALUE);\r
int err;\r
m_olNotify.Offset = 0;\r
m_olNotify.OffsetHigh = 0;\r
m_olNotify.hEvent = m_hNotifyEvent;\r
-#endif // USE_MAILSLOT\r
time(&m_startTime);\r
\r
CHECK_TRUE( Register_focus() );\r
CHECK_TRUE( m_hwndTaskTray );\r
\r
// set window handle of tasktray to hooks\r
-#ifndef USE_MAILSLOT\r
- g_hookData->m_hwndTaskTray = reinterpret_cast<DWORD>(m_hwndTaskTray);\r
-#endif // !USE_MAILSLOT\r
- CHECK_FALSE( installMessageHook() );\r
+ CHECK_FALSE( installMessageHook(reinterpret_cast<DWORD>(m_hwndTaskTray)) );\r
m_usingSN = wtsRegisterSessionNotification(m_hwndTaskTray,\r
NOTIFY_FOR_THIS_SESSION);\r
\r
\r
///\r
~Mayu() {\r
-#ifdef USE_MAILSLOT\r
- CancelIo(m_hNotifyMailslot);\r
- SleepEx(0, TRUE);\r
- CloseHandle(m_hNotifyMailslot);\r
- CloseHandle(m_hNotifyEvent);\r
-#endif // USE_MAILSLOT\r
- ReleaseMutex(m_mutex);\r
- WaitForSingleObject(m_mutex, INFINITE);\r
- // first, detach log from edit control to avoid deadlock\r
- m_log.detach();\r
-#ifdef LOG_TO_FILE\r
- m_logFile.close();\r
-#endif // LOG_TO_FILE\r
-\r
// stop notify from mayu.dll\r
g_hookData->m_hwndTaskTray = NULL;\r
CHECK_FALSE( uninstallMessageHook() );\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
+ CancelIo(m_hNotifyMailslot);\r
+ SleepEx(0, TRUE);\r
+ CloseHandle(m_hNotifyMailslot);\r
+ CloseHandle(m_hNotifyEvent);\r
+ ReleaseMutex(m_mutex);\r
+ WaitForSingleObject(m_mutex, INFINITE);\r
+ // first, detach log from edit control to avoid deadlock\r
+ m_log.detach();\r
+#ifdef LOG_TO_FILE\r
+ m_logFile.close();\r
+#endif // LOG_TO_FILE\r
\r
// destroy windows\r
CHECK_TRUE( DestroyWindow(m_hwndVersion) );\r
// stop keyboard handler thread\r
m_engine.stop();\r
\r
+ if (!(m_sessionState & SESSION_END_QUERIED)) {\r
+ DWORD_PTR result;\r
+ SendMessageTimeout(HWND_BROADCAST, WM_NULL, 0, 0, 0, 3000, &result);\r
+ }\r
+\r
// remove setting;\r
delete m_setting;\r
}\r
showBanner(false);\r
load();\r
\r
-#ifdef USE_MAILSLOT\r
mailslotHandler(0, 0);\r
while (1) {\r
HANDLE handles[] = { m_hNotifyEvent };\r
break;\r
}\r
}\r
-#else // !USE_MAILSLOT\r
- MSG msg;\r
- while (0 < GetMessage(&msg, NULL, 0, 0)) {\r
- if (IsDialogMessage(m_hwndLog, &msg))\r
- continue;\r
- if (IsDialogMessage(m_hwndInvestigate, &msg))\r
- continue;\r
- if (IsDialogMessage(m_hwndVersion, &msg))\r
- continue;\r
- TranslateMessage(&msg);\r
- DispatchMessage(&msg);\r
- }\r
- return msg.wParam;\r
-#endif // !USE_MAILSLOT\r
}\r
};\r
\r