想用hook监视crt软件启动,当检测到WMCREATE消息的时候,判断窗口的类名,如果是CRT软件的主界面就弹出提示,可是为什么会弹出来两次呢? 这个窗口的类名没有重复的啊LRESULT CALLBACK CallWndProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode != HC_ACTION)
{
return CallNextHookEx(g_hCallWnd, nCode, wParam, lParam);
}
CWPSTRUCT *cwpstruct = (CWPSTRUCT*)lParam;
if(cwpstruct->message == WM_CREATE)
{
char className[1024];
memset(className, 0, 1024);
int ret = GetClassName(cwpstruct->hwnd, className, 1024);
if(strcmp(className, "VanDyke Software - SecureCRT") == 0)
{
OutputDebugString("ok"); //这句话为何会执行两次?
}
}
return CallNextHookEx(g_hCallWnd, nCode, wParam, lParam);
}
{
if (nCode != HC_ACTION)
{
return CallNextHookEx(g_hCallWnd, nCode, wParam, lParam);
}
CWPSTRUCT *cwpstruct = (CWPSTRUCT*)lParam;
if(cwpstruct->message == WM_CREATE)
{
char className[1024];
memset(className, 0, 1024);
int ret = GetClassName(cwpstruct->hwnd, className, 1024);
if(strcmp(className, "VanDyke Software - SecureCRT") == 0)
{
OutputDebugString("ok"); //这句话为何会执行两次?
}
}
return CallNextHookEx(g_hCallWnd, nCode, wParam, lParam);
}
具体自己再查一下,一个CREATE动作会产生一个钩子消息。
另外,确认一下,你的钩子函数是不是注册了两次。
如果多次注册钩子可能会出错。