全局钩子:我写了一个截取IE下载提示框的HOOK子程,功能是在IE弹出下载提示框前先弹出一个对话框,来确认是否下载,如果点确定则弹出IE的下载框,取消则不下载。问题是,我在点确定后,没有下载框,什么动作都没有,好像消息无法通过CallNextHookEx来传递下去。高手解释为什么,谢谢。
下面是DLL的代码:
LRESULT CALLBACK CallWndProc(int nCode,WPARAM wParam,LPARAM lParam)
{
PCWPSTRUCT pCwp=NULL;
CString strClassName; // 窗口的标题
HWND hWnd = NULL;
if (nCode < 0)
{
return CallNextHookEx(g_Hook,nCode,wParam,lParam);
}
if (NULL != lParam)
{
pCwp = (PCWPSTRUCT) lParam;
if (WM_CREATE == pCwp -> message) //HOOK WM_CREATE 消息
{
//::GetClassName (pCwp->hwnd,strClassName.GetBufferSetLength(128),128);
::GetWindowTextA(pCwp->hwnd,strClassName.GetBufferSetLength(128),128);
if (0==strClassName.CompareNoCase("文件下载"))//看WM_CREATE 消息是否要创建标题为 文件下载 的对话框
{
msgget=MessageBox(NULL,TEXT("您确定要下载该文件吗?"),TEXT("下载确认"),1);
if(msgget==IDOK)
{
//MessageBox(NULL,TEXT("if"),TEXT("2"),0);
return CallNextHookEx(g_Hook,nCode,wParam,lParam);
}
else
{
//MessageBox(NULL,TEXT("else"),TEXT("2"),0);
return 1;
}
}
else
{
return CallNextHookEx(g_Hook , nCode , wParam , lParam);
}
}
else
{
return CallNextHookEx(g_Hook , nCode , wParam , lParam);
}
}
else
{
return CallNextHookEx(g_Hook , nCode , wParam , lParam);
}
}
安装钩子的函数
void SetHook()
{
HINSTANCE hmodHook = GetModuleHandle ("hook.dll");
g_Hook=(HHOOK)SetWindowsHookEx(WH_CALLWNDPROC,(HOOKPROC)CallWndProc,hmodHook,0);
}
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课