ChristopherManzi/input-monitor

GitHub: ChristopherManzi/input-monitor

一个基于 Win32 Raw Input API 的 Windows 桌面小组件,实时显示并记录所有键盘、鼠标和 HID 设备的输入事件及其技术细节,用于开发调试和外设分析。

Stars: 0 | Forks: 0

# 输入监视器 一个微型 Windows 小组件,用于显示**所有输入**:键盘、鼠标、HID 设备(游戏手柄、演示器等),以及设备的插入和移除。每项输入都会显示所有可读取的详细信息 —— 适用于调试、在您自己的软件中对特殊设备进行逆向工程,或者仅仅是为了查看某个按键实际发送了什么。 ## 用法 ``` dotnet run --project InputMonitor.csproj -- --history 10 ``` 或者使用相同的参数运行已构建的 EXE。 * 该小组件出现在右下角,始终置顶,并且可以自由**拖动**(点击其上的任意位置并拖动即可)。 * **最近一次输入**会以大号字体显示,下方包含其所有详细信息、**源设备**,并且在鼠标移动时,会显示一条包含位置和增量的实时数据行。 * 其下方是最近 *N* 条输入的**历史记录**,按类型(键盘、鼠标、HID、设备)进行着色。 * 一个**通知区域(系统托盘)图标**:右键单击可打开菜单,双击可切换小组件的可见性。 ## 命令行参数 | 参数 | 作用 | |---|---| | `--history N`, `-n N` | 历史记录长度,`N` 介于 1 到 25 之间(默认为 5)。也可以在上下文菜单中更改。 | | `--record PATH`, `-r PATH` | 立即开始记录到文件(见下文)。 | | `--help`, `-?` | 显示帮助 | ## 上下文菜单(托盘图标) * **显示 / 隐藏小组件** * **历史记录长度** – 3 / 5 / 10 / 15 / 20 / 25,可在运行时更改 * **开始 / 停止录制** * **退出** ## 录制(日志记录) 录制会将每次捕获的输入作为 TSV 文件(制表符分隔,可直接在 Excel/LibreOffice 中打开)写入您选择的位置。列包括:时间、类型、输入、技术信息、设备、备注。现有文件会被**追加**内容,绝不会被覆盖。鼠标移动被刻意不记录在日志中(否则会填满文件)—— 而按键、鼠标按键、滚轮、HID 报告和设备更改则会被记录。 **警告,强耦合:** 在录制期间,屏幕顶部会出现一个红色的闪烁条,上面写着“正在录制输入”。它是置顶的、可穿透点击的,并且**无法隐藏或通过点击取消** —— 只有从菜单停止录制或程序退出时,它才会消失。录制输入属于键盘记录器行为;这种无法忽视的警告是故意设计的。 ## 显示 / 记录的值 | 字段 | 含义 | |---|---| | 大号文本行 | 以可读形式显示的输入,合并了组合键(`Shift + F5 ↓`) | | `VK 0x22 VK_NEXT` | 虚拟键代码(Virtual-key code)—— 这是在您自己的软件中需要检查的值 | | `Scan 0x51 E0` | 硬件扫描代码,`E0`/`E1` = 扩展键 | | `WM_KEYDOWN` | 对应的窗口消息 | | `char 'A'` | 该按键在当前键盘布局下产生的字符 | | `Flags 0x0400 RI_MOUSE_WHEEL` | 鼠标按键 / 滚轮的原始标志 | | `delta +120 (1 notch)` | 滚轮增量 | | `screen x,y · Δ dx,dy` | 光标位置和移动量 | | 设备行 | 源设备的产品名称、VID/PID、类型和技术数据。`Windows (synthetic)` = 该输入没有源设备(例如,从 HID 报告生成的音量键) | ## 为什么使用 Raw Input 程序没有使用普通的输入事件,而是使用了 Win32 Raw Input API: * 借助 `RIDEV_INPUTSINK`,即使**当另一个窗口获得焦点**时,输入仍然会被接收。 * 这是查看**源设备**的唯一方式。当两个设备发送相同的代码时,这是区分它们的唯一方法。 * 特殊键、多媒体键、HID 报告和设备更改都能可靠地传达。 ## 布局 | 文件 | 内容 | |---|---| | `App.xaml(.cs)` | 启动、参数、带菜单的托盘图标、录制控制 | | `MainWindow.xaml(.cs)` | 小组件:最近输入、实时鼠标、历史记录、拖放、Raw Input hook | | `RecordingBanner.xaml(.cs)` | 无法隐藏的红色录制警告条 | | `RawInputListener.cs` | 针对每种输入类型的 Raw Input 注册和解析 | | `DeviceCatalog.cs` | 解析每个设备的产品名称、VID/PID 和技术数据 | | `InputEvent.cs` | 单个输入事件的数据模型 | | `InputLogger.cs` | 写入 TSV 录制文件 | | `Win32.cs` | P/Invoke 声明和结构 | | `VirtualKeys.cs` | VK 代码 → 显示文本 / `VK_*` 名称 / `Keys` 名称 | 环境要求:Windows 和 .NET 9 SDK。
标签:HID设备, 桌面组件, 输入监控