全局鼠标和键盘库






4.94/5 (125投票s)
易于使用的库,带有全局鼠标和键盘钩子和模拟器。
- 下载 VS 2003 C# 1.1 源代码和示例 - 59.5 KB
- 下载 VS 2005 C# 2.0 源代码和示例 - 69.6 KB
- 下载 VS 2008 C# 3.5 源代码和示例 - 79.7 KB
引言
本文解释了如何使用我创建的鼠标和键盘库。这个库包含两部分:全局鼠标和键盘钩子,以及全局鼠标和键盘模拟器。
全局钩子包含一组遵循 .NET 事件模型的事件,因此如果您之前使用过事件,那么它们应该非常容易使用。
模拟器实际上会模拟鼠标移动、点击、键盘按键等。 这对于宏记录(这是示例项目之一)非常有用,当然,还可以戏弄你的朋友。 :)
背景
我发现了很多钩子和模拟器的代码,但很多代码组织性不是很好,而且有点难用。 这里的目标是创建一个非常简单易用的库,用于处理 .NET 本身不支持的鼠标和键盘操作。
全局钩子
本节将解释如何使用全局钩子,该钩子可以捕获来自任何应用程序的鼠标和键盘事件。 这些事件与 Windows 控件上出现的事件非常相似,因此它们看起来应该很熟悉。
使用鼠标钩子
// Create the mouse hook
MouseHook mouseHook = new MouseHook();
// Capture the events
mouseHook.MouseMove += new MouseEventHandler(mouseHook_MouseMove);
mouseHook.MouseDown += new MouseEventHandler(mouseHook_MouseDown);
mouseHook.MouseUp += new MouseEventHandler(mouseHook_MouseUp);
mouseHook.MouseWheel += new MouseEventHandler(mouseHook_MouseWheel);
// Start watching for mouse events
mouseHook.Start();
...
// Stop watching (don't forget to do this before closing application!)
mouseHook.Stop();
使用键盘钩子
// Create the keyboard hook
KeyboardHook keyboardHook = new KeyboardHook();
// Capture the events
keyboardHook.KeyDown += new KeyEventHandler(keyboardHook_KeyDown);
keyboardHook.KeyUp += new KeyEventHandler(keyboardHook_KeyUp);
keyboardHook.KeyPress += new KeyPressEventHandler(keyboardHook_KeyPress);
// Start watching for keyboard events
keyboardHook.Start();
...
// Stop watching (don't forget to do this before closing application!)
keyboardHook.Stop();
注意:当您设置事件时,Visual Studio 将为您命名并创建一个空白方法。 您只需要在事件中输入这么多...
keyboardHook.KeyDown +=
...然后按两次 TAB 键。 Visual Studio 将完成该行的其余部分,**并且**将创建一个空白方法。 这是一个不错的功能,并且节省了很多时间; 使用它!
模拟器
本节将解释如何使用鼠标和键盘模拟器来模拟鼠标点击和键盘按键。 KeyboardSimulator
和 MouseSimulator
类都是 static
的,因此它们非常易于使用。
模拟鼠标事件
// Press Left Mouse Button Down
MouseSimulator.MouseDown(MouseButton.Left);
// Let Left Mouse Button Up
MouseSimulator.MouseUp(MouseButton.Left);
// Press down and Let up Left Mouse Button
// (equivalent to two lines above)
MouseSimulator.Click(MouseButton.Left);
// Double click Left Mouse button
// (equivalent to two Click()s above)
MouseSimulator.DoubleClick(MouseButton.Left);
上面的代码用于模拟按下和释放某个鼠标按钮。 唯一的参数只是三个可能的鼠标按钮的枚举:Left
、Right
和 Middle
。
移动鼠标位置
// Move mouse cursor to Top Left of screen
MouseSimulator.X = 0;
MouseSimulator.Y = 0;
// Move the mouse cursor to the right by 20 pixels
MouseSimulator.X += 20;
上面的 X
和 Y
是属性。 您可以使用它们来获取鼠标光标的当前位置,也可以设置它们以将鼠标光标移动到新位置。
键盘模拟器
// Press the A Key Down
KeyboardSimulator.KeyDown(Keys.A);
// Let the A Key back up
KeyboardSimulator.KeyUp(Keys.A);
// Press A down, and let up (same as two above)
KeyboardSimulator.KeyPress(Keys.A);
上面的代码将模拟键盘按键。 您可以按下一个键(第一行),但尚未释放它。 第二行 KeyUp
将释放已按下的键,第三行将在一个步骤中完成这两个步骤。
我还包含了一些标准的键盘快捷键。 这些都可以通过上面的代码完成,但它简化了一点,并使代码更具可读性和显而易见。
// Simulate (Ctrl + C) shortcut, which is copy for most applications
KeyboardSimulator.SimulateStandardShortcut(StandardShortcut.Copy);
// This does the same as above
KeyboardSimulator.KeyDown(Keys.Control);
KeyboardSimulator.KeyPress(Keys.C);
KeyboardSimulator.KeyUp(Keys.Control);
上面的代码做了两次完全相同的事情,只是第一个代码更短更明显。
一个示例应用程序:全局宏记录器
宏记录器是这个库的一个很好的例子,因为我们可以使用钩子来记录宏,并使用模拟器来播放。
查看可下载源代码中的 Macro 项目。
未来的添加/修订
随着我收到反馈,我会随着时间的推移编辑和添加到这个库中。 如果您认为应该添加、更改某些内容或发现问题,请在评论部分发布,我将尽力而为。 谢谢。 :)
修订历史
- 7/23/08:发布了三个 .NET 版本的第一个版本。
- 7/28/08:添加了
Application.ApplicationExit
事件以确保停止钩子。 - 8/8/08:删除了 Macro 示例中的调试代码,将
MouseWheel
方法添加到MouseSimulator
类,并删除了MouseSimulator
中使用的重复MousePoint
类。