我想通過使用SetWindowsHookEx鍵盤掛鉤Notepad.exe。試圖掛鉤Notepad.exe
如您所見,工作線程正在將其代碼爲wParam的ASCII代碼發送到指定的服務器。
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);
}
的問題是,對於涉及到新的工作線程某種原因,記事本發生了嚴重錯誤(如果我點擊「忽略」按鈕幾次,還挺工作雖然)。
我刪除這條線之下,
g_hThread = reinterpret_cast<HANDLE>(_beginthreadex(NULL, 0, SendToServer, &wParam, 0, &ThreadID)); // a new working thread
然後沒有出現錯誤,從Notepad.exe的
任何幫助將是非常讚賞。
在此先感謝。
你確定這是C#?對我來說,它看起來非常像C++。 – 2011-12-30 05:13:57
對不起,這是C++。沒有添加C#標籤。不知道爲什麼添加C#標籤。 – 2011-12-30 05:16:41