第5讲Windows消息机制及HOOK应用
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
19
苏曙光.软件学院.华中科技大学
20
窗口类
typedef struct { UINT style; WNDPROC lpfnWndProc; int cbClsExtra; int cbWndExtra; HINSTANCE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH hbrBackground; LPCTSTR lpszMenuName; LPCTSTR lpszClassName;
……
苏曙光.软件学院.华中科技大学
6
应用
在自己编写的程序中,通过向其它程序发送 Windows消息,从而达到控制该程序的目的
苏曙光.软件学院.华中科技大学
7
获取窗口句柄的的API函数
FindWindow 函数 通过指定应用程序顶层主窗口的类名和标题名, 返回它的句柄。
HWND FindWindow( LPCTSTR lpClassName, //窗口所属的类的名称 LPCTSTR lpWindowName ); //窗口的标题 函数返回值: 如果查到该窗口返回其句柄。
)
苏曙光.软件学院.华中科技大学
22
//窗口过程 //参数:窗口句柄,消息,消息参数,消息参数 LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { //处理感兴趣的消息 switch (message) { case WM_DESTROY: PostQuitMessage (0) ; return 0 ; case WM_ONCOMMAND//用户选择了菜单消息
先进软件开发技术与工具
第05讲 Windows消息机制及HOOK应用
苏曙光百度文库
Huazhong University of Science and Technology
内容 事件/消息驱动 HOOK机制
苏曙光.软件学院.华中科技大学
2
1. Windows事件驱动机制
DOS程序的特点 顺序驱动和过程驱动
注意:其中h为父窗口的句柄, 子窗口句柄为0表示搜索所有的子窗口,子窗口标题不知道就 使用nil。
苏曙光.软件学院.华中科技大学
16
双击“发送文本到记事本中”按钮,在生成的单击响应事 件过程中,编写代码:
苏曙光.软件学院.华中科技大学
17
苏曙光.软件学院.华中科技大学
18
苏曙光.软件学院.华中科技大学
{
//分析菜单项,作出不同处理
苏曙光.软件学院.华中科技大学
8
FindWindowEx 函数
查找指定应用程序顶层主窗口中的子窗口的句柄。 参数说明
HWND FindWindowEx( HWND hwndParent, //要找的子窗口所在父窗口的句柄 HWND hwndChildAfter, //子窗口的句柄 LPCTSTR lpszClass, //子窗口的类名 LPCTSTR lpszWindow ); //子窗口的标题名
苏曙光.软件学院.华中科技大学
21
窗口过程
用窗口过程来分发和处理消息
窗口类登记的窗口过程
LRESULT CALLBACK MainWndProc (
HWND hwnd, // 窗口句柄
UINT msg,
// 消息标识
WPARAM wParam, //消息参数1
LPARAM lParam //消息参数2
函数返回值 如果查到该子窗口,则返回它的句柄。
苏曙光.软件学院.华中科技大学
9
向窗口发送消息
发送 sendmessage sendmessagecallback sendnotifymessage sendmessagetimeout
寄送 postmessage postthreadmessage postquitmessage
Windows程序的特点 操作无序 事件驱动 以消息为中心
苏曙光.软件学院.华中科技大学
3
WINDOWS消息处理过程
苏曙光.软件学院.华中科技大学
4
队列消息 基本上是用户输入的结果
击键(如WM_KEYDOWN和WM_KEYUP消息) 击键产生的字(WM_CHAR) 鼠标移动(WM_MOUSEMOVE)和鼠标按钮
广播 broadcastsystemmessage
苏曙光.软件学院.华中科技大学
10
苏曙光.软件学院.华中科技大学
11
例子2
苏曙光.软件学院.华中科技大学
12
打开附件中的“记事本”程序,使用Spy++小工具查找 “记事本”程序主窗口的标题名和窗口类名。
苏曙光.软件学院.华中科技大学
13
//函数参数意义(参数1: 窗口所属的类名; 参数2: 窗口的标题名;) h:=FindWindow('Notepad','无标题 - 记事本'); //查找"记事本"父窗口的句柄
苏曙光.软件学院.华中科技大学
14
使用Spy++工具查找“记事本”程序子窗口的标 题名和窗口类名。
苏曙光.软件学院.华中科技大学
15
//函数参数意义(参数1: 子窗口所在父窗口的句柄; 参数2: 子窗口的句柄;
//参数3:子窗口的标题名)
h1:=FindWindowEx(h,0,'Edit',nil); //查找"记事本"子窗口(文本框)的句柄
(WM_LBUTTONDOWN) 时钟消息(WM_TIMER) 更新消息(WM_PAINT) 退出消息(WM_QUIT)
苏曙光.软件学院.华中科技大学
5
非队列消息
在许多情况下,来自调用特定的Windows函数。 CreateWindow(WM_CREATE消息) ShowWindow(WM_SIZE和WM_SHOWWINDOW消息) UpdateWindow(WM_PAINT消息)
} WNDCLASS, *pWNDCLASS;
lpfnhlpWCszMnudernsPuoNrroamce 指改该向字鼠成符窗串标员口描指必述过菜针须程单的为的的资句一指源柄个名针。指。 针资源的句柄。如果 hCursor为NULL,应 用程序必须在指针移 入应用程序窗口时显 式设置指针类型。
hbrBackground 背景画刷的句柄。