65.9K
CodeProject 正在变化。 阅读更多。
Home

全局鼠标和键盘库

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.94/5 (125投票s)

2008年7月23日

CPOL

3分钟阅读

viewsIcon

610250

downloadIcon

27544

易于使用的库,带有全局鼠标和键盘钩子和模拟器。

引言

本文解释了如何使用我创建的鼠标和键盘库。这个库包含两部分:全局鼠标和键盘钩子,以及全局鼠标和键盘模拟器。

全局钩子包含一组遵循 .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 将完成该行的其余部分,**并且**将创建一个空白方法。 这是一个不错的功能,并且节省了很多时间; 使用它!

模拟器

本节将解释如何使用鼠标和键盘模拟器来模拟鼠标点击和键盘按键。 KeyboardSimulatorMouseSimulator 类都是 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);

上面的代码用于模拟按下和释放某个鼠标按钮。 唯一的参数只是三个可能的鼠标按钮的枚举:LeftRightMiddle

移动鼠标位置

// 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;

上面的 XY 是属性。 您可以使用它们来获取鼠标光标的当前位置,也可以设置它们以将鼠标光标移动到新位置。

键盘模拟器

// 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 类。
© . All rights reserved.