SetWindowsHookEx()的回调过程是否包含对托管代码方法的调用?

时间:2014-10-26 17:44:10

标签: c# c++ .net

我只能使用特定于线程的钩子来解决这个问题。 WH_KEYBOARD_LLWH_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#项目?

0 个答案:

没有答案