读书人

钩子函数有关问题

发布时间: 2012-08-09 15:59:21 作者: rapoo

求助钩子函数问题
以下为我写的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了,你怎么能调试的到

读书人网 >VC/MFC

热点推荐