本人刚学VC不久,现在想写个钩子程序,但是安装钩子没问题,就是按键激活窗体的时候报了一个错误:错误提示如下:
        Debug Assertion Failed!
        program: c:\windows\explorere.exe
        file: afxwin1.inl
         line:22
 
        For infomation on how your ptrogram can cause an assertion
        failure,see the visual c++ ......
  
              出现几个按钮:终止    重试   忽略
出现此问题该如何处理呀,请高手指点指点,谢谢!!

解决方案 »

  1.   

    LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
    {
    BOOL bKeyUp = lParam & (1 << 31);
    if (wParam == VK_F12 && nCode == HC_ACTION)
    {
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    CWnd *pCWnd = CWnd::GetForegroundWindow();
    pCWndWGMain = new CHookDlg();
    pCWndWGMain->Create(IDD_HOOKFRM_DIALOG, pCWnd);
    pCWndWGMain->ShowWindow(SW_SHOW);
    }
    else 
    {
    pCWndWGMain->ShowWindow(pCWndWGMain->IsWindowVisible() ? SW_HIDE : SW_SHOW);
    }
    return ::CallNextHookEx(g_hhook, nCode, wParam ,lParam);
    }钩子程序,激活代码
      

  2.   

    LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
    {
    BOOL bKeyUp = lParam & (1 << 31);
    if (wParam == VK_F12 && nCode == HC_ACTION)
    {
    //AFX_MANAGE_STATE(AfxGetStaticModuleState());
    // CDialog dlg(IDD_ABOUTBOX); 
    // dlg.DoModal();
    //CWnd *pCWnd = CWnd::GetForegroundWindow();
    //pCWndWGMain = new CHookDlg();
    //pCWndWGMain->Create(IDD_HOOKFRM_DIALOG, pCWnd);
    // pCWndWGMain->ShowWindow(SW_SHOW);
    // pCWndWGMain->DoModal();
    // hwndDLG = CreateDialog(hinst,MAKEINTRESOURCE(IDD_HOOKFRM_DIALOG), NULL,(DLGPROC)DlgProc); 
    //ShowWindow(hwndDLG, SW_SHOW); 
    CDialog dlg(IDD_ABOUTBOX); 
    dlg.DoModal();
    }
    else 
    {
    pCWndWGMain->ShowWindow(pCWndWGMain->IsWindowVisible() ? SW_HIDE : SW_SHOW);
    }
    return ::CallNextHookEx(g_hhook, nCode, wParam ,lParam);
    }
      

  3.   

    ASSERT(afxCurrentInstanceHandle != NULL);AFX_MANAGE_STATE(AfxGetStaticModuleState());
    CDialog dlg(IDD_ABOUTBOX); 
    dlg.DoModal();
      

  4.   

    楼上说的是用模态对话框吗,但是在我的类中我加入:AFX_MANAGE_STATE(AfxGetStaticModuleState());
    就编译错误,我关掉AFX_MANAGE_STATE后可以正常编译,但是在主exe中按键可以激活并能正常显示要调用的窗体,但是其它地方按键的话还是会报错,比如:记事本里
      

  5.   

    运行后报错代码如下:
    LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
    {
    BOOL bKeyUp = lParam & (1 << 31);
    if (wParam == VK_F12 && nCode == HC_ACTION)
    {
          //AFX_MANAGE_STATE(AfxGetStaticModuleState());如果加上编译就错误,提示 
             _DllMain@12 already defined in threeDll.obj
             __pRawDllMain already defined in threeDll.obj; second definition ignored
            等等错误 
    CWnd *pCWnd = CWnd::GetForegroundWindow();
    pCWndWGMain = new CHookDlg();
    pCWndWGMain->Create(IDD_HOOKFRM_DIALOG, pCWnd);
    pCWndWGMain->ShowWindow(SW_SHOW);
    }
    else 
    {
    pCWndWGMain->ShowWindow(pCWndWGMain->IsWindowVisible() ? SW_HIDE : SW_SHOW);
    }
    return ::CallNextHookEx(g_hhook, nCode, wParam ,lParam);
    }