我只能使用特定于线程的钩子来解决这个问题。 WH_KEYBOARD_LL
和WH_MOUSE_LL
工作正常,因为dll不必在某处注入。这是dll的回调程序之一:
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
HookData[WH_KEYBOARD + 1].lpfn(nCode, wParam, lParam);
return CallNextHookEx(HookData[WH_KEYBOARD + 1].hhook, nCode, wParam, lParam);
}
lpfn
是托管代码(C#项目)中的方法,它将为其他分析编组和存储参数。当调用该方法时,我想要监视的线程的进程崩溃"访问冲突" (我用来测试钩子的线程是记事本窗口的线程。)
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
MessageBox(NULL, L"Value", L"KeyboardHook", MB_OK);
return CallNextHookEx(HookData[WH_KEYBOARD + 1].hhook, nCode, wParam, lParam);
}
我尝试了这种方式并且工作正常,每当我在记事本的窗口聚焦时按下一个键时显示一个消息框。
那么,有没有办法调用该方法?或者我可能以错误的方式调用该方法?如果我无法调用该方法,那么每次调用回调过程时,是否有另一种方法将回调参数传递给C#项目?