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

18

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

考虑到我的窗口没有"焦点",那么最好的方法是什么?


你为什么要尝试做这件事? - Fosco
12
不管为什么,你不必在这里解释提问背后的动机。 - C4F
2个回答

17

看一下这个库 globalmousekeyhook。 它是用 100% 托管的 c# 代码来安装全局鼠标和键盘钩子。 它将底层钩子封装成常见的窗体键盘和鼠标事件。


这个方法很好用,而被采纳的答案的方法不行(只返回一个空的钩子句柄,没有错误)。感谢分享。 - nhaggen

12

关键词是窗口钩子。这些通过对 SetWindowsHookEx 进行 p/Invoke 调用创建。您可以设置挂钩来监视键盘和鼠标事件等。通常,此类挂钩仅限于应用程序,但您也可以创建全局挂钩。Microsoft KB 展示了如何实现

但是,请注意并非所有类型的全局挂钩都可以从 .NET 中使用。特别地,只有两种您可以使用:低级别键盘和鼠标挂钩,称为WH_KEYBOARD_LLWH_MOUSE_LL。幸运的是,这正是您所需要的。


这是在 SO 允许使用外部代码示例的时期吗? - NtFreX
可能吧。因为这是几屏幕的代码,所以我现在不想编辑它。 - Thomas
看起来那个页面已经不存在了 - 可以在betaarchive.com找到。 - NetMage

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接