Я пытаюсь подключить Notepad.exe к клавиатуре с помощью SetWindowsHookEx.
Как видите, рабочий поток отправляет свой код ASCII, который является wParam, на указанный сервер.
UINT WINAPI SendToServer(LPVOID lpParam)
{
CSocket Client;
Client.Create();
Client.Connect("localhost", 6677);
Client.Send(lpParam, 2); // sending its ASICI code to Server
Client.Close();
return 0;
}
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
TCHAR szPath[MAX_PATH] = {0,};
TCHAR* p = nullptr;
if( nCode >= 0 )
{
// bit 31 : 0 => press, 1 => release
if( !(lParam & 0x80000000) )
{
GetModuleFileName(NULL, szPath, MAX_PATH);
p = strrchr(szPath, '\\');
if( !_stricmp(p + 1, "Notepad.exe") )
{
unsigned ThreadID;
g_hThread = reinterpret_cast<HANDLE>(_beginthreadex(NULL, 0, SendToServer, &wParam, 0, &ThreadID)); // a new working thread
return 0;
}
}
}
return CallNextHookEx(g_hHook, nCode, wParam, lParam);
}
Проблема в том, что по какой-то причине, связанной с новым рабочим потоком, в Notepad возникает критическая ошибка (если я нажимаю кнопку «игнорировать» несколько раз, она все равно работает.)
Я удалилэта строка ниже,
g_hThread = reinterpret_cast<HANDLE>(_beginthreadex(NULL, 0, SendToServer, &wParam, 0, &ThreadID)); // a new working thread
Тогда с Notepad.exe не возникает никаких ошибок
Любая помощь будет очень признательна.
Заранее спасибо.