我有C ++ DLL,它实现了CTB_HOOK和c#app,我可以从中调用这个DLL。
系统调用以下函数来拦截挂钩线程的消息(在激活,创建,销毁,最小化,最大化,移动或调整窗口大小等之前)。我想将nCode
传递给我的c#应用程序。
static LRESULT CALLBACK CBTHookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode == HCBT_ACTIVATE)
{
MessageBox(NULL, TEXT("HCBT_ACTIVATE"), TEXT("inside hook"), MB_OK);
}
//here I want to pass nCode(code of intercepted message) to my c# app.
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
首先尝试从C ++代码(good article on this topic)使用callback
到C#。但很快我就意识到我无法通过指向c#_callback_function
到CBTHookProc
的指针(我想将指针保存到c#_callback_function
作为全局变量,但由于每个进程都使用DLL有自己的所有DLL的实例全局没有成功)。
然后我用Google搜索了DLL共享数据,但我只适用于静态变量。
那么,有没有办法从钩子程序回调?或者可能是其他一些从钩子程序中获取数据的方法?