
Windows消息相关
kybd2006
联系方式:kybd2006@hotmail.com(MSN)
展开
-
深入解析钩子和动态链接库(上)
下载源代码 - 22 Kb 对于如何使用和创建钩子有许多的争议,这篇文章试图澄清这些问题。 注意:如果你只是在自己的进程内使用钩子则不会有下面的问题, 这只发生在你使用系统钩子的时候。关键问题在于 地址空间,DLL函数中的代码所创建的任何对象(包括变量)都归调用它的线程或进程所有。当进程在载入DLL时,操作系统自动把DLL地址映射到该进程的私有空间,也就是进程的虚拟地址空间,而且也复制该D原创 2007-07-16 18:07:00 · 804 阅读 · 0 评论 -
MFC消息响应机制
所有MFC的窗口类都通过钩子函数_AfxCbtFilterHook截获消息,并且在钩子函数_AfxCbtFilterHook中把窗口过程设定为AfxWndProc。原来的窗口过程保存在成员变量m_pfnSuper中。----所以在MFC框架下,一般一个消息的处理过程是这样的。 函数AfxWndProc接收Windows操作系统发送的消息。 函数AfxWndPro原创 2007-06-05 11:43:00 · 1188 阅读 · 0 评论 -
钩子的类型和实现
Windows系统是建立在事件驱动的机制上的,说穿了就是整个系统都是通过消息的传递来实现的。而钩子是Windows系统中非常重要的系统接口,用它可以截获并处理送给 其他应用程序的消息,来完成普通应用程序难以实现的功能。钩子可以监视系统或进程中的各种事件消息,截获发往目标窗口的消息并进行处理。这样,我们就可以在系统中安装自定义的钩子,监视系统中特定事件的发生,完成特定的功能,比如截原创 2007-09-03 19:17:00 · 1094 阅读 · 0 评论 -
钩子的类型和实现(续)
编写钩子程序 编写钩子程序的步骤分为三步:定义钩子函数、安装钩子和卸载钩子。 1.定义钩子函数 钩子函数是一种特殊的回调函数。钩子监视的特定事件发生后,系统会调用钩子函数进行处理。不同事件的钩子函数的形式是各不相同的。 下面以鼠标钩子函数举例说明钩子函数的原型: LRESULT CALLBACK HookProc(int nCode ,W原创 2007-09-03 19:19:00 · 665 阅读 · 0 评论 -
自定义消息获取消息
1. 自定义消息(1) 手工定义消息,可以这么写 #define WM_MY_MESSAGE(WM_USER+100), MS 推荐的至少是 WM_USER+100;(2)写消息处理函数,用 WPARAM,LPARAM返回LRESULT.LRESULT CMainFrame::OnMyMessage(WPARAM wparam,LPARAM lParam){//加入你的处理函数}(3) 在类的 A原创 2007-10-23 10:05:00 · 724 阅读 · 0 评论 -
WTL 消息流
在_tWinMain里做了一些初始化函数之后,就进入了Run函数,显然Run函数就是消息循环。下面是Run函数的代码:int Run(LPTSTR /*lpstrCmdLine*/ = NULL, int nCmdShow = SW_SHOWDEFAULT){ CMessageLoop theLoop; _Module.AddMessageLoop(&t原创 2007-09-27 13:51:00 · 1953 阅读 · 0 评论 -
Windows消息机制要点
Windows消息机制要点 By SmartPtr(http://www.cppblog.com/SmartPtr/) 1. 窗口过程 每个窗口会有一个称为窗口过程的回调函数(WndProc),它带有四个参数,分别为:窗口句柄(Window Handle),消息ID(Message ID),和两个消息参数(wParam, lParam), 当窗口收到消息时系统就会调用此窗口过程来处理消息。原创 2007-11-08 15:33:00 · 1244 阅读 · 0 评论 -
Window 消息大全使用详解
消息,就是指Windows发出的一个通知,告诉应用程序某个事情发生了。例如,单击鼠标、改变窗口尺寸、按下键盘上的一个键都会使Windows发送一个消息给应用程序。消息本身是作为一个记录传递给应用程序的,这个记录中包含了消息的类型以及其他信息。例如,对于单击鼠标所产生的消息来说,这个记录中包含了单击鼠标时的坐标。这个记录类型叫做TMsg,它在Windows单元中是这样声明的:typeTMsg = p原创 2007-11-15 12:29:00 · 755 阅读 · 0 评论 -
SendMessage函数完全使用手册
首先 我们了解一下Windows的消息机制。Windows是一个消息驱动式系统,Windows消息提供应用程序与应用程序之间,应用程序与Windows系统之间进行通信的手段。举个例子,打开记事本程序,该程序有一个 “文件“菜单。 那么,在运行该程序的时候,如果用户单击“文件菜单“里的“新建“命令, 这个动作将被Windows所捕捉,Windows经过分析得知这个动作应该由我们打开的记事本程序所来处原创 2007-11-15 08:28:00 · 1264 阅读 · 0 评论 -
HOOK函数
这种函数是Windows消息处理机制的一部分,通过设置“钩子”,应用程序可以在系统级对所有消息、事件进行过滤,访问在正常情况下无法访问的消息。当然,这么做也是需要付出一定的代价的。由于多了这么一道处理过程,系统性能会受到一定的影响,所以大家在必要的时候才使用“钩子”,并在使用完毕及时将其删除。首先让我们看看HOOK函数是怎么安装、调用和删除的。应用程序通常是调用SetWindowsHookEx()原创 2007-11-16 08:22:00 · 1029 阅读 · 0 评论 -
消息钩子函数
Windows系统是建立在事件驱动的机制上的,说穿了就是整个系统都是通过消息的传递来实现的。而钩子是Windows系统中非常重要的系统接口,用它可以截获并处理送给其他应用程序的消息,来完成普通应用程序难以实现的功能。钩子可以监视系统或进程中的各种事件消息,截获发往目标窗口的消息并进行处理。这样,我们就可以在系统中安装自定义的钩子,监视系统中特定事件的发生,完成特定的功能,比如截获键盘、鼠标的输入,原创 2007-11-16 13:06:00 · 964 阅读 · 0 评论 -
MFC中消息映射MESSAGE_MAP宏
#define DECLARE_MESSAGE_MAP() /protected: / static const AFX_MSGMAP* PASCAL GetThisMessageMap(); / virtual const AFX_MSGMAP* GetMessageMap() const; /#define BEGIN_MESSAGE_MAP(theClass, baseClass) /原创 2007-05-31 16:09:00 · 1091 阅读 · 0 评论 -
HOOK启思录---第一章 HOOK的发展
非常遗憾,HOOK的发展史不是那么清晰可见。事实上,HOOK到底是什么,很多人的说法都不一样。最早是在操作系统中出现的HOOK概念。在Unix/Linux/Windows中都有类似概念。当时提出的目的在于,允许用户在系统调用过程中,插入自己的代码处理特殊事情。典型的HOOK就是用自己的功能替换原有的函数点,在处理完成之后,又恢复原有的函数点。(这里“点”就是表示一个可以使用HO转载 2007-08-24 18:31:00 · 846 阅读 · 0 评论 -
深入解析钩子和动态链接库(下)
/***************************************************************** clearMyHook* Inputs:* HWND hWnd: Window whose hook is to be cleared* Result: BOOL* TRUE if原创 2007-07-17 14:29:00 · 689 阅读 · 0 评论 -
使用用户自定义消息
第一步:定义消息。一个消息实际上是开发 Windows95 应用程序时, Microsoft 推荐用户自定义消息至少是 WM_USER+100 ,因为很多新控件也要使用 WM_USER 消息。第二步:实现消息处理函数。该函数使用 WPRAM 和 LPARAM 参数并返回 LPESULT 。LPESULT CMainFrame::OnMyMessage(WPARAM wParam, LPARAM原创 2007-07-16 09:20:00 · 906 阅读 · 0 评论 -
深入解析钩子和动态链接库(中)
你必须做的第一件事是创建共有的数据段。所以我们使用# pragma data_seg声明。使用某一好记的数据段名字(它必须是没有比8 个字符长) 。我想强调名字是任意的,这里使用了我自己的名字。我发现如果我使用好的名字象.SHARE 或.SHR 或.SHRDATA,别人会认为名字有特殊的意义。但是,我要说NO。# pragma data_seg(".JOE")HANDLE hW原创 2007-07-17 14:27:00 · 734 阅读 · 0 评论 -
PeekMessage和GetMessage函数
PeekMessage和GetMessageGetMessage(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax)PeekMessage(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax,UINT wRemoveMs原创 2007-04-21 16:37:00 · 1027 阅读 · 0 评论 -
Posting Messages和Sending Messages
Posting and Sending Messages 应用程序可以post和send消息,通过将消息复制到消息队列即post消息,send消息将消息数据作为参数直接传递到窗口过程。可以使用PostMessage来post消息,SendMessage,BroadcastSystemMessage, SendMessageCallback来send消息。Posting Mes原创 2007-04-23 10:29:00 · 1208 阅读 · 0 评论 -
PostMessage 与 SendMessage 函数对比
SendMessage把消息直接发送到窗口,并调用此窗口的相应消息处理函数,等消息处理函数结束后SendMessage才返回!SendMessage发送的消息不进入系统的消息队列;SendMessage函数有返回值PostMessage将消息发送到与创建窗口的线程相关联的消息队列后立即返回;PostMessage函数没有返回值;原创 2007-05-10 16:57:00 · 799 阅读 · 0 评论 -
HOOK启思录---前言:HOOK是一种思想
在很多人眼里,Hook都是高级程序员才会使用的技术。一年前,我也是。每每看到别人使用了Hook技术就很嫉妒。是的,说嫉妒一点都不夸张。 刚开始,不知道Hook到底是什么技术。或者说,Hook到底是做什么的。Hook的英文是钩子,但是,说实话,我的中文意识中,怎么也不能将钩子和Hook划等同符号。一个钩子,它在等待我们去往上面挂上我们想要的东西。这点,从最终结果看。确实和这个技术很符合。转载 2007-08-23 21:47:00 · 776 阅读 · 0 评论 -
HOOK启思录---第三章 HOOK的应用模式
观察模式在HOOK很多应用中,有一类应用最为常用,那就是观察模式。对于信息获取的要求,在很多时候都是非常的重要的功能。在很多时候,我们都需要根据一定量的信息去判断如何决策。正如打仗一样,没有一定量的有意义的数据,就是摸黑,只能死路一条。像Windows提供的SetWindowHook就是典型地为这类应用准备的。而且这也是最普遍的用法。这个模式的特点是,在事情发生的时候,发出一个通知信息转载 2007-08-28 19:27:00 · 719 阅读 · 0 评论 -
消息循环中的TranslateMessage函数
函数功能描述:将虚拟键消息转换为字符消息。字符消息被送到调用线程的消息队列中,在下一次线程调用函数GetMessage或PeekMessage时被读出。.函数原型: BOOL TranslateMessage( CONST MSG *lpMsg );.参数: lpMsg 指向一个含有用GetMessage或PeekMessage函数从调用线程的消息队列中取原创 2007-05-31 08:05:00 · 1219 阅读 · 0 评论 -
HOOK启思录---第二章 HOOK的根源
我一直在避免写HOOK的技术实现,想尽可能地将一些看不到的东西收集起来。相对于了解一个成熟的技术,还不如去了解其中的思想吧。我是这样认为的。这一章会暂时远离HOOK本身,我们会尝试着去思考这些技术出现的根源。很多人象我一样,从OP的衰败中走向OO的繁荣。软件的复杂度也是突飞猛进。当年“没有银弹”的断言,非常准确地说明了软件的发展趋势,当新技术发展的时候,软件的复杂度也随之发展。我们现在的软转载 2007-08-24 18:31:00 · 695 阅读 · 0 评论 -
WINDOWS键盘事件的挂钩监控原理
WINDOWS的消息处理机制为了能在应用程序中监控系统的各种事件消息,提供了挂接 各种反调函数(HOOK)的功能。这种挂钩函数(HOOK)类似扩充中断驱动程序,挂钩上 可以挂接多个反调函数构成一个挂接函数链。系统产生的各种消息首先被送到各种 挂接函数,挂接函数根据各自的功能对消息进行监视、修改和控制等,然后交还控 制权或将消息传递给下一个挂接函数以致最终达到窗口函数。WINDOW系统的这种反 调函原创 2007-11-19 11:25:00 · 1191 阅读 · 0 评论