目录
前言
在自动化操作、游戏辅助、软件测试等领域,键盘和鼠标事件的模拟与录制回放功能具有广泛的应用需求。
传统的"按键精灵"类工具虽然功能强大,但往往封闭性强、难以集成到开发项目中。一个基于 GlobalMouseKeyHook 和 InputSimulator 的开源类库应运而生,提供了一个灵活、可扩展的键鼠事件捕获与模拟解决方案。
该项目为开发提供了丰富的接口和高度定制化的功能,适用于 .NET Framework 4.0 及以上版本,是一个轻量级、高性能的键鼠操作模拟与录制工具库。
项目介绍
项目是一个基于 C# 编写的开源扩展类库,旨在为 .NET 开发者提供完整的键盘与鼠标事件监控、录制及回放能力。它利用了两个核心组件:
GlobalMouseKeyHook:用于全局监听键盘和鼠标事件;
InputSimulator:用于模拟用户输入行为(如按键、点击等);
通过这两个库的结合,开发者可以轻松实现类似"按键精灵"的自动化脚本功能,包括录制用户的键鼠操作并进行回放。
项目支持多个 .NET Framework 分支,主分支支持 .NET Framework 4.0,另有专为 .NET Framework 4.8 设计的独立分支。

项目功能
1、键鼠事件监听
支持全局监听键盘按下、释放、输入事件;
支持监听鼠标移动、点击、双击、拖拽等操作;
提供事件过滤机制,可启用或禁用特定类型的事件。
2、操作录制与回放
用户可启动录制功能,自动记录所有键鼠操作;
录制内容可保存为列表对象,便于后续处理;
支持对录制的操作进行精确回放,模拟原始用户行为。
3、输入模拟
利用 InputSimulator 模拟真实用户输入;
支持多种模拟模式,包括单次按键、连续输入、鼠标动作等;
提供 API 接口,方便集成到各种桌面应用中。
4、事件类型控制
可根据需要启用或禁用某些事件类型,例如只监听鼠标双击而不监听鼠标移动;
提高性能并减少不必要的资源消耗。
项目特点
| 特点 | 描述 |
|---|---|
| ✅ 轻量高效 | 类库结构清晰,占用资源少,适合嵌入式使用 |
| ✅ 高度可定制 | 支持事件过滤、自定义回放逻辑 |
| ✅ 易于集成 | 提供完整示例代码,便于快速上手 |
| ✅ 多平台兼容 | 支持 .NET Framework 4.0 及以上版本 |
| ✅ 开源开放 | 所有源码公开,持续更新维护 |
| ✅ 灵活扩展 | 可作为基础模块二次开发,构建更复杂的自动化系统 |
项目技术
该项目采用 C# 编写,依托于两个关键第三方库:
GlobalMouseKeyHook:用于钩子拦截系统级别的键鼠事件;
InputSimulator:用于模拟用户输入行为,实现自动化操作。
类库设计上采用了工厂模式与观察者模式,通过 KeyMouseFactory 创建不同的事件监听器(如 KeyboardWatcher 和 MouseWatcher),并通过事件委托(Event Handler)机制捕捉用户输入。
录制与回放流程清晰,支持将录制的事件序列化为列表对象,并可通过 InputSimulator 进行逐条回放。此外,项目还提供了详细的使用文档和示例代码,极大降低了开发的接入门槛。
在性能方面,项目通过事件过滤机制减少了不必要的资源消耗,同时保持了较低的 CPU 占用率,适合长时间运行的场景。
项目使用
private readonly KeyMouseFactory eventHookFactory = new KeyMouseFactory(HookType.GlobalEvents);
privatereadonly KeyboardWatcher keyboardWatcher;
privatereadonly MouseWatcher mouseWatcher;
private List<MouseKeyEvent> _mouseKeyEvents;
public FormMain()
{
InitializeComponent();
keyboardWatcher = eventHookFactory.GetKeyboardWatcher();
keyboardWatcher.OnKeyboardInput += (s, e) =>
{
if (_mouseKeyEvents != null)
_mouseKeyEvents.Add(e);
};
mouseWatcher = eventHookFactory.GetMouseWatcher();
mouseWatcher.OnMouseInput += (s, e) =>
{
if (_mouseKeyEvents != null)
_mouseKeyEvents.Add(e);
};
}
private void StartWatch(IKeyboardMouseEvents events = null)
{
_macroEvents = new List<MacroEvent>();
keyboardWatcher.Start(events);
mouseWatcher.Start(events);
}
private void StopWatch()
{
keyboardWatcher.Stop();
mouseWatcher.Stop();
}
private void Playback()
{
var sim = new InputSimulator();
//var sim = new KeyMouseSimulator();
sim.PlayBack(_macroEvents);
}
keyboardWatcher = eventHookFactory.GetKeyboardWatcher().Disable
(MacroEventType.KeyDown | MacroEventType.KeyUp).Enable(MacroEventType.KeyPress);
mouseWatcher = eventHookFactory.GetMouseWatcher().
Enable(MacroEventType.MouseDoubleClick | MacroEventType.MouseDragStarted).Disable
(MacroEventType.MouseDragFinished | MacroEventType.MouseMove);
var sim = new InputSimulator().Enable(MacroEventType.MouseDoubleClick | MacroEventType.KeyPress).Disable
(MacroEventType.MouseMove | MacroEventType.KeyDown | MacroEventType.KeyUp);
项目效果

项目源码
Gitee:https://gitee.com/loamen/KeyMouseHook
总结
随着自动化需求的不断增长,键鼠操作的模拟与录制已成为许多应用场景中不可或缺的功能。本项目基于成熟的技术栈,结合简洁的设计理念,为开发提供了一套稳定、高效的键鼠事件处理方案。无论是用于软件测试、自动化任务还是桌面辅助工具开发,都是一个值得信赖的选择。

8584

被折叠的 条评论
为什么被折叠?



