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
\r
case WM_APP_escapeNLSKeysFailed:\r
if (i_lParam) {\r
+ int ret;\r
+\r
This->m_log << _T("escape NLS keys done code=") << i_wParam << std::endl;\r
- if (i_wParam != YAMY_SUCCESS && i_wParam != YAMY_ERROR_RETRY_INJECTION_SUCCESS) {\r
- int ret = This->errorDialogWithCode(IDS_escapeNlsKeysFailed, i_wParam, MB_RETRYCANCEL | MB_ICONSTOP);\r
+ switch (i_wParam) {\r
+ case YAMY_SUCCESS:\r
+ case YAMY_ERROR_RETRY_INJECTION_SUCCESS:\r
+ // escape NLS keys success\r
+ break;\r
+ case YAMY_ERROR_TIMEOUT_INJECTION:\r
+ ret = This->errorDialogWithCode(IDS_escapeNlsKeysRetry, i_wParam, MB_RETRYCANCEL | MB_ICONSTOP);\r
if (ret == IDRETRY) {\r
This->m_fixScancodeMap.escape(true);\r
}\r
+ break;\r
+ default:\r
+ This->errorDialogWithCode(IDS_escapeNlsKeysFailed, i_wParam, MB_OK);\r
+ break;\r
}\r
} else {\r
This->m_log << _T("restore NLS keys done with code=") << i_wParam << std::endl;\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
m_hwndVersion =\r
CreateDialogParam(g_hInst, MAKEINTRESOURCE(IDD_DIALOG_version),\r
NULL, dlgVersion_dlgProc,\r
- (LPARAM)m_engine.getMayudVersion().c_str());\r
+ (LPARAM)_T(""));\r
CHECK_TRUE( m_hwndVersion );\r
\r
// attach log\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
+ tstring yamydPath;\r
+ _TCHAR exePath[GANA_MAX_PATH];\r
+ _TCHAR exeDrive[GANA_MAX_PATH];\r
+ _TCHAR exeDir[GANA_MAX_PATH];\r
+\r
+ GetModuleFileName(NULL, exePath, GANA_MAX_PATH);\r
+ _tsplitpath_s(exePath, exeDrive, GANA_MAX_PATH, exeDir, GANA_MAX_PATH, NULL, 0, NULL, 0);\r
+ yamydPath = exeDrive;\r
+ yamydPath += exeDir;\r
+ yamydPath += _T("yamyd32");\r
+\r
+ BOOL result = CreateProcess(yamydPath.c_str(), NULL, NULL, NULL, FALSE,\r
NORMAL_PRIORITY_CLASS, 0, NULL, &m_si, &m_pi);\r
if (result == FALSE) {\r
TCHAR buf[1024];\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