HOW TO:在 Visual C# .NET 中设置窗口挂钩
概要
本文以鼠标挂钩为例,介绍如何设置特定于某个线程的挂钩和特定于某个挂钩过程的挂钩。您可以使用挂钩监视特定类型的事件。您可以将这些事件作为一个调用线程与一个特定的线程或同一桌面中的所有的线程关联起来。
返回页首
若要设置一个鼠标挂钩并监视鼠标事件,请按照以下步骤操作:
返回页首
返回页首
返回页首
设置鼠标挂钩
若要设置挂钩,请从 User32.dll 文件中调用 SetWindowsHookEx 函数。此函数可将一个应用程序定义的挂钩过程安装到与此挂钩关联的挂钩链中。若要设置一个鼠标挂钩并监视鼠标事件,请按照以下步骤操作:
| 1. | 启动 Microsoft Visual Studio .NET。 |
| 2. | 在文件菜单上,指向新建,然后单击项目。 |
| 3. | 在新建项目对话框中,单击项目类型下的 Visual C# 项目,然后单击模板下的 Windows 应用程序。在名称框中键入 ThreadSpecificMouseHook。默认情况下将 Form1 添加到项目中。 |
| 4. | 将下面的代码行添加到 Form1.cs 文件中的其他 using 语句后面。 |
| 5. | 在 Form1 类中添加以下代码: |
| 6. | 向窗体添加 Button 控件,然后将下面的代码添加到 Button1_click 过程: |
| 7. | 在 Form1 类中为 MouseHookProc 函数添加下面的代码: |
| 8. | 按 F5 键运行此项目,然后单击窗体上的按钮以设置此挂钩。当指针在窗体上移动时,鼠标坐标将出现在窗体标题栏上。再次单击此按钮可删除此挂钩。 |
在 .NET 框架中不支持全局挂钩
您无法在 Microsoft .NET 框架中实现全局挂钩。若要安装全局挂钩,挂钩必须有一个本机动态链接库 (DLL) 导出以便将其本身插入到另一个需要调入一个有效而且一致的函数的进程中。这需要一个 DLL 导出,而 .NET 框架不支持这一点。托管代码没有让函数指针具有统一的值这一概念,因为这些函数是动态构建的代理。返回页首
参考
有关窗口挂钩的更多信息,请参见下面的 MSDN 文档:

70

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



