• [织梦吧]唯一域名:www.dedecms8.com,织梦DedeCMS学习平台.

当前位置: > 编程与数据库 > net编程 >

界面开发(一)--- Hook所有的窗体

来源: www.dedecms8.com 编辑:织梦吧 时间:2012-06-28点击:

 这篇开始,我开始讲解一下我的界面开发的全部过程,一步一步的讲解开发界面的过程,这 篇主要讲解的是Hook编程,Hook所有的窗体。

Hook,对于大多数程序员来说,这个词并不陌生。对于Windows系统来说,消息Message的传 递贯穿了整个系统,Message简单来说就是一个整数,它具有相应的意义。在C++的winuser.h中 可以看到我们常用的很多的Message。Hook与Message是密不可分的,它的中文解释就是“钩子 ”,就是监控系统中Message的传递,就是在Message传递到最终的Message处理前,对特定的消 息进行处理。

对于Hook来说,开发主要的有3个API函数,均放在User32.dll文件中,这三个函数是:

Hook

1         /// <summary>
2         ///  SetWindowsHookEx
3         /// </summary>
4          /// <param name="idHook"></param>
5         ///  <param name="lpfn"></param>
6         /// <param  name="hMod"></param>
7         /// <param  name="dwThreadId"></param>
8         ///  <returns></returns>
9         [DllImport("User32.dll",  CharSet = CharSet.Auto)]
10         public static extern IntPtr  SetWindowsHookEx(int idHook, HookProc lpfn, int hMod, int  dwThreadId);
11
12         /// <summary>
13          /// CallNextHookEx
14         /// </summary>
15          /// <param name="hhk"></param>
16         ///  <param name="nCode"></param>
17         /// <param  name="wParam"></param>
18         /// <param  name="lParam"></param>
19         ///  <returns></returns>
20         [DllImport("User32.dll",  CharSet = CharSet.Auto)]
21         public static extern IntPtr  CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr  lParam);
22
23         /// <summary>
24          /// UnhookWindowsHookEx
25         /// </summary>
26          /// <param name="hhk"></param>
27         ///  <returns></returns>
28         [DllImport("User32.dll",  CharSet = CharSet.Auto)]
29         public static extern bool  UnhookWindowsHookEx(IntPtr hhk);

这三个方法分别就是添加Hook,释放Hook和执行下一个Hook。其中的参数就不必介绍了,网 上有很多这方面的资料。接下来就是对Windows窗体的消息截取。

我创建一个项目名称叫做SkinEngines,然后再NativeMethod中添加了这三个方法。其中 SetWindowsHookEx中需要一个参数就是一个方面的名称,在C#中使用委托实现,所以也创建了 一个专门保存委托的地点,放在 Delegates.cs文件中。

About D8

  • ©2014 织梦吧(d8) DedeCMS学习交流平台
  • 唯一网址 www.DedeCMS8.com 网站地图
  • 联系我们 1170734538@qq.com ,  QQ