对wsprintf  API函数的理解:

int wsprintf

( LPTSTR lpOut, // pointer to buffer for output

 LPCTSTR lpFmt, // pointer to format-control string

 ... // optional arguments

);

第一个参数是输出目的缓冲区,第二个参数是要往缓冲区里面放的内容,

如果参数二中有%s,%x等格式化字符串的符号,就需要在后面加上格式化

字符串的实际内容,即wsprintf这个函数的参数是不确定的,最少有两个

参数。

 WM_SETTEXT  的理解:

WM_SETTEXT
wParam = 0; // not used; must be zero
lParam = (LPARAM)(LPCTSTR)lpsz; // address of window-text string

在调用SendMessage的时候,

LRESULT SendMessage(
HWND
hWnd, // handle of destination window
UINT Msg, // message to send
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);

SendMessage:

第一个参数是你即将要向他发送消息的目的窗口句柄

第二个参数是发送的消息类型。WINDOWS中有很多消息的定义,是以WM_...开头的。

第三第四个参数就是要发送的消息的两个参数的内容。每种类型的

消息都有两个参数,lParam,wParam,通过MSDN可以查找具体的格式。在例子中

WM_SETTEXT中第一个参数wParam必须为0,lParam是指向发送的字符串的首地址。

通过以上三个函数的配合,可以向目标窗口发送消息。

另外的有关API函数有COPYDATASTRUCT:

typedef struct tagCOPYDATASTRUCT {  // cds
DWORD dwData;
DWORD cbData;
PVOID lpData;
} COPYDATASTRUCT;

第一个参数是备用字段,一般不用或者用来表明变量的类型,

第二个参数是发送字符的长度

第三个参数是指向待发送数据的指针。

WM_COPYDATA的格式:

WM_COPYDATA
wParam = (WPARAM) (HWND) hwnd; // handle of sending window
lParam = (LPARAM) (PCOPYDATASTRUCT) pcds; // pointer to structure with data

这个函数是专门用来向不同程序的窗口发送消息的,使用例子:

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

.data

stCopyData  COPYDATASTRUCT <>     ;定义COPY结构体变量

.code

...

invoke  SendMessage,hDestWnd,WM_COPYDATA,hWnd,addr stCopyData     ;使用结构体变量时注意先要填充结构体

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

通过以上代码就可以向其他窗口发送消息了。

SendMessage和PostMessage的区别:

LRESULT SendMessage(
HWND
hWnd, // handle of destination window
UINT Msg, // message to send
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);

Return Values

The return value specifies the result of the message processing and depends on the message sent.

BOOL PostMessage(
HWND
hWnd, // handle of destination window
UINT Msg, // message to post
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);

Return Values

If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error information, callGetLastError.

两个函数的参数是一模一样的,不一样的只是返回值类型。

SendMessage是在向目标程序发送过去消息以后等待发送的消息被处理完毕以后,才从目的程序中返回来。返回值的具体情况依赖于原程序的发送和目标进程对消息的处理。

PostMessage是直接向目标程序的消息队列里面插入发送的消息,不论目标程序处理没处理,都从目标程序中返回来,发送成功返回非0值,发送失败返回0。

PostMessage不能用来传送带有指针的消息,否则发送消息会失败。

窗口间传送数据wsprintf,WM_SETTEXT,SendMessage的理解的更多相关文章

  1. C# 窗口间传递数据

    C#两个窗口之间传递数据 1 公用变量值传递 public partial class Form1 : Form //parent form { public string name="&q ...

  2. 零基础Android学习笔记-03 窗口间的数据传递

    1.通过全局变量来传递. 新建一个全局的类继承于Application package com.example.helloworld; import android.app.Application; ...

  3. C#中使用SendMessage在进程间传递数据的实例

    原文:C#中使用SendMessage在进程间传递数据的实例 1 新建解决方案SendMessageExample 在解决方案下面新建三个项目:CopyDataStruct,Receiver和Send ...

  4. 使用 WM_COPYDATA 在进程间共享数据

    开发中有时需要进程间传递数据,比如对于只允许单实例运行的程序,当已有实例运行时,再次打开程序,可能需要向当前运行的实例传递信息进行特殊处理.对于传递少量数据的情况,最简单的就是用SendMessage ...

  5. C#不同窗体间通信,数据传递

    在一个项目中,很多时候都需要在窗体间进行数据传递和通信,最觉见的是父子窗体之间的数据传递,比如登录ID,各个窗体都需要知道.有很多文章都写了这方面的问题,提出很多优秀的方法,鄙人不才,搜了一些资料之后 ...

  6. 详解 Qt 线程间共享数据(用信号槽方式)

    使用共享内存.即使用一个两个线程都能够共享的变量(如全局变量),这样两个线程都能够访问和修改该变量,从而达到共享数据的目的. Qt 线程间共享数据是本文介绍的内容,多的不说,先来啃内容.Qt线程间共享 ...

  7. CPU与外设传送数据方式

    7.2 CPU与外设之间数据传送的方式 在微型计算机系统中,CPU与外设之间的数据传送方式主要有程序传送方式.中断传送方式和直接存储器存取(DMA)传送方式,分别介绍如下.     7.2.1 程序传 ...

  8. Qt学习:线程间共享数据(使用信号槽传递数据,必须提前使用qRegisterMetaType来注册参数的类型)

    Qt线程间共享数据主要有两种方式: 使用共享内存.即使用一个两个线程都能够共享的变量(如全局变量),这样两个线程都能够访问和修改该变量,从而达到共享数据的目的: 使用singal/slot机制,把数据 ...

  9. Excel文档间的数据替换 ---电脑版APP 自动操作魔法师

    http://www.won-soft.com/macro/solution/excel-data-replace.htm 介绍: 在我们的日常工作中, 可能经常需要使用同各种数据表格打交道.比如财务 ...

随机推荐

  1. [Python] numpy.Matrix

    import numpy as np np.matrix('1, 2; 3, 4') #1, 2 #3, 4 np.matrix([[1,2],[3,4]]) #1, 2 #3, 4

  2. Django框架之模板语法【转载】

    Django框架之模板语法 一.什么是模板? 只要是在html里面有模板语法就不是html文件了,这样的文件就叫做模板. 二.模板语法分类 一.模板语法之变量:语法为 {{ }}: 在 Django ...

  3. 496. Next Greater Element I + 503. Next Greater Element II + 556. Next Greater Element III

    ▶ 给定一个数组与它的一个子列,对于数组中的一个元素,定义它右边第一个比他大的元素称为他的后继,求所给子列的后继构成的数组 ▶ 第 496 题,规定数组最后一个元素即数组最大元素的后继均为 -1 ● ...

  4. 最值得学习阅读的10个C语言开源项目代码

    阅读优秀代码是提高开发人员修为的一种捷径-- 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网 ...

  5. UNITY 接讯飞语音过程总结

    11:13 2017/3/141,安装问题:JDK与ECLIPSE位数一定要对应,32位对64位会出现 java was returned ....code 13的弹框错误.版本号可以不一致.2,EC ...

  6. 【334】Python Object-Oriented Programming

    Reference: Python中self用法详解 __init__ 方法: 私有变量. Reference: [290]Python 函数 class 里面的 function 创建与此一致,只是 ...

  7. 【Arduino】、Arduino+ESP8266上传至oneNet云

    一.硬件简介 1. Arudino 是一种开源的电子平台,该平台最初主要基于AVR单片机的微控制器和相应的开发软件,包含硬件(各种型号的Arduino板)和软件(Arduino IDE). 2. ES ...

  8. python's object model

    [python's object model] 1.object.__init__(self[, ...])        如果subclass没有实现__init__,那么python类在实例化的时 ...

  9. js小例子之二级联动

    联动原理 当用户点击省级的下拉选项,选择所在省,下一个下拉选项里的选项,则变成用户选择省下的所有市的信息,不会出现其它省市的信息. 省市数据 把省市数据,保存在js文件中,以json形式保存,以便读取 ...

  10. Win2003+apache+PHP+SqlServer2008 配置

    Win2003+apache+PHP+SqlServer2008 配置     安装前的准备: 1.Apache2.2.2 2.PHP5.2.17 3.SqlServer2008 4.sqlncli. ...