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

这篇开始,我开始讲解一下我的界面开发的全部过程,一步一步的讲解开发界面的过程,这 篇主要讲解的是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。其中的参数就不必介绍了,网 上有很多这方面的资料。

时间: 2024-12-22 16:34:28

界面开发(一)--- Hook所有的窗体的相关文章

界面开发(三)--- 设置窗体的Region

经过上面两篇的界面开发,我们使用Windows的Hook技术,成功的将系统中的窗体的消息截 取,并添加了自己的事件处理程序,这篇文章就是通过我们对这些消息的处理的第一步,设置 窗体的样式和窗体的Region. Region对于窗体来说是一个非常重要的概念,他就是Windows分配给窗体显示的区域,所以 ,我们第一步就是根据我们的需要设计我们的窗体区域.而对于Windows窗体区域的设置, WndProc中的STYLECHANGED,SHOWWINDOW,SIZE,WINDOWPOSCHANGED

界面开发(四)--- 还窗体的新面貌

前一篇给窗体设置了Region,将窗体的FormBorderStyle设置成了None,然后修改了窗体的 显示区域Region.一个本来完好的窗体让我们设置成为了一个空白的没有任何色彩的窗体,这 对我们的界面开发好像是背到而行,有点南辕北辙了.其实不然,只有将窗体上的所有原有的 信息给去除掉,才能还原窗体的本来面貌,给窗体一个新面貌. 这篇就对窗体的界面开发设计一个新面貌. 我在界面开篇的开篇就已经说过,界面开发其实就是修改窗体的两个区域,Client Area和 None Client Are

界面开发(五)--- 界面优化

在上一篇界面开发中,我讲解了将系统界面还原,还原窗体的本来面貌.但是有的博友提出 窗体闪烁,这确实是个问题,原来自己开发的时候也是出现了这个问题.花了两天的时间,重 要修改了个大概,将窗体绘画的次数和窗体的刷新程度进行了修改.首先看看效果: 这是主窗体,在主窗体中不仅修改了窗体的刷新率,而且添加了一个自定义的窗体按钮,使 用了很多的颜色来显示,模仿了Foxmail的界面显示,但是对于除了主窗体外的其他窗体,这些 是不存在的.如下图显示的子窗体: 实现的原理和原来的一样,只不过在原来绘画的基础上减

界面开发(二)--- NativeWindow

NativeWindow是.net Framework提供的一个底层的类.微软官方的解释为:NativeWindow Provides a low-level encapsulation of a window handle and a window procedure.说道这 些也相当于没有说,因为NativeWindow到底是干什么的也没有说清楚,意思就是一个低级别的 对窗体句柄和窗体过程的一个封装.后来查询了很多的资料才明白了其中的意义. 资料来源: http://www.diybl.co

c++-C++ UI开发 界面开发 窗口开发

问题描述 C++ UI开发 界面开发 窗口开发 自学C++的,目前都是照着书本写程序的,书上从win32 API开始讲解,然后讲MFC 很简略,所以我只会用Winmain(win32 API)写很简单的窗体,但是win32 api写 窗口很丑,而且学win32 API主要是打基础,了解程序的运行方式, 然后呢MFC书本讲的很简单,找不到书也找不到相应MSDN, win32 API好歹有个MSDN 所以呢,C++UI开发有哪些软件呢?我要所有的软件名字好有个概念,然后求推荐其中哪个好用 解决方案

WinForm界面开发之布局控件&quot;WeifenLuo.WinFormsUI.Docking&quot;的使用

本篇介绍Winform程序开发中的布局界面的设计,介绍如何在我的共享软件中使用布局控件"WeifenLuo.WinFormsUI.Docking". 布局控件"WeifenLuo.WinFormsUI.Docking"是一个非常棒的开源控件,用过的人都深有体会,该控件之强大.美观.不亚于商业控件.而且控件使用也是比较简单的.先看看控件使用的程序界面展示效果. 配电网络可视化管理系统的界面截图: 深田之星送水管理系统网络版的界面截图: 我在几个共享软件都使用了该布局控

WinForm界面开发之模块化分合

大千世界,合久必分,分久必合,分合之道,利之所趋. 开发过程,积少成多,聚沙成塔,模块之理,必经之路. 本文继续WInform界面开发系列的介绍,主要针对性介绍Winform开发过程中,经常用到的模块:数据字典模块.参数配置模块.权限管理模块的模块化应用,以及各模块的分合之道. 1.数据字典模块 我们知道,一般程序基本上都涉及到了一个是数据参考用途的数据字典模块,不管是Web还是Winform的,这个模块基本上是必不可少的,Winform的界面效果大致如下所示: 本模块的数据字典支持无限级树形分

Java GUI图形界面开发工具

原文http://www.cnblogs.com/bluestorm/archive/2012/08/15/2639863.html 上大学那会儿比较主流 的Java图形开发插件是:Visual Editor 和 SWT Designer, 不久又出了个Jigloo, 但去官网看了下发现这个东西也很久没有更新了,不过据说短小精悍,五脏俱全.SWT Designer不久前也被Google收购后重新整合进自己的产品中,然后开源了,现在名字叫:WindowBuilder Pro,看上去界面组件很丰富强

桌面环境-windows 桌面程序的界面开发用的是什么?

问题描述 windows 桌面程序的界面开发用的是什么? 就像现在看到的qq之类的,界面看起来还是比较美观的,它是用的什么工具?语言?开发的呢? ,不可能是java开发的吧,Java的swing和awt应该是好几年前用来做界面的吧! 那目前比较流行的的桌面面开发用的是什么呢? 解决方案 c++,qq用到了direct UI,还有很多皮肤库.还有用web UI的. 解决方案二: 一般用C#,微软自己的系统自己的开发环境,这是最完美的组合.有wpf和winforms 解决方案三: VS Java 很