我现在的方法是用 SetWindowsHookEx 捕获窗口的创建消息 ,像这样(dll中):
extern "C" __declspec(dllexport) HRESULT __stdcall
InstallrnHook()
{
old_hook = SetWindowsHookEx(WH_CBT , (HOOKPROC)CBTProc , hinstance , NULL); // hinstance 是在 DllEntryPoint 里面读取到的
if(old_hook == NULL)
{
// print err msg
return E_FAIL;
}
return S_OK;
}
然后 CBTProc 我只写了最简单的:
LRESULT CALLBACK CBTProc(int ncode, WPARAM wparam, LPARAM lparam)
{
switch(ncode)
{
case HCBT_ACTIVATE:
break;
}
ret = CallNextHookEx(NULL, ncode, wparam, lparam);
return ret;
}
程序运行了以后,一般的窗口的创建消息 都可以正确检测到。
但是我发现打开 Wireshark 这个程序,开始抓包的时候,我的dll让它崩掉了。。。,
如果不开我的程序直接用 Wireshark 抓包就没问题。
我实在看不出来我这么写有什么问题,我只是注册了一个全局钩子,在回调函数中直接调用下一个钩子而已。
现在只发现和 Wireshark 有冲突。
BTW :程序是BCB下编译的。