捕获窗体外的鼠标/键盘事件(在后台运行的应用程序)

我有一个应用程序在后台运行(最小化/任务托盘)。 我需要能够检测鼠标活动(点击,移动)以及键盘活动。

考虑到我的窗口不是“专注”的限制,这样做的最好方法是什么?

魔术字是windows的钩子。 这些是通过对SetWindowsHookEx ap / invoke调用创build的。 您可以设置一个钩子来监视键盘和鼠标事件等。 通常,这样的钩子是应用程序本地的,但是你也可以创build全局钩子。 Microsoft KB 显示了如何。

但是,请注意,并不是所有types的全局钩子都可以从.NET中使用。 特别是,您只能使用两个: 低级键盘和鼠标挂钩,称为WH_KEYBOARD_LLWH_KEYBOARD_LL 。 幸运的是,这些正是你所需要的。

看看这个库http://globalmousekeyhook.codeplex.com/ 。 它是100%pipe理的C#代码来安装全局鼠标和键盘钩子。 它将低级钩子包装到常见的Windows窗体键盘和鼠标事件中。