Windows消息Message

合集下载

msg用法

msg用法

msg用法
在计算机领域,MSG有多种用法,以下是两种常见的用法:
- 在Windows系统中,可以使用MSG命令实现局域网内的消息发送。

具体的使用方法如下:
1. 在接收消息的电脑B上,启动注册表编辑器,定位到(HKEY_LOCAL_MACHINE\SYSTEM\CurrentContr olSet\Control\Terminal Server),将右侧的“AllowRemoteRPC”的值更改为“1”。

2. 在发送消息的电脑A上,依次打开控制面板、用户帐户和家庭安全、凭据管理器,点击“添加Windows凭据”,在打开的窗口中按提示依次填入B 电脑的局域网IP地址、登录B电脑的用户名和登录密码。

3. 在A、B两台电脑上,依次打开控制面板、系统和安全、Windows 防火墙、允许的程序,点击“允许运行另一程序”,然后将“C:\Windows\System32\Msg.exe”添加到允许列表中。

4. 在A电脑上打开命令提示符,输入“MSG /server:192.168.20.38 * 今天17点开会”之类的命令,
即可在B电脑上弹出消息框显示信息。

- 在Linux系统中,MSG通常指消息队列(Message Queue),是一种用于在进程间传递消息的机制。

使用`ipcs -q`命令可以查看当前系统中存在的消息队列,使用`ipcrm -Q key`可以删除指定的消息队列。

如果你想了解关于MSG的其他用法,请提供更多的背景信息,以便我更好地为你解答。

windows message

windows message

题目:windows message 服务缓冲区溢出漏洞漏洞危害:远程执行任意代码严重程度:紧急先来看一下受影响的系统Microsoft windows NT 4.0Microsoft windows 2000Microsoft windows xpMicrosoft windows server 2003不受影响的系统:Microsoft windows millennium editionMicrosoft windows 98Messager漏洞简介:Windows NT 2000 XP 20003操作系统中有一个默认开放的Messenger(消息队列服务)。

它用于NT服务器之间进行发送和接收系统管理员或者“警报器”服务传递的消息,这个漏洞存在缓冲区堆溢出漏洞,由于在向缓冲区保存消息数据之前没有正确检查消息长度,可能被攻击者利用来进行远溢出,进行拒绝服务攻击,使计算机停止响应并自动重启,也可以执行任意代码,具体溢出问题存在于消息队列服务程序的search by name函数中,攻击者提交超长字符串给这个函数可造成堆溢出。

如何防御:Messenger消息是通过NetBIOS或者RPC提交给消息服务,所以可以通过封闭NETBIOS端口(137 139)和使用防火墙过滤UDP广播包来阻挡此类消息。

在边界防火墙或者个人防火墙上禁止不可信主机访问NETBIOS和RPC端口:135, 137, 138, 139 (TCP UDP),如果不使用messenger服务可以把它禁用。

打开“开始”菜单,点击“控制面板”中的“计算机管理工具”,双击“服务”,找到并双击“Messenger”,然后点击“停止”,并在“启动类型”的下拉框中选择“已禁用”。

微软也已经提供了安全补丁以修复此安全漏洞,如果有具体不同的操作系统需要下载安装不同的补丁,可以通过微软网站的安全公告选择并下载安装针对您所用系统的安全补丁。

接下来,我们就对此进行攻击,首先,要先扫描一下,看网络中是否存有此漏洞的主机,所用到的windows message 专用扫描工具messengerscan.exe来看一下这个工具的使用格式Messengerscan.exe target=192.168.1.1-192.168.1.255输入要扫描的ip地址段,回车等待一会就可以看到扫描到的结果,如下图以上的图,已经扫描到了有此漏洞的主机,下面就用溢出工具进行溢出,所用的工具是MsgHack.exe,来看一下它的使用方法我们来介绍一下这几个参数的含义–h 对方主机的ip,-v 对方主机系统版本–l 对方系统版本语言–s 对方系统补丁号–r 信息返回ip地址(一般这里填写自己的ip) -p 本地监听端口在进行溢出之前,我们要先打开一个cmd 的窗口来监听某个端口,这个端口可以随便写,但一定是不要占用的下面,来进行溢出,出现如下图,正在溢出。

windows消息大全

windows消息大全

Windows消息大全什么是Windows消息?Windows消息是在Windows操作系统中用于应用程序之间进行通信的一种机制。

通过发送和接收消息,应用程序可以向其他应用程序发送命令、请求数据或通知一些事件的发生。

Windows操作系统提供了一系列的系统消息,同时也允许应用程序自定义和发送消息。

系统消息Windows操作系统中的系统消息由操作系统负责发送和处理,这些消息通常涉及到操作系统的各个方面。

下面是一些常见的系统消息:1.WM_CREATE:当窗口被创建时发送。

2.WM_DESTROY:当窗口被销毁时发送。

3.WM_PAINT:当窗口需要绘制时发送。

4.WM_CLOSE:当用户关闭窗口时发送。

5.WM_QUIT:当应用程序需要退出时发送。

6.WM_SIZE:当窗口大小改变时发送。

7.WM_MOUSEMOVE:当鼠标移动时发送。

8.WM_KEYDOWN:当按下键盘上的一个键时发送。

这只是一小部分系统消息的例子,Windows操作系统中还有很多其他的系统消息可供使用。

自定义消息除了系统消息,应用程序还可以自定义消息以实现应用程序之间的通信。

自定义消息通常基于用户定义的消息号。

下面是一些自定义消息的例子:1.WM_MY_MESSAGE1:用户自定义的消息1。

2.WM_MY_MESSAGE2:用户自定义的消息2。

3.WM_MY_MESSAGE3:用户自定义的消息3。

自定义消息的消息号必须在WM_USER之后,以避免与系统消息冲突。

消息参数除了发送消息本身外,应用程序还可以使用参数来传递额外的信息。

参数通常包含在消息的wParam和lParam字段中。

•wParam表示一个无符号的整数,用于传递一些简单的数值信息。

•lParam通常表示一个指针,指向一些复杂的数据结构。

应用程序可以根据消息的含义和需要来使用这些参数。

如何发送和接收消息在Windows操作系统中,应用程序可以使用函数来发送和接收消息。

1.2WindowMessages(窗口消息)

1.2WindowMessages(窗口消息)

1.2WindowMessages(窗⼝消息)窗⼝消息GUI应⽤程序必须响应来⾃⽤户和操作系统的事件。

来⾃⽤户的事件包括⽤户与程序交互的所有⽅式:⿏标点击、按键、触摸屏⼿势等等。

来⾃操作系统的事件包括程序之外的任何可能影响程序⾏为的东西。

例如,⽤户可能插⼊⼀个新的硬件设备,或者Windows可能进⼊低功耗状态(睡眠或休眠)。

这些事件可以在程序运⾏时的任何时间发⽣,⼏乎可以按任何顺序发⽣。

如何构造⼀个不能预先预测执⾏流(flow)的程序?为了解决这个问题,Windows使⽤了消息传递模型。

操作系统通过传递消息与应⽤程序窗⼝进⾏通信。

消息只是指定特定事件的数字代码。

例如,如果⽤户按下⿏标左键,窗⼝将接收到具有以下消息代码的消息。

C++#define WM_LBUTTONDOWN 0x0201⼀些消息具有与它们相关联的数据。

例如,消息包含⿏标光标的x坐标和y坐标。

要将消息传递给窗⼝,操作系统将调⽤为该窗⼝注册的窗⼝过程。

(现在你知道窗⼝程序的作⽤了。

)消息环(The message loop)应⽤程序在运⾏时将收到数千条消息。

(考虑到每次击键和点击⿏标按钮都会产⽣⼀条消息。

)另外,应⽤程序可以有多个窗⼝,每个窗⼝都有⾃⼰的窗⼝过程。

程序如何接收所有这些消息并将它们发送到正确的窗⼝过程?应⽤程序需要⼀个循环来检索消息并将其发送到正确的窗⼝。

对于创建窗⼝的每个线程,操作系统都为窗⼝消息创建⼀个队列(queue)。

此队列保存了在该线程上创建的所有窗⼝的消息。

队列本⾝在程序是隐藏不可见的。

您不能直接操作队列。

但是,您可以通过调⽤函数从队列中提取消息。

C++MSG msg;GetMessage(&msg, NULL, 0, 0);此函数会从队列的头部移除第⼀个消息。

如果队列为空,函数将阻塞,直到另⼀条消息⼊队列。

事实上,阻塞不会使您的程序没有响应。

如果没有消息,程序就没有什么可做的。

如果您必须执⾏后台处理,您可以创建额外的线程,在GetMessage等待另⼀个消息时继续运⾏。

window.onmessage的用法

window.onmessage的用法

window.onmessage的用法全文共四篇示例,供读者参考第一篇示例:window.onmessage是一个JavaScript事件处理函数,它用于在不同窗口或iframe之间进行消息传递。

通过使用这个事件,我们可以实现跨文档通信,让不同页面之间可以进行数据的传递和交互。

在使用window.onmessage时,我们需要首先确定消息的发送方和接收方。

发送方通过调用window.postMessage()方法来向接收方发送消息,并通过接收方的window.onmessage事件来监听并处理接收到的消息。

让我们看一下window.postMessage()方法的基本语法:```window.postMessage(message, targetOrigin, [transfer]);```message是要发送的消息内容,可以是字符串、对象等;targetOrigin是一个字符串,表示接收消息的窗口的源,可以是具体的URL或通配符"*",用于安全过滤;transfer是一个可选的参数,用于传递MessagePort或其他可转移对象,可以提高性能。

而在接收消息方,我们需要使用window.onmessage事件来监听消息的到达:```window.addEventListener('message', function(event) {// 处理接收到的消息var message = event.data; // 获取消息内容var source = event.source; // 发送者的window对象var origin = event.origin; // 发送者的源});```通过event对象,我们可以获取到发送消息的内容、发送者的window对象和发送者的源,从而实现对消息的处理和校验。

值得注意的是,为了确保安全性,我们在处理消息时应该对消息的来源进行验证,避免恶意攻击。

Windows Message 常量(部分有解释)

Windows Message 常量(部分有解释)
WM_VKEYTOITEM 此消息有一个LBS_WANTKEYBOARDINPUT风格的发出给它的所有者来响应WM_KEYDOWN消息
WM_CHARTOITEM 此消息由一个LBS_WANTKEYBOARDINPUT风格的列表框发送给他的所有者来响应WM_CHAR消息
WM_SETFONT 当绘制文本时程序发送此消息得到控件要用的颜色
WM_CREATE 创建一个窗口
WM_DESTROY 当一个窗口被破坏时发送
WM_MOVE 移动一个窗口
WM_SIZE 改变一个窗口的大小
WM_ACTIVATE 一个窗口被激活或失去激活状态
WM_SETFOCUS 一个窗口获得焦点
WM_KILLFOCUS 一个窗口失去焦点
WM_ENABLE 一个窗口改变成Enable状态
WM_INITMENUPOPUP 当一个下拉菜单或子菜单将要被激活时发送此消息,它允许程序在它显示前更改菜单,而不要改变全部
WM_MENUSELECT 当用户选择一条菜单项时发送此消息给菜单的所有者(一般是窗口)
WM_MENUCHAR 当菜单已被激活用户按下了某个键(不同于加速键),发送此消息给菜单的所有者
WM_GETMINMAXINFO 此消息发送给窗口当它将要改变大小或位置
WM_PAINTICON 发送给最小化窗口当它图标将要被重画
WM_ICONERASEBKGND 此消息发送给某个最小化窗口,仅当它在画图标前它的背景必须被重画
WM_NEXTDLGCTL 发送此消息给一个对话框程序去更改焦点位置
WM_GETDLGCODE 发送此消息给某个与对话框程序关联的控件,widdows控制方位键和TAB键使输入进入此控件通过应

WINCE下消息传递和消息队列

WINCE下消息传递和消息队列

WINCE下消息传递和消息队列WINCE下消息传递和消息队列2010-04-06 13:42Windows CE是事件驱动的操作系统,所有的消息都是使用一个名为MSG的结构来传递。

MSG结构共包含六个字段,MSG定义如下:typedef struct tagMSG{HWND hwnd;UINT message;WPARAM wParam;LPARAM lParam;DWORD time;POSITION pt;}MSG;Hwnd:是用以检索消息的窗口名柄。

也就是也就是用来处理消息的窗口的窗口名柄。

Message:代表一个消息的消息值,每一个Windows消息都有一个消息值勤,该值由windows.h头文件中的宏定义来标识wParam:用来包含与消息有关的附加信息,它随不同的消息而有所不同。

lParam:用来存放有关消息的附加消息。

Time:指定消息送到消息队列的时间Pt:指定消息发送时,屏幕光标的位置。

定义新的消息:Windows CE支持系统定义的信息和应用程序定义的消息。

系统定义消息(System-defined messges)的标识符的值是从0到0X3ff,而从0x400到0x7fff的值给应用程序(application-defined messages)定义的消息使用。

WM_USER这个消息的值(message number)是0x400,如果我们要定义应用程序的用户消息(custom message),可以人这个值开始,方法如下:#defineWM_MYMESSAGE(WM_USER+999)而为了确保我们的应用程序定义的信义不会跟随其他应用程序相同而冲突,可以呼叫RegisterWindowMessage函数来检查。

参数:lpString:指定将被注册的消息的以'\O'结束的字符串指针。

返回值如果消息被成功注册,返回值是在范围OxCOOO到OxFFFF的消息标识符;如果函数调用失败,返回值是零。

WindowsMessage消息详解

WindowsMessage消息详解

1。

知道在Microsoft Visual Studio 8/VC/PlatformSDK/Include下的和中可以找到常量定义。

2。

知道有软件可以帮助查找常量定义,(没下载到)3。

但是还是有个常用的表格比较好。

4。

学习:WINDOWS消息说明消息,就是指Wi n d o w s发出的一个通知,告诉应用程序某个事情发生了。

例如,单击鼠标、改变窗口尺寸、按下键盘上的一个键都会使Wi n d o w s发送一个消息给应用程序。

消息本身是作为一个记录传递给应用程序的,这个记录中包含了消息的类型以及其他信息。

例如,对于单击鼠标所产生的消息来说,这个记录中包含了单击鼠标时的坐标。

这个记录类型叫做T M s g,它在Wi n d o w s单元中是这样声明的:t y p eTMsg = packed recordhwnd: HWND; / /窗口句柄message: UINT; / /消息常量标识符wParam: WPA R A M ; // 32位消息的特定附加信息lParam: LPA R A M ; // 32位消息的特定附加信息time: DWORD; / /消息创建时的时间pt: TPoint; / /消息创建时的鼠标位置e n d ;消息中有什么?是否觉得一个消息记录中的信息像希腊语一样?如果是这样,那么看一看下面的解释:hwnd 32位的窗口句柄。

窗口可以是任何类型的屏幕对象,因为Win32能够维护大多数可视对象的句柄(窗口、对话框、按钮、编辑框等)。

message 用于区别其他消息的常量值,这些常量可以是Windows单元中预定义的常量,也可以是自定义的常量。

wParam 通常是一个与消息有关的常量值,也可能是窗口或控件的句柄。

lParam 通常是一个指向内存中数据的指针。

由于W P a r a m、l P a r a m和P o i n t e r都是3 2位的,因此,它们之间可以相互转换。

以C++BUILDER处理Windows消息(Message)

以C++BUILDER处理Windows消息(Message)
_ —
ED姬s 就是 c B idr定义 的巨集 ,其中比较重要的是 N S H u le
眶sA 删 s瓶
日 ;它共需要三个参数,第一个参数代表消息的 }
I 1第二个代表参数型态,最后一个则是消息事件处理函数。 D
在 收到消息后 程序必 须处理该消 息,若 是不处理 , 则可直接将它交给 Wno,的内定处理程序来处理, id ̄ s 若是程序 需要返回值,也可以在此时传 回,Wno s idw 会将该值传回给呼
乍看之下,这个巨集似乎和 Mc 册L F及 所使用的巨集有几 分神似,没错,不过其机制却更为简单及简洁,我们可 以看看
O+u le 对于这三个巨集 的原始定义; B idr
n l州 t fm 田 『瞄 S 瑚P v 且  ̄ i b l 怔

叫方。如此就完成了消息传递的程序
复杂吗?一点也不 !了解 W n o s消息系统的运作后, id w 我们来看看可 利用它来做些什么有趣的事吧 !
息 并通过这样来达成在一般 V L控件所无法做到的功能 。 C
r O r ̄o d haa L

W n州 糯 td
(esg ) Msae
舶 r 2a a [ : d 1 r  ̄[ [
! r e o t o: C d Rs lL o
大家都知道 冒i d w n o s是一套以消息驱动 ( S a e Me g S D ie )的操作系统。然而对于消息本身却讳莫如深.只知其 rvn 然而不知其所以然,虽然 C+o le 将某些Wn os +Bidr idw 消息封装 于事件 (vn )系统中,但身为一个 Wnos Eet idw 程序员.实在有
然而由于Wnos idw 操作系统终究是

msg命令用法 -回复

msg命令用法 -回复

msg命令用法-回复msg命令是一款常用的命令行工具,用于在命令行界面发送信息或进行通信。

本文将详细介绍msg命令的使用方法及注意事项。

一、什么是msg命令msg命令是Windows操作系统中的一个命令行工具,它允许用户在局域网中向其他计算机发送消息或通知。

通过该命令,用户可以快速有效地与其他计算机进行沟通,进行紧急通知或交流工作进展等。

二、msg命令的基本语法msg命令的基本语法如下:msg {用户名会话名会话ID} [/SERVER:服务器] [/TIME:秒] [/V] [/W] [消息]其中,关键参数说明如下:- 用户名:要接收消息的用户名。

- 会话名:以名称标识要接收消息的会话。

- 会话ID:以ID标识要接收消息的会话。

- /SERVER:服务器:指定要连接的服务器。

- /TIME:秒:设置消息显示的时间(默认为30秒)。

- /V:显示详细信息。

- /W:将弹出窗口设置为显示通知。

三、msg命令的使用示例以下是对msg命令的几个典型使用示例。

1. 向指定用户名发送消息:msg username "Hello, how is your progress today?"该命令将向用户名为"username"的用户发送消息"Hello, how is your progress today?"。

2. 向指定会话名发送消息:msg console /SERVER:server1 "Meeting will start in 30 minutes."该命令将向名为"console"的会话(通常是服务器上当前登录的控制台会话)发送消息"Meeting will start in 30 minutes.",并指定要连接到的服务器为"server1"。

3. 向指定会话ID发送消息:msg 1234 /SERVER:server1 /TIME:60 /W "Please complete the task by tomorrow."该命令将向会话ID为"1234"的会话发送消息"Please complete the task by tomorrow.",并在"server1"服务器上显示60秒的弹出窗口通知。

windows消息循环机制

windows消息循环机制

windows消息循环机制【Windows消息循环机制】Windows消息循环机制是指Windows中消息的发送、处理和接收机制。

它是Windows的核心机制,是窗口程序的基础。

Windows消息循环机制的核心是一组函数,包括GetMessage()、DispatchMessage()和PostMessage()等,它们涉及到消息的接收、传递和发送,编写Windows应用程序的时候必须使用这些函数。

首先介绍Windows消息循环机制的三个核心函数:GetMessage():它是消息的接收函数,用于从消息队列中获取消息,该函数会将消息放到一个消息结构体中,并且在收到WM_QUIT消息时,会返回一个非零值。

PostMessage():它是消息的发送函数,用于将消息发送到消息队列中,可以将消息发送到本进程,也可以将消息发送到其他进程。

DispatchMessage():它是消息的处理函数,用于将收到的消息按照指定的规则进行处理,它会调用相应的消息处理函数,并传入相关参数,以便处理。

Windows消息循环主要由一个循环结构构成,该循环由GetMessage函数和DispatchMessage函数构成,具体的循环结构如下:while (GetMessage (&Msg, NULL, 0, 0) > 0){TranslateMessage(&Msg);DispatchMessage(&Msg);}上面的循环由两个函数组成,GetMessage函数会从消息队列中获取消息,并将消息放入一个消息结构体中,当获取到WM_QUIT消息时,该函数会返回一个非零值,从而跳出循环。

而DispatchMessage 函数则会根据收到的消息调用相应的消息处理函数,来处理收到的消息。

以上就是Windows消息循环机制的基本概念和实现原理,Windows消息循环机制的理解对于编写Windows应用程序非常重要,因此要掌握和理解Windows消息循环机制的原理。

WIN7里使用msg命令的方法

WIN7里使用msg命令的方法

WIN7里使用msg命令的方法
由于WIN7,WIN8系统安全加强,所以Net Send命令和Messenger服务被取消了. 在WIN7里可以使用msg命令,但是msg命令被严格限制,以防止被病毒利用
使用方法如下:
想使用msg这个命令,首先要修改注册表。

1. 打算接收命令的WIN7,WIN8,WIN2008机器必须修改注册表
开始菜单---->运行--->输入regedit,在注册表中找hkey_local
machine--- >system--->CurrentControlSet---->Control----> terminal server,双击terminal server,在右边的窗口中找AllowRemoteRPC这行,双击AllowRemoteRPC,把0值改为1,点ok。

2 打算发送msg消息的用户必须知道接收者计算机的正在登录的用户的用户名和口令,然后设置凭据(資格情報)。

如果可能有多个用户都是接收者,那么只有1个能被设置上,如果他没有登录,其它用户登录了也不能收到消息。

打开控制面板,双击凭据管理器,点击添加windows凭据,第一行写对方电脑的IP地址,第二行写对方电脑的用户名,第三行写对方电脑的密码。

3.设置完成后,都需要重新重启电脑。

4.关闭防火墙。

或者对Msg设置例外。

5.运行--cmd,在这个终端中输入msg /server:对方IP地址* “要发送的消息”例如:msg /server:192.168.1.135 * "djkfjsdkjf"。

windows消息机制工作原理

windows消息机制工作原理

windows消息机制工作原理
Windows消息机制是Windows操作系统中的核心特性之一,它允许不同的应用程序之间进行通信和交互。

当一个应用程序需要与另一个应用程序进行交互时,它可以发送一个消息到目标应用程序。

目标应用程序会接收这个消息并做出相应的处理。

Windows消息机制的工作原理可以分为以下几个步骤:
1. 发送消息:当一个应用程序需要发送消息到另一个应用程序时,它会调用Windows API中的SendMessage函数或者PostMessage函数。

这些函数会将消息传递给操作系统内核,并将消息发送到目标应用程序的消息队列中。

2. 消息队列:每个应用程序都有一个消息队列,它用于存储来自其他应用程序的消息。

Windows操作系统会在后台自动地维护这些消息队列,并当应用程序准备好时通知它们有新的消息到达。

3. 消息循环:每个应用程序都有一个消息循环,它用于获取来自消息队列的消息并将其传递给相应的消息处理程序。

当操作系统通知应用程序有新的消息到达时,应用程序会从消息队列中获取消息并将其传递给消息循环。

4. 处理消息:每个应用程序都有一个消息处理程序,它用于处理来自其他应用程序的消息。

当消息循环从消息队列中获取到消息时,它会将消息传递给相应的
消息处理程序进行处理。

总之,Windows消息机制利用了操作系统层面的消息队列和消息循环来实现应用程序之间的通信和交互。

这种机制可以帮助开发者实现非常灵活的应用程序,并且非常适合多任务处理和多线程应用。

API函数SendMessage参数即Windows消息详解

API函数SendMessage参数即Windows消息详解

Windows是一个消息驱动式系统,SendMessage是应用程序和应用程序之间进行消息传递的主要手段之一,这里搜集整理了SendMessage函数的详细参数介绍,以备自用。

VFP声明:DECLARE INTEGER SendMessage IN user32;INTEGER hWnd,;INTEGER wMsg,;INTEGER wParam,;INTEGER lParam参数1:hWnd-窗口句柄。

窗口可以是任何类型的屏幕对象。

参数2:wMsg-用于区别其他消息的常量值.参数3:wParam-通常是一个与消息有关的常量值,也可能是窗口或控件的句柄. 参数4: lParam-通常是一个指向内存中数据的指针。

wMsg参数常量值:#DeFine WM_CREATE 0x01创建一个窗口#DeFine WM_DESTROY 0x02当一个窗口被破坏时发送#DeFine WM_MOVE 0x03移动一个窗口#DeFine WM_SIZE 0x05改变一个窗口的大小#DeFine WM_ACTIVATE 0x06一个窗口被激活或失去激活状态#DeFine WM_SETFOCUS 0x07一个窗口获得焦点#DeFine WM_KILLFOCUS 0x08一个窗口失去焦点#DeFine WM_ENABLE 0x0A一个窗口改变成Enable状态#DeFine WM_SETREDRAW 0x0B设置窗口是否能重画#DeFine WM_SETTEXT 0x0C应用程序发送此消息来设置一个窗口的文本#DeFine WM_GETTEXT 0x0D应用程序发送此消息来复制对应窗口的文本到缓冲区#DeFine WM_GETTEXTLENGTH 0x0E得到与一个窗口有关的文本的长度(不包含空字符)#DeFine WM_PAINT 0x0F要求一个窗口重画自己#DeFine WM_CLOSE 0x10当一个窗口或应用程序要关闭时发送一个信号#DeFine WM_QUERYENDSESSION 0x11当用户选择结束对话框或程序自己调用ExitWindows函数#DeFine WM_QUIT 0x12用来结束程序运行 #DeFine WM_QUERYOPEN 0x13当用户窗口恢复以前的大小位置时,把此消息发送给某个图标#DeFine WM_ERASEBKGND 0x14当窗口背景必须被擦除时(例在窗口改变大小时)#DeFine WM_SYSCOLORCHANGE 0x15当系统颜色改变时,发送此消息给所有顶级窗口#DeFine WM_ENDSESSION 0x16当系统进程发出WM_QUERYENDSESSION消息后,此消息发送给应用程序,通知它对话是否结束#DeFine WM_SHOWWINDOW 0x18当隐藏或显示窗口是发送此消息给这个窗口#DeFine WM_ACTIVATEAPP 0x1C发此消息给应用程序哪个窗口是激活的,哪个是非激活的#DeFine WM_FONTCHANGE 0x1D当系统的字体资源库变化时发送此消息给所有顶级窗口#DeFine WM_TIMECHANGE 0x1E当系统的时间变化时发送此消息给所有顶级窗口#DeFine WM_CANCELMODE 0x1F发送此消息来取消某种正在进行的摸态(操作)#DeFine WM_SETCURSOR 0x20如果鼠标引起光标在某个窗口中移动且鼠标输入没有被捕获时,就发消息给某个窗口#DeFine WM_MOUSEACTIVATE 0x21当光标在某个非激活的窗口中而用户正按着鼠标的某个键发送此消息给当前窗口#DeFine WM_CHILDACTIVATE 0x22发送此消息给MDI子窗口当用户点击此窗口的标题栏,或当窗口被激活,移动,改变大小#DeFine WM_QUEUESYNC 0x23此消息由基于计算机的训练程序发送,通过WH_JOURNALPALYBACK的hook程序分离出用户输入消息#DeFine WM_GETMINMAXINFO 0x24此消息发送给窗口当它将要改变大小或位置#DeFine WM_PAINTICON 0x26发送给最小化窗口当它图标将要被重画#DeFine WM_ICONERASEBKGND 0x27此消息发送给某个最小化窗口,仅当它在画图标前它的背景必须被重画#DeFine WM_NEXTDLGCTL 0x28发送此消息给一个对话框程序去更改焦点位置#DeFine WM_SPOOLERSTATUS 0x2A每当打印管理列队增加或减少一条作业时发出此消息#DeFine WM_DRAWITEM 0x2B当button,combobox,listbox,menu的可视外观改变时发送#DeFine WM_MEASUREITEM 0x2C当button, combo box, list box, list view control, or menu item 被创建时#DeFine WM_VKEYTOITEM 0x2E此消息有一个LBS_WANTKEYBOARDINPUT风格的发出给它的所有者来响应WM_KEYDOWN消息#DeFine WM_CHARTOITEM 0x2F此消息由一个LBS_WANTKEYBOARDINPUT风格的列表框发送给他的所有者来响应WM_CHAR消息#DeFine WM_SETFONT 0x30当绘制文本时程序发送此消息得到控件要用的颜色#DeFine WM_GETFONT 0x31应用程序发送此消息得到当前控件绘制文本的字体#DeFine WM_SETHOTKEY 0x32应用程序发送此消息让一个窗口与一个热键相关连#DeFine WM_GETHOTKEY 0x33应用程序发送此消息来判断热键与某个窗口是否有关联#DeFine WM_QUERYDRAGICON 0x37此消息发送给最小化窗口,当此窗口将要被拖放而它的类中没有定义图标,应用程序能返回一个图标或光标的句柄,当用户拖放图标时系统显示这个图标或光标#DeFine WM_COMPAREITEM 0x39发送此消息来判定combobox或listbox新增加的项的相对位置#DeFine WM_COMPACTING 0x41显示内存已经很少了#DeFine WM_WINDOWPOSCHANGING 0x46发送此消息给那个窗口的大小和位置将要被改变时,来调用setwindowpos函数或其它窗口管理函数#DeFine WM_WINDOWPOSCHANGED 0x47发送此消息给那个窗口的大小和位置已经被改变时,来调用setwindowpos函数或其它窗口管理函数#DeFine WM_POWER 0x48当系统将要进入暂停状态时发送此消息#DeFine WM_COPYDATA 0x4A当一个应用程序传递数据给另一个应用程序时发送此消息#DeFine WM_CANCELJOURNA 0x4B当某个用户取消程序日志激活状态,提交此消息给程序#DeFine WM_NOTIFY 0x4E当某个控件的某个事件已经发生或这个控件需要得到一些信息时,发送此消息给它的父窗口#DeFine WM_INPUTLANGCHANGEREQUEST 0x50当用户选择某种输入语言,或输入语言的热键改变#DeFine WM_INPUTLANGCHANGE 0x51当平台现场已经被改变后发送此消息给受影响的最顶级窗口#DeFine WM_TCARD 0x52当程序已经初始化windows帮助例程时发送此消息给应用程序#DeFine WM_HELP 0x53此消息显示用户按下了F1,如果某个菜单是激活的,就发送此消息个此窗口关联的菜单,否则就发送给有焦点的窗口,如果当前都没有焦点,就把此消息发送给当前激活的窗口#DeFine WM_USERCHANGED 0x54当用户已经登入或退出后发送此消息给所有的窗口,当用户登入或退出时系统更新用户的具体设置信息,在用户更新设置时系统马上发送此消息#DeFine WM_NOTIFYFORMAT 0x55公用控件,自定义控件和他们的父窗口通过此消息来判断控件是使用ANSI还是UNICODE结构#DeFine WM_CONTEXTMENU ??当用户某个窗口中点击了一下右键就发送此消息给这个窗口#DeFine WM_STYLECHANGING 0x7C当调用SETWINDOWLONG函数将要改变一个或多个窗口的风格时发送此消息给那个窗口#DeFine WM_STYLECHANGED 0x7D当调用SETWINDOWLONG函数一个或多个窗口的风格后发送此消息给那个窗口#DeFine WM_DISPLAYCHANGE 0x7E当显示器的分辨率改变后发送此消息给所有的窗口#DeFine WM_GETICON 0x7F此消息发送给某个窗口来返回与某个窗口有关连的大图标或小图标的句柄#DeFine WM_SETICON 0x80程序发送此消息让一个新的大图标或小图标与某个窗口关联#DeFine WM_NCCREATE 0x81当某个窗口第一次被创建时,此消息在WM_CREATE消息发送前发送#DeFine WM_NCDESTROY 0x82此消息通知某个窗口,非客户区正在销毁#DeFine WM_NCCALCSIZE 0x83当某个窗口的客户区域必须被核算时发送此消息#DeFine WM_NCHITTEST 0x84移动鼠标,按住或释放鼠标时发生#DeFine WM_NCPAINT 0x85程序发送此消息给某个窗口当它(窗口)的框架必须被绘制时#DeFine WM_NCACTIVATE 0x86此消息发送给某个窗口仅当它的非客户区需要被改变来显示是激活还是非激活状态#DeFine WM_GETDLGCODE 0x87发送此消息给某个与对话框程序关联的控件,widdows控制方位键和TAB键使输入进入此控件通过应#DeFine WM_NCMOUSEMOVE 0xA0当光标在一个窗口的非客户区内移动时发送此消息给这个窗口非客户区为:窗体的标题栏及窗的边框体#DeFine WM_NCLBUTTONDOWN 0xA1当光标在一个窗口的非客户区同时按下鼠标左键时提交此消息#DeFine WM_NCLBUTTONUP 0xA2当用户释放鼠标左键同时光标某个窗口在非客户区十发送此消息#DeFine WM_NCLBUTTONDBLCLK 0xA3当用户双击鼠标左键同时光标某个窗口在非客户区十发送此消息#DeFine WM_NCRBUTTONDOWN 0xA4当用户按下鼠标右键同时光标又在窗口的非客户区时发送此消息#DeFine WM_NCRBUTTONUP 0xA5当用户释放鼠标右键同时光标又在窗口的非客户区时发送此消息#DeFine WM_NCRBUTTONDBLCLK 0xA6当用户双击鼠标右键同时光标某个窗口在非客户区十发送此消息#DeFine WM_NCMBUTTONDOWN 0xA7当用户按下鼠标中键同时光标又在窗口的非客户区时发送此消息#DeFine WM_NCMBUTTONUP 0xA8当用户释放鼠标中键同时光标又在窗口的非客户区时发送此消息#DeFine WM_NCMBUTTONDBLCLK 0xA9当用户双击鼠标中键同时光标又在窗口的非客户区时发送此消息#DeFine WM_KEYFIRST 0x100WM_KEYDOWN 按下一个键#DeFine WM_KEYUP 0x101释放一个键#DeFine WM_CHAR 0x102按下某键,并已发出WM_KEYDOWN, WM_KEYUP消息#DeFine WM_DEADCHAR 0x103当用translatemessage函数翻译WM_KEYUP消息时发送此消息给拥有焦点的窗口#DeFine WM_SYSKEYDOWN 0x104当用户按住ALT键同时按下其它键时提交此消息给拥有焦点的窗口#DeFine WM_SYSKEYUP 0x105当用户释放一个键同时ALT 键还按着时提交此消息给拥有焦点的窗口#DeFine WM_SYSCHAR 0x106当WM_SYSKEYDOWN消息被TRANSLATEMESSAGE函数翻译后提交此消息给拥有焦点的窗口#DeFine WM_SYSDEADCHAR 0x107当WM_SYSKEYDOWN消息被TRANSLATEMESSAGE函数翻译后发送此消息给拥有焦点#DeFine WM_INITDIALOG 0x110在一个对话框程序被显示前发送此消息给它,通常用此消息初始化控件和执行其它任务#DeFine WM_COMMAND 0x111当用户选择一条菜单命令项或当某个控件发送一条消息给它的父窗口,一个快捷键被翻译#DeFine WM_SYSCOMMAND 0x112当用户选择窗口菜单的一条命令或当用户选择最大化或最小化时那个窗口会收到此消息#DeFine WM_TIMER 0x113发生了定时器事件#DeFine WM_HSCROLL 0x114当一个窗口标准水平滚动条产生一个滚动事件时发送此消息给那个窗口,也发送给拥有它的控件#DeFine WM_VSCROLL 0x115当一个窗口标准垂直滚动条产生一个滚动事件时发送此消息给那个窗口也,发送给拥有它的控件#DeFine WM_INITMENU 0x116当一个菜单将要被激活时发送此消息,它发生在用户菜单条中的某项或按下某个菜单键,它允许程序在显示前更改菜单#DeFine WM_INITMENUPOPUP 0x117当一个下拉菜单或子菜单将要被激活时发送此消息,它允许程序在它显示前更改菜单,而不要改变全部#DeFine WM_MENUSELECT 0x11F当用户选择一条菜单项时发送此消息给菜单的所有者(一般是窗口)#DeFine WM_MENUCHAR 0x120当菜单已被激活用户按下了某个键(不同于加速键),发送此消息给菜单的所有者#DeFine WM_ENTERIDLE 0x121当一个模态对话框或菜单进入空载状态时发送此消息给它的所有者,一个模态对话框或菜单进入空载状态就是在处理完一条或几条先前的消息后没有消息它的列队中等待#DeFine WM_CTLCOLORMSGBOX 0x132在windows绘制消息框前发送此消息给消息框的所有者窗口,通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置消息框的文本和背景颜色#DeFine WM_CTLCOLOREDIT 0x133当一个编辑型控件将要被绘制时发送此消息给它的父窗口通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置编辑框的文本和背景颜色#DeFine WM_CTLCOLORLISTBOX 0x134当一个列表框控件将要被绘制前发送此消息给它的父窗口通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置列表框的文本和背景#DeFine WM_CTLCOLORBTN 0x135当一个按钮控件将要被绘制时发送此消息给它的父窗口通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置按纽的文本和背景颜色#DeFine WM_CTLCOLORDLG 0x136当一个对话框控件将要被绘制前发送此消息给它的父窗口通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置对话框的文本背景颜色#DeFine WM_CTLCOLORSCROLLBAR 0x137当一个滚动条控件将要被绘制时发送此消息给它的父窗口通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置滚动条的背景颜色#DeFine WM_CTLCOLORSTATIC 0x138当一个静态控件将要被绘制时发送此消息给它的父窗口通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置静态控件的文本和背景颜色#DeFine WM_MOUSEWHEEL 0x20A当鼠标轮子转动时发送此消息个当前有焦点的控件#DeFine WM_MBUTTONDBLCLK 0x209双击鼠标中键#DeFine WM_MBUTTONUP 0x208释放鼠标中键#DeFine WM_MOUSEFIRST 0x200移动鼠标时发生#DeFine WM_MOUSEMOVE 0x200移动鼠标时发生,同WM_MOUSEFIRST#DeFine WM_LBUTTONDOWN 0x201按下鼠标左键#DeFine WM_LBUTTONUP 0x202释放鼠标左键#DeFine WM_LBUTTONDBLCLK 0x203双击鼠标左键#DeFine WM_RBUTTONDOWN 0x204按下鼠标右键#DeFine WM_RBUTTONUP 0x205释放鼠标右键#DeFine WM_RBUTTONDBLCLK 0x206双击鼠标右键#DeFine WM_MBUTTONDOWN 0x207按下鼠标中键#DeFine WM_MBUTTONUP 0x208释放鼠标中键#DeFine WM_MBUTTONDBLCLK 0x209双击鼠标中键#DeFine WM_MOUSEWHEEL 0x20A当鼠标轮子转动时发送此消息个当前有焦点的控件SendMessage消息大全及说明(B)(2008-01-04 13:55:39)转载分类:vc知识标签:itWM_IME_STARTCOMPOSITION = &H010DWM_IME_ENDCOMPOSITION = &H010EWM_IME_COMPOSITION = &H010FWM_IME_KEYLAST = &H010FWM_IME_SETCONTEXT = &H0281WM_IME_NOTIFY = &H0282WM_IME_CONTROL = &H0283WM_IME_COMPOSITIONFULL = &H0284WM_IME_SELECT = &H0285WM_IME_CHAR = &H0286WM_IME_REQUEST = &H0288WM_IME_KEYDOWN = &H0290WM_IME_KEYUP = &H0291WM_MDICREATE = &H0220应用程序发送此消息给多文档的客户窗口来创建一个MDI 子窗口WM_MDIDESTROY = &H0221应用程序发送此消息给多文档的客户窗口来关闭一个MDI 子窗口WM_MDIACTIVATE = &H0222应用程序发送此消息给多文档的客户窗口通知客户窗口激活另一个MDI子窗口,当客户窗口收到此消息后,它发出WM_MDIACTIVE消息给MDI子窗口(未激活)激活它;WM_MDIRESTORE = &H0223程序发送此消息给MDI客户窗口让子窗口从最大最小化恢复到原来大小WM_MDINEXT = &H0224程序发送此消息给MDI客户窗口激活下一个或前一个窗口WM_MDIMAXIMIZE = &H0225程序发送此消息给MDI客户窗口来最大化一个MDI子窗口;WM_MDITILE = &H0226程序发送此消息给MDI客户窗口以平铺方式重新排列所有MDI子窗口WM_MDICASCADE = &H0227程序发送此消息给MDI客户窗口以层叠方式重新排列所有MDI子窗口WM_MDIICONARRANGE = &H0228程序发送此消息给MDI客户窗口重新排列所有最小化的MDI子窗口WM_MDIGETACTIVE = &H0229程序发送此消息给MDI客户窗口来找到激活的子窗口的句柄WM_MDISETMENU = &H0230程序发送此消息给MDI客户窗口用MDI菜单代替子窗口的菜单WM_ENTERSIZEMOVE = &H0231WM_EXITSIZEMOVE = &H0232WM_DROPFILES = &H0233WM_MDIREFRESHMENU = &H0234WM_MOUSEHOVER = &H02A1WM_MOUSELEAVE = &H02A3WM_CUT = &H0300程序发送此消息给一个编辑框或combobox来删除当前选择的文本WM_COPY = &H0301程序发送此消息给一个编辑框或combobox来复制当前选择的文本到剪贴板WM_PASTE = &H0302程序发送此消息给editcontrol或combobox从剪贴板中得到数据WM_CLEAR = &H0303程序发送此消息给editcontrol或combobox清除当前选择的内容;WM_UNDO = &H0304程序发送此消息给editcontrol或combobox撤消最后一次操作WM_RENDERFORMAT = &H0305;WM_RENDERALLFORMATS = &H0306WM_DESTROYCLIPBOARD = &H0307当调用ENPTYCLIPBOARD函数时发送此消息给剪贴板的所有者WM_DRAWCLIPBOARD = &H0308当剪贴板的内容变化时发送此消息给剪贴板观察链的第一个窗口;它允许用剪贴板观察窗口来显示剪贴板的新内容;WM_PAINTCLIPBOARD = &H0309当剪贴板包含CF_OWNERDIPLAY格式的数据并且剪贴板观察窗口的客户区需要重画;WM_VSCROLLCLIPBOARD = &H030AWM_SIZECLIPBOARD = &H030B当剪贴板包含CF_OWNERDIPLAY格式的数据并且剪贴板观察窗口的客户区域的大小已经改变是此消息通过剪贴板观察窗口发送给剪贴板的所有者;WM_ASKCBFORMATNAME = &H030C通过剪贴板观察窗口发送此消息给剪贴板的所有者来请求一个CF_OWNERDISPLAY格式的剪贴板的名字WM_CHANGECBCHAIN = &H030D当一个窗口从剪贴板观察链中移去时发送此消息给剪贴板观察链的第一个窗口;WM_HSCROLLCLIPBOARD = &H030E此消息通过一个剪贴板观察窗口发送给剪贴板的所有者;它发生在当剪贴板包含CFOWNERDISPALY格式的数据并且有个事件在剪贴板观察窗的水平滚动条上;所有者应滚动剪贴板图象并更新滚动条的值;WM_QUERYNEWPALETTE = &H030F此消息发送给将要收到焦点的窗口,此消息能使窗口在收到焦点时同时有机会实现他的逻辑调色板WM_PALETTEISCHANGING= &H0310当一个应用程序正要实现它的逻辑调色板时发此消息通知所有的应用程序WM_PALETTECHANGED = &H0311此消息在一个拥有焦点的窗口实现它的逻辑调色板后发送此消息给所有顶级并重叠的窗口,以此来改变系统调色板WM_HOTKEY = &H0312当用户按下由REGISTERHOTKEY函数注册的热键时提交此消息WM_PRINT = 791应用程序发送此消息仅当WINDOWS或其它应用程序发出一个请求要求绘制一个应用程序的一部分;WM_PRINTCLIENT = 792WM_HANDHELDFIRST = 856WM_HANDHELDLAST = 863WM_PENWINFIRST = &H0380WM_PENWINLAST = &H038FWM_COALESCE_FIRST = &H0390WM_COALESCE_LAST = &H039FWM_DDE_FIRST = &H03E0WM_DDE_INITIATE = WM_DDE_FIRST + 0一个DDE客户程序提交此消息开始一个与服务器程序的会话来响应那个指定的程序和主题名;WM_DDE_TERMINATE = WM_DDE_FIRST + 1一个DDE应用程序(无论是客户还是服务器)提交此消息来终止一个会话;WM_DDE_ADVISE = WM_DDE_FIRST + 2一个DDE客户程序提交此消息给一个DDE服务程序来请求服务器每当数据项改变时更新它WM_DDE_UNADVISE = WM_DDE_FIRST + 3一个DDE客户程序通过此消息通知一个DDE服务程序不更新指定的项或一个特殊的剪贴板格式的项WM_DDE_ACK = WM_DDE_FIRST + 4此消息通知一个DDE(动态数据交换)程序已收到并正在处理WM_DDE_POKE, WM_DDE_EXECUTE, WM_DDE_DATA, WM_DDE_ADVISE, WM_DDE_ UNADVISE, or WM_DDE_INITIAT消息WM_DDE_DATA = WM_DDE_FIRST + 5一个DDE服务程序提交此消息给DDE客户程序来传递个一数据项给客户或通知客户的一条可用数据项WM_DDE_REQUEST = WM_DDE_FIRST + 6一个DDE客户程序提交此消息给一个DDE服务程序来请求一个数据项的值;WM_DDE_POKE = WM_DDE_FIRST + 7一个DDE客户程序提交此消息给一个DDE服务程序,客户使用此消息来请求服务器接收一个未经同意的数据项;服务器通过答复WM_DDE_ACK消息提示是否它接收这个数据项;WM_DDE_EXECUTE = WM_DDE_FIRST + 8一个DDE客户程序提交此消息给一个DDE服务程序来发送一个字符串给服务器让它象串行命令一样被处理,服务器通过提交WM_DDE_ACK消息来作回应;WM_DDE_LAST = WM_DDE_FIRST + 8WM_APP = &H8000WM_USER = &H0400此消息能帮助应用程序自定义私有消息;其中:参数idHook 指定了钩子的类型,总共有如下13种:WH_CALLWNDPROC 系统将消息发送到指定窗口之前的"钩子"WH_CALLWNDPROCRET 消息已经在窗口中处理的"钩子"WH_CBT 基于计算机培训的"钩子"WH_DEBUG 差错"钩子"WH_FOREGROUNDIDLE 前台空闲窗口"钩子"WH_GETMESSAGE 接收消息投递的"钩子"WH_JOURNALPLAYBACK 回放以前通过WH_JOURNALRECORD"钩子"记录的输入消息WH_JOURNALRECORD 输入消息记录"钩子"WH_KEYBOARD 键盘消息"钩子"WH_MOUSE 鼠标消息"钩子"WH_MSGFILTER 对话框、消息框、菜单或滚动条输入消息"钩子"WH_SHELL 外壳"钩子"WH_SYSMSGFILTER 系统消息"钩子"WH_CALLWNDPROC 发送到窗口的消息。

C++Builder处理Windows讯息(Message)

C++Builder处理Windows讯息(Message)

前⾔ 虽然C++Builder为⼀RAD式的程式发展⼯具,程式设计师在⼤多数情况下不需理会Windows讯息的细节,只要将⼼思放在软体元件的事件处理函式即可。

然⽽由於Windows作业系统终究是⼀个以讯息驱动的系统,因此架构其上的的应⽤程式⾃然⽆法⾃外於系统之外,在遭遇到C++Builder没有 定义的事件时,Windows讯息处理能⼒仍然是C++Builder程式⼈不可或缺的能⼒。

不可否认地,C++Builder所提供的事件处理能⼒已具备了某⼀程度的完备性,然⽽我们也必须承认,在C++Buider建构的VCL美丽新世界中,仍 然不免有漏之鱼。

例如使⽤者⾃定讯息的处理,Winsock讯息的处理及⼀些Windows讯息如WM_NC**** 系列的讯息都是C++Builder的物件模型所未包 含的。

在本⽂中我将告诉你如何以C++Builder来处理Windows讯息,并透过此⼀能⼒,来达成在⼀般VCL元件所⽆法做到的功能。

何谓Window讯息(Message) ⼤家都知道 Windows是⼀套以讯息驱动(Message Driven)的作业系统。

然⽽对於讯息本⾝却讳莫如深,只知其然⽽不知其所以然,虽然C++Builder将某些Windows讯息封装於事件(Event)系统中,但⾝为⼀个Windows程式设计师,实有必要了解Windows的讯息系统。

所谓讯息是由Windows作业系统送往程式的事件。

它是系统中各个物件沟通的⽅式,举例来说,当移动滑⿏、按下滑⿏键、改变视窗⼤⼩时,Windows都会送出讯息以通知程式。

当然,为了要辨别事件的内容,Windows系统中定义了许多的讯息,如WM_PAINT,WM_CHAR等等。

当事件发⽣时,Windows会判断该事件必须由那个程式接收,然後将事件以讯息的⽅式送往程式的视窗中。

虽然在Windows系统中包含了数以百 计的事件,但是作业系统并没有为各个事件设计不同的讯息结构,⽽是以⼀个⼀般性的结构来描述讯息,这个结构在C++Builder就称是TMessage. 当然,随着事件的不同,对於讯息的解释也有所不同,在C++Builder中也为各种常⽤的讯息定义了专属的结构,你可以直接使⽤它们来解释讯 息。

Windows消息机制简介

Windows消息机制简介

Windows消息机制简介【摘要】Windows消息机制是Windows编程中至关重要的一部分。

Windows消息机制中的消息是指Windows发出的一个通知,该通知告诉应用程序某个事情发生了。

而且消息都有其固定的结构信息。

另外,Windows消息可以分为队列消息和非队列消息。

队列消息是把消息投递到一个先进先出的消息队列中,而非队列消息是把消息直接发送给窗口过程。

而在消息的发送过程中,存在两种发送方式,分别是发送方式和寄送方式。

对于Windows通过发送方式将消息存入系统消息队列后,再将消息分配到对应的应用程序的消息队列,此时通过消息循环读取消息,再在消息循环中提请操作系统将该调用对应的窗口函数。

一、什么是消息消息,就是指Widows发出的一个通知,告诉应用程序某个事情发生了。

例如,当鼠标单击某应用程序的一个按钮。

这时,Widows(操作系统)给应用程序发送这个消息,通知应用程序该按钮被点击,应用程序将进行相应反应。

消息本身是作为一个记录传递给应用程序的,这个记录(一般在C/Java/汇编中称为“结构体”)中包含了消息的类型以及其他信息。

这个记录类型叫做Msg。

那么,我们先来介绍一下这个记录的结构信息。

它在Windows中的声明如下:Typedef struct tagMSG{HWND hwnd;UINT message;WPARAM wParam;LPARAM lParam;DWORD time;POINT pt;} MSG,*PMSG;其中各数据成员的意义表示如下,hwnd:消息将要发送到的那个窗口的句柄,用这个参数可以决定让哪个窗口接收消息。

message:消息常量标识符,也就是我们常说的消息号。

wParam:一个32位的消息参数,这个值的确切意义取决于消息本身。

lParam:一个32位的消息参数,这个值的确切意义取决于消息本身。

time:消息放入消息队列中的时间,在这个域中写入的并非当时日期,而是从Windows启动后所测量的时间值。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CallWindowProc()大显身手了,CallWindowProc()负责将剩下的消息送到Oldwidowproc去处理。这也是为什么要在CallWindowProc()中将oldwindowproc作为参数了。你也不一定非要用oldwindowproc,完全可以用另外一个windowproc作为参数,那么,剩下的消息送到你设定的窗口函数中去处理。
callwindowproc 和subclass有关。当你用SetWindowLong()时,将原来的窗口过程替换为新的窗口过程,同时SetWindowLong()(和你设的参数有关)将返回原来的窗口过程oldwindowproc。
现在,所有送给原来窗口过程oldwindowproc的消息将全部送到新的窗口过程newwindowproc去处理。你可以选择你要处理的消息。剩下的消息怎么办?此时,就有
--------------------------------------------------------------------------
15 WM_Paint
32 WM_SETCURSOR
33 WM_MOUSEACTIVATE
132 WM_NCHITTEST //移动鼠标,按住或释放鼠标时发生
134 WM_NCACTIVATE
553 WM_MDIGETACTIVE
WM_VSCROLL 滚动条上下移动时候发送此消息
WM_HSCROLL 滚动条左右移动时候发送此消息
--------------------------------
544 WM_MDICREATE
7 WM_SETFOCUS
132 WM_NCHITTEST 移动鼠标,按住或释放鼠标时发生
70 WM_WINDOWPOSCHANGING 发送此消息给那个窗口的大小和位置将要被改变时,来调用setwindowpos函数或其它窗口管理函数
71 WM_WINDOWPOSCHANGED 发送此消息给那个窗口的大小和位置已经被改变时,来调用setwindowpos函数或其它窗口管理函数
545 WM_MDIDESTROY
547 WM_MDIRESTORE 程序 发送此消息给MDI客户窗口让子窗口从最大最小化恢复到原来大小
564 WM_MDIREFRESHMENU 程序 发送此消息给MDI客户窗口用MDI菜单代替子窗口的菜单
-----------断点条件:
(Message.Msg <> 133) And (Message.Msg <> 134) And (Message.Msg <> 553) And (Message.Msg <> 20) And (Message.Msg <> 132) And (Message.Msg <> 70) And (Message.Msg <> 15) And (Message.Msg <> 32) And (Message.Msg<>7) And (Message.Msg<>8) And (Message.Msg<>641) And (Message.Msg<>528) And (Message.Msg<>160) And (Message.Msg<>124) And (Message.Msg<>125) And (Message.Msg<>131) And (Message.Msg<>71) And (Message.Msg<>3) And (Message.Msg<>5) And (Message.Msg<>63) And (Message.Msg<>547) And (Message.Msg<>564) And (Message.Msg<>33) And (Message.Msg<>257)
257 WM_KEYUP
641 WM_IME_SETCONTEXT
48 WM_GETFONT
129 WM_NCCREATE 当某个窗口第一次被创建时,此消息在WM_CREATE消息发送前发送;
48656
528 WM_PARENTNOTIFY 当MDI子窗口被创建或被销毁,或用户按了一下鼠标键而光标在子窗口上时发送此消息给它的父窗口
133 WM_NCPAINT
20 WM_ERASEBKGND
124 WM_STYLECHANGING 当调用SETWINDOWLONG函数将要改变一个或多个 窗口的风格时发送此消息给那个窗口
WM_SIZEBiblioteka 当窗口显示区域大小改变的时候触发
125 WM_STYLECHANGED
131 WM_NCCALCSIZE 当某个窗口的客户区域必须被核算时发送此消息
相关文档
最新文档