关于SendMessage

SendMessage函数详解 阅读详情

编译:snowapex

本文是对MSDN中关于SendMessage的翻译与小结。
SendMessage函数功能描述:将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用窗口过程,直到窗口过程处理完消息后才返回。

.函数原型:
LRESULT SendMessage(
HWND hWnd, // 目标窗口句柄
UINT Msg, // 被发送的消息
WPARAM wParam, // 第一个消息参数
LPARAM lParam // 第二个消息参数
);


.参数:
hWnd
窗口过程接收消息的窗口句柄。如果此参数为HWND_BROADCAST,则消息被送到系统的所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口。消息不被送到子窗口。
Msg
指定被发送的消息;
wParam
指定附加消息的特定信息;
lParam
指定附加消息的特定信息。


.返回值:
返回值返回消息处理的结果,其依赖于所发送的消息。


.备注:
需要以 HWND_BROADCAST 方式通信的应用程序应该使用 RegisterWindowMessage 函数来获得应用程序间通信的独特消息。
如果指定的窗口通过调用线程被创建,则窗口过程作为子程序被立即调用。如果指定的窗口通过调用不同线程被创建,则系统切换到该线程并调用适当的窗口过程。线程间的消息只有在接收线程执行消息检索代码时才被处理。发送线程将被阻塞到接收线程处理完消息为止。
Windows CE:Windows CE不支持Windows桌面平台所支持的所有消息。在使用SendMessage函数之前,应检查发送的消息是否被Windows CE所支持。


.使用环境:
Windows NT: 3.1及以上版本;
Windows:95及以上版本;
Windows CE:1.0及以上版本;
头文件:winuser.h;
输入库:user32.lib;
Unicode:在WindowsNT(Windows2000)环境下以Unicode和ANSI方式实现。


.示例代码:

case WM_KEYDOWN:
        switch (wParam)
        {
        case VK_HOME:
             SendMessage (hwnd, WM_VSCROLL, SB_TOP, 0) ;
             break ;

        case VK_END:
             SendMessage (hwnd, WM_VSCROLL, SB_BOTTOM, 0) ;
             break ;

        case VK_PRIOR:
             SendMessage (hwnd, WM_VSCROLL, SB_PAGEUP, 0) ;
             break ;
        ...
        }
        return 0 ;
    ...

.常见问题
1)使用SendMessage来实现剪切、复制和粘贴
SendMessage(hwnd, WM_COPY, 0, 0);
SendMessage(hwnd, WM_CUT, 0, 0);
SendMessage(hwnd, WM_PASTE, 0, 0);
2)SendMessage与PostMessage的区别
PostMessage将消息放入消息队列后马上返回,而SendMessage直到窗口过程处理完消息后才返回

3)SendMessage发送WM_COPYDATA消息在进程间传送数据
WM_COPYDATA消息主要目的是允许在进程间传递少量只读数据。SDK文档推荐用户使用SendMessage()函数,接收方在数据复制完成前不返回,这样发送方就不可能删除和修改数据。
例如:

std:string strData = "VC知识库 VCKBASE.COM";
COPYDATASTRUCT cds;
cds.dwData = 0;
cds.cbData = strData.Length();
cds.lpData = strData.c_str();
::SendMessage(hwnd, WM_COPYDATA, NULL, (LPARAM)&cds); 
SendMessage与PostMessage的区别 简介 Send有发送的意思,而Post具有投寄的意思。 联想一下现实生活中我们写信(很久很久以前。。。。)来记就很简单了:  Send:  相当于邮寄员,他会将快件亲手交给收件人,并且需要收件人签字,他才闪人。而在消息机制中,就是说,系统(邮寄员)会将收到的消息(邮局分发)直接发送到某个窗口的窗口过程(收件人),并且需要该窗口作出处理(收件人签字)才返回。 这东东就是SendMes 阅读详情

相关推荐

VB SendMessage使用例程

有关这一部分内容,网上资源都是说很简单、很常用,但是没有完整的示例。我找到一份VB写的完整示例,后续再整理C++的。 SendMessage基础知识 网上相关的文字介绍有很多: C++进程间通信之SendMessage和PostMessage 进程通信-SendMessage使用方法 示例程序 1、功能说明 程序总共分三大步骤: 1、发送端获取当前工程目录中图片名称,生成COPYDATA数据“C0_00"。用SendMessage发送给接收端。 2、接收端收到"C0_00"数据,显示在接收端窗体的Pictu

Nie2014的博客 1824

SendMessage函数完全使用手册

SendMessage函数完全使用手册[@more@]首先 我们了解一下Windows的消息机制。Windows是一个消息驱动式系统,Windows消息提供应用程序与应用程序之间,应用程序与Windows系统之间进行通信的手段。...

cszaj06422的专栏 1440

IEC61850实战:从ICD文件解析到模型构建

本文深入解析IEC61850标准中的ICD文件结构,从Header、IED到DataTypeTemplates部分,详细介绍了如何构建电力自动化设备的数据模型。通过实战案例展示ICD文件的创建过程,并分享常见问题的调试技巧,帮助工程师快速掌握IEC61850建模方法,提升电力系统自动化项目的实施效率。

weixin_26841743的博客 462

小技巧集合

???????????发消息???????????????第一步:定义#define WM_APP_SHOW_TEXT (WM_USER + 0)第二部:发消息        WM_MESSAGE          Msg;          Msg.MsgId   = WM_APP_SHOW_TEXT;        Msg.hWinSrc = pMsg->hWin;        WM_...

GKoSon的博客 302

VB用API(SendMessage)实现“剪切”,“复制”,“粘贴”,“撤消” 和“删除”功能

'在窗体上画一个TextBox和一个CommandButton,复制粘贴以下代码即可: Option Explicit Private Declare Function SendMessage Lib “user32” Alias “SendMessageA” (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Const WM_CUT = &H300 Const WM_COPY

键盘上的舞指 1881

SendMessage函数完全使用手册 转

http://www.chenjiliang.com/Article/View.aspx?ArticleID=4519 SendMessage函数完全使用手册 首先 我们了解一下Windows的消息机制。Windows是一个消息驱动式系统,Windows消息提供应用程序与应用程序之间,应用程序与Windows系统之间进行通信的手段。 举个例子,打开记事本程序,该程序有一个 ...

afeyfre41671的博客 355

VC++ SendMessage和PostMessage使用总结

结论: 1、PostMessage不能频繁的发送同一个消息,除非保证上次Post过的消息处理完成。 2、如果用SendMessage导致应用程序用户体验下降,应该检查消息处理函数,而不仅仅简单改为PostMessage。 3、如果消息是程序必须处理的,则不能使用PostMessage。消息队列满时,后面来的PostMessage的消息将被丢弃。 4、如果消息是程序必须处理,...

$firecat利白的代码足迹$ 4930

SendMessage哪些事儿

关于SendMessage和PostMessage 简单的理解,PostMessage把消息放到接收消息线程的消息队列(post-queue)中,调用该函数的线程不等待其执行。SendMessage分两种情况:(1)发送消息的线程与接收消息的线程是同一个线程:直接调用指定窗口的窗口过程函数,等待其返回。 (2)发送消息的线程与接收消息的线程是不同线程(包括同一进程的不同线程):消...

cctdbnj的专栏 610

一篇关于在COMBOBOX中使用SENDMESSAGE的实例

最近经常有人问我这个问题索引就把代码贴出来大家一起共享吧!其实难度很低就是SENDMESSAGE的应用而已。但是实用性却瞒高,看到很多程序都有类似的功能。 程序功能: 在TEXTBOX中输入字符后马上在COMBOBOX中找匹配的字符串一但找到马上下拉COMBOBOX菜单并且选中此字符串。然后在这期间用户可以使用“F3”继续查找其他类似匹配的字符串,当用户按下“回车键”就使COMBOBOX复原并且选

chenhui530的专栏 7275

SendMessage、PostMessage原理

SendMessage、PostMessage原理本文讲解SendMessage、PostMessage两个函数的实现原理,分为三个步骤进行讲解,分别适合初级、中级、高级程序员进行理解,三个步骤分别为:1、SendMessage、PostMessage的运行机制。2、SendMessage、PostMessage的运行内幕。3、SendMessage、PostMessage的内部实

胡超的学习日志 5万+

SendMessage消息大全

VB.NET SendMessage (PostMessage)消息大全及使用说明  Windows是一个消息驱动式系统,SendMessage(PostMessage)是应用程序和应用程序之间进行消息传递的主要手段之一,这里我搜集整理了SendMessage(PostMessage)函数的详细参数介绍,以备自用。  (1)函数声明:  Private Declare Function Se

wzk456的专栏 4085

java sendmessage_SendMessage、PostMessage原理和源代码详解

本文讲解SendMessage、PostMessage两个函数的实现原理,分为三个步骤进行讲解,分别适合初级、中级、高级程序员进行理解,三个步骤分别为:1、SendMessage、PostMessage的运行机制。2、SendMessage、PostMessage的运行内幕。3、SendMessage、PostMessage的内部实现。注:理解这篇文章之前,必须先了解Windows的消息循环机制。...

weixin_33511258的博客 1136

PostMessage和SendMessage的区别

PostMessage和SendMessage的区别 1, PostMessage只把消息放入队列,不管其他程序是否处理都返回,然后继续执行,这是个异步消息投放函数。而SendMessage必须等待其他程序处理消息完了之后才返回,继续执行,这是个同步消息投放函数。而且,PostMessage的返回值表示PostMessage函数执行是否正确;而SendMessage返回值表示其他程序处理消息后的...

冯同学的博客 2803

浅谈PostMessage与SendMessage的区别

PostMessage 概述:该函数将一个消息放入到与指定窗口创建的线程相联系消息队列里,不等待线程处理消息就返回。消息队列里的消息通过调用GetMessage和PeekMessage取得。 参数: Msg:指定被寄送的消息。 wParam:指定附加的消息特定的信息。 IParam:指定附加的消息特定的信息。 NULL:此函数的操作和调用参数。 dwThread设置为当前线程的标识符PostTh...

qq_38944603的博客 1210

python中sendmessage的使用_SendMessage函数的常用消息及其应用大全

文本框控件通常用于输入和编辑文字。它属于标准Windows编辑控件的一个子类,所以它支持所有编辑控件消息。这儿讲述的技术也适用于由其他厂商设计的,以Windows编辑控件类为基础的其他控件。函数原型:DeclareFunctionSendMessageLib"user32"Alias"SendMessageA"(ByValhwndAsLong,_ByValwMsgAs...

weixin_39603217的博客 2432

Delphi中SendMessage使用说明

Delphi中SendMessage使用说明 SendMessage基础知识 函数功能:该函数将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回。而函数PostMessage不同,将一个消息寄送到一个线程的消息队列后立即返回。 函数原型:LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam); 参数: hWnd:其窗口程序将接收消息的窗口的句柄。如果此参数为HWND_BROADCAST

yygyyygy1233的博客 3146

python中sendmessage的使用_SendMessage用法实例

转:http://blog.csdn.net/coolszy/article/details/5523700SendMessage用法windowsbuttonmenucommandlistc#函数功能:该函数将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回。该函数是应用程序和应用程序之间进行消息传递的主要手段之一。函数原型:LRESULT Send...

weixin_39926943的博客 4003

SendMessage函数

首先 我们了解一下Windows的消息机制。Windows是一个消息驱动式系统,Windows消息提供应用程序与应用程序之间,应用程序与Windows系统之间进行通信的手段。举个例子,打开记事本程序,该程序有一个 “文件“菜单。 那么,在运行该程序的时候,如果用户单击“文件菜单“

C++ for Windows 之路 2万+

SendMessage和PostMessage的区别

对于SendMessage 和 PostMessage 平时口头的解释是 SendMessage 发送消息后等待返回, PostMessage 发送消息后立即返回 。 但是这样解释还是不具体,什么叫等待 什么叫立即? 下面的代码可以解释,SendMessage 必须要等到消息响应函数结束,才继续执行。 #define USER_MSG WM_USER+1 /*使用SendMessage的例子 程序执行的步骤 */ void fun() { // 第一步 SendMe...

心情第一 869
上一篇: Win32 API消息函数:PostMessage
下一篇: CTime 使用总结
nightelve
博客等级 码龄22年 108粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值