求助钩子函数问题
以下为我写的dll中部分代码,dll的功能就是小键盘输入。执行调用程序,点击该程序界面上的一个编辑框就会调用dll中的对话框。我要做的是在dll中安装一个钩子,当关闭调用程序界面的对话框时,将dll中的对话框也关闭。实际运行时,出现很多很多显示“123”的消息框,后来我在回调函数messagebox处设置断点,发现程序不会执行到那个断点处,消息框却还是出现了。求高手赐教!
- C/C++ code
HHOOK hooker = NULL; //钩子函数句柄LRESULT CALLBACK HookProc(int nCode,WPARAM wParam,LPARAM lParam){ if(nCode < 0) return CallNextHookEx(hooker,nCode,wParam,lParam); MSG* msg = (MSG*)lParam; HWND hWnd1 = NULL; if((msg->hwnd) == hwndDesImport && (msg->message) == WM_DESTROY) { if(dlg != NULL) hWnd1 = dlg->GetSafeHwnd(); MessageBox(hWnd1,"123","123",MB_OK); SendMessage(hWnd1,WM_CLOSE,0,0); } return CallNextHookEx(hooker,nCode,wParam,lParam);}//在对话框初始化时安装钩子BOOL CInputDialog::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here GdiplusStartup(&m_GdiplusToken, &m_GdiplusStartupInput, NULL); HINSTANCE hInstance = AfxGetInstanceHandle(); HWND hExe = NULL; hExe = ::FindWindow("IME",NULL); if(hExe == NULL) hExe = ::FindWindow("ZPMainFrame",NULL); if(hExe != NULL) hooker=SetWindowsHookEx(WH_CALLWNDPROC ,HookProc,hInstance,NULL); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE}//销毁对话框时卸载钩子void CInputDialog::OnCancel(){ if(hooker != NULL) { UnhookWindowsHookEx(hooker); hooker = NULL; } ::SendMessage(m_hParaWnd,WM_MODELESSDLGQUIT,0,0); CDialog::OnCancel(); if(dlg != NULL) delete this; dlg = NULL;}
[解决办法]
出现很多很多显示“123”的消息框?
不要hook所有线程
[解决办法]
你这不是按得全局钩子么,就是系统内的所有窗口都被hook了,你怎么能调试的到