sendmessage

C# sendmessageusing System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

const int WM_SETTEXT = 0x000C;

[DllImport("User32.dll", EntryPoint = "SendMessage")]
private static extern int SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, string lParam);

private void button1_Click(object sender, EventArgs e)
{
SendMessage(this.textBox1.Handle,WM_SETTEXT,(IntPtr)0,"A");
}
}
}

sendMessage 例子#include "windows.h"
///////////////////////////////////////
int main(int argc, char* argv[])
{
HWND hWnd;
LPCTSTR str ="扫雷";
hWnd=::FindWindow(NULL,"Microsoft 网上红心大战");
if(hWnd)
::SendMessage(hWnd,WM_SETTEXT,0,(long )str );
printf("Hello World!\n");
return 0;
}
//打开红心大战 , 运行程序,把红心大战标题改为扫雷

C# SendMessage 问题,高手来,谢谢关键是你的系统要用PoseMessage这个
B00L PostMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam);
转C#用SHARP定义就OK,可提交回车

SendMessageOption Explicit
Private Const WM_SETTEXT = &HC
Private Declare Function SendMessage& Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any)
Private Sub Command1_Click()
Dim a As String '应该是这里的问题
a = "abc"
SendMessage ByVal Text1.hwnd, ByVal WM_SETTEXT, ByVal 0, ByVal a
End Sub

C# SendMessage 问题,给个用这个函数
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);

就可以了,楼上的只是个说明

sendmessage与postmessage有什么区别看时间过去好久了 。楼上都说的很好了,再给你形象的解释下,为后来人解读下把 。。

PostMessage 和SendMessage的区别主要在于是否等待其他程序消息处理 。
PostMessage只是把消息放入队列,不管其他程序是否处理都返回,然后继续执行;
而SendMessage必须等待其他程序处理消息后才返回,继续执行 。
这两个函数的返回值也不同,PostMessage的返回值表示PostMessage函数执行是否正确----BOOL,
而SendMessage的返回值表示其他程序处理消息后的返回值---LRESULT 。

PostMessage 是将消息发送到窗口的消息队列中,然后立即返回
SendMessage是将消息发送到窗口函数,在窗口函数处理完消息后才返回 。所以,PostMessage 是异步处理,而SendMessage是同步处理

先来看看Send与Post这两个英文单词的意思:Send有发送的意思,而Post具有投寄的意思 。
联想一下现实生活中我们写信(很久很久以前 。。。。)来记就很简单了:
Send: 相当于邮寄员,他会将快件亲手交给收件人,并且需要收件人签字,他才闪人 。而在消息机制中 , 就是说,系统(邮寄员)会将收到的消息(邮局分发)直接发送到某个窗口的窗口过程(收件人),并且需要该窗口作出处理(收件人签字)才返回 。这东东就是SendMessage
Post: 相当于邮局、邮筒等等 , 我们写好信好,会将信交给邮局 , 或投寄到邮筒里 , 而什么时候发送 , 发送到哪里都由邮局来处理 , 我们投寄信件的时候 , 是不会等候这封信件到达收件人手里,然后才回家的 。而在消息机制中,就是说,系统(我们)将收到的消息(信件)投寄到应用程序的消息循环(相当于邮筒)中,然后就闪人,具体啥时候处理这条消息(啥时候发送邮件),那就得看“办事效率”了 。
区别很明显,SendMessage的消息是不进队列的,而PostMessage的需要排队 。
但,值得说明的是:虽然一个要进队,一个不进队,但是最终处理消息的地方都一样:都是系统调用窗口过程进行处理(收件人作出反应)

PostMessage和SendMessage有什么区别其实你在网上搜索一下就可以找到很多答案!难道网上的回答都满足不了你 , 那你指望我们就能让你理解吗?

我把我的理解说一下,希望你懂 。
1.SendMessage你就把他理解为调用窗口过程函数即可 。
LRESULT CALLBACK WindowProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
这个好懂吧!把他们等同即可,SendMessage就是 调用WindowProc,SendMessage的返回值就是WindowProc的返回值 。

2 。PostMessage就比较麻烦 。
PostMessage后 , 系统会把消息放在程序的消息队列 。
之后消息循环(这个在win32程序经常看到的)
While(GetMessage( 。。。。))

。。。。
DispatchMessage( 。。。);


GetMessage会获取到这个消息 。
(对于很多初学者来说这个GetMessage确实不要理解,
因为它跟我们平常的程序代码执行思想很不同 。
Getmessage有时会堵塞,程序会停在那里 。
它什么时候被调用,谁调用它呢?--其实这都是系统的事 , 
系统发现程序的消息队列有消息了,就会让你的程序调用
Getmessage,把消息取出来,while循环继续执行,到
DispatchMessage时就可以把它等同于调用窗口过程函数
WindowProc了 。

整理一下思路就是:
PostMessage=
消息进入消息队列-》GetMessage把消息取出来-》程序执行到DispatchMessage-》DispatchMessage就相当于调用窗口过程函数了

所以2个函数最后都会去调用窗口过程函数,只是PostMessage调用前要经历一些“曲折”的步骤 。

sendmessage和postmessage的区别具体的参数情况就不为搂住列举了,相信楼主已经查过msdn.
说说区别
PostMessage只负责将消息放到消息队列中,不确定何时及是否处理
SendMessage要等到受到消息处理的返回码(DWord类型)后才继续
PostMessage执行后马上返回
SendMessage必须等到消息被处理后才会返回 。

PostMessage和SendMessage有什么区别?在控制别的应用程序的时候,经常需要等待直到某个功能结束,例如:打开一个窗口-->等待直到窗口结束这个时候就可以用到SendMessage如果在打开这个窗口后仍然需要对该窗口的界面进行设置 , 比如Edit的value等等,比如:打开一个窗口-->控制窗口的control的属性这个时候就需要PostMessage使用一个钩子程序截获消息后,使用SendMessage把消息发送到主处理程序进行处理,但是在主处理程序还没有完成任务的时候,被设置钩子的程序进入了停止的状态,不可以处理WM_PAINT,WM_MOVE,.......等的基本信息,必须要等SendMessage发送出的消息完成后,才能继续运行,整个界面一片空白,把钩子消息设置成PostMessage的发送消息形式后,问题解决!我查了MSDN对这两个API的定义,PostMessage只是把消息放入队列,不管其他程序是否处理都返回,然后继续执行;而SendMessage必须等待其他程序处理消息后才返回 , 继续执行 。PostMessage的返回值表示PostMessage函数执行是否正确;而SendMessage的返回值表示其他程序处理消息后的返回值 。使用这两个发送消息函数的最重要的是要看你的程序是否要对消息的滞后性关注否,PostMessage会造成消息的滞后性,而SendMessage则不会,但如果SendMessage消息处理失败,则会造成程序停止!

PostMessage()和SendMessage()有什么不同?SendMessage()向窗口发送消息后,必须等窗口处理完消息并返回值后才结束运行;而PostMessage()是把消息发送到窗口的消息队列中,不管该消息是否已处理都立即返回 。
这也是所谓同步运行和异步运行的区别 。

vb中sendmessage函数的用法sendmessage函数
函数功能:该函数将指定的消息发送到一个或多个窗口 。此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回 。而函数PostMessage不同,将一个消息寄送到一个线程的消息队列后立即返回 。
函数原型:LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam , LPARAM IParam);

参数:
hWnd:其窗口程序将接收消息的窗口的句柄 。如果此参数为HWND_BROADCAST,则消息将被发送到系统中所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口,但消息不被发送到子窗口 。
Msg:指定被发送的消息 。
wParam:指定附加的消息指定信息 。
IParam:指定附加的消息指定信息 。
返回值:返回值指定消息处理的结果,依赖于所发送的消息 。
备注:需要用HWND_BROADCAST通信的应用程序应当使用函数RegisterWindowMessage来为应用程序间的通信取得一个唯一的消息 。
消息分三类:标准消息,命令消息,通告消息.
标准消息通过解析Msg直接发送,命令消息通过解析标准消息的Msg获得WM_COMMAND,再解析wParam从而获得命令ID号消息.
如: MFC类里面封装了窗口句柄我们可以这样用函数,SendMessage(WM_COMMAND,ID_NAME,0);

VB中SendMessage的详细用法!SendMessage函数功能描述:将指定的消息发送到一个或多个窗口 。此函数为指定的窗口调用窗口过程 , 直到窗口过程处理完消息后才返回 。参数:hWnd
窗口过程接收消息的窗口句柄 。iparam指定附加消息的特定信息msg指定被发送的信息 。

VB中SendMessage和postmessage的详细用法 。SendMessage : 发送一个消息给操作系统,并且等待操作系统执行完这个消息 。postmessage: 发送一个消息给操作系统,不等待操作系统执行完这个消息就立即返回执行下一条语句 。SendMessage定义:Public Shared Sub SendMessage ( _ ByRef m As Message _ )SendMessage调用: Dim m As Message MessageWindow.SendMessage(m) postmessage定义: Public Shared Sub PostMessage ( _ ByRef m As Message _ )postmessage调用: Dim m As Message MessageWindow.PostMessage(m) 它们的定义和调用格式是一样的,只是执行时的效果不一样,刚才我已经说过了 。参数的m含义: 是一个windows的消息结构体,用来描述传递的消息 。比如: Dim msg As Microsoft.WindowsCE.Forms.Message = _ Microsoft.WindowsCE.Forms.Message.Create(MsgWin.Hwnd, _MsgWindow.WM_CUSTOMMSG, New IntPtr(e.X), New IntPtr(e.Y))MessageWindow.SendMessage(msg)MsgWin.Hwnd :表示消息的句柄 。MsgWindow.WM_CUSTOMMSG :表示消息的ID,就是一个唯一的消息的标识号,是一个整数 。IntPtr(e.X)和 New IntPtr(e.Y): 消息的两个附加参数 , 这要根据具体的消息而论了 。

vb中SendMessage的用法??参考下面的网页
http://hi.baidu.com/yhpp521/blog/item/b8a42634b8b15b3b5bb5f5dd.html
http://myvatican.bokee.com/1506949.html
http://search.csdn.net/search/SendMessage/6/all/

希望对你有帮助

VB 中的sendmessage的用法 高手进用API文本...把sendmessage函数插入进去!如下:
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
这是常数:
Private Const WM_CLOSE = &H10
Pirvate sub command1)Click()
SendMessage me.hwnd,WM_CLOSE,0,0
End Sub

谁有SendMessage发送的所有消息的名称以及使用方法这几天常用到sendmessage , 收藏代码值,方便以后用 。

WM_NULL = 0x0000
WM_Create = 0x0001
;应用程序创建一个窗口
WM_DESTROY = 0x0002
;一个窗口被销毁
WM_MOVE = 0x0003
;移动一个窗口
WM_SIZE = 0x0005
;改变一个窗口的大小
WM_ACTIVATE = 0x0006
;一个窗口被激活或失去激活状态;
WM_SETFOCUS = 0x0007
;获得焦点后
WM_KILLFOCUS = 0x0008
;失去焦点
WM_ENABLE = 0x000A
;改变enable 状态
WM_SETREDRAW = 0x000B
;设置窗口是否能重画
WM_SETTEXT = 0x000C
;应用程序发送此消息来设置一个窗口的文本
WM_GETTEXT = 0x000D
;应用程序发送此消息来复制对应窗口的文本到缓冲区
WM_GETTEXTLENGTH = 0x000E
;得到与一个窗口有关的文本的长度(不包含空字符)
WM_PAINT = 0x000F
;要求一个窗口重画自己
WM_CLOSE = 0x0010
;当一个窗口或应用程序要关闭时发送一个信号
WM_QUERYENDSESSION = 0x0011
;当用户选择结束对话框或程序自己调用ExitWindows函数
WM_QUIT = 0x0012
;用来结束程序运行或当程序调用postquitmessage函数
WM_QUERYOPEN = 0x0013
;当用户窗口恢复以前的大小位置时,把此消息发送给某个图标
WM_ERASEBKGND = 0x0014
;当窗口背景必须被擦除时(例在窗口改变大小时)
WM_SYSCOLORCHANGE = 0x0015
;当系统颜色改变时,发送此消息给所有顶级窗口
WM_ENDSESSION = 0x0016
;当系统进程发出WM_QUERYENDSESSION 消息后,此消息发送给应用程序通知它对话是否结束
WM_SYSTEMERROR = 0x0017
;系统错误
WM_SHOWWINDOW = 0x0018
;当隐藏或显示窗口是发送此消息给这个窗口
WM_ACTIVATEAPP = 0x001C
;发此消息给应用程序哪个窗口是激活的,哪个是非激活的;
WM_FONTCHANGE = 0x001D
;当系统的字体资源库变化时发送此消息给所有顶级窗口
WM_TIMECHANGE = 0x001E
;当系统的时间变化时发送此消息给所有顶级窗口
WM_CANCELMODE = 0x001F
;发送此消息来取消某种正在进行的摸态(操作)
WM_SETCURSOR = 0x0020
;如果鼠标引起光标在某个窗口中移动且鼠标输入没有被捕获时,就发消息给某个窗口
WM_MOUSEACTIVATE = 0x0021
;当光标在某个非激活的窗口中而用户正按着鼠标的某个键发送此消息给当前窗口
WM_CHILDACTIVATE = 0x0022
;发送此消息给MDI 子窗口当用户点击此窗口的标题栏,或当窗口被激活 , 移动,改变大小
WM_QUEUESYNC = 0x0023
;此消息由基于计算机的训练程序发送,通过WH_JOURNALPALYBACK的hook程序分离出用户输入消息
WM_GETMINMAXINFO = 0x0024
;此消息发送给窗口当它将要改变大小或位置;
WM_PAINTICON = 0x0026
;发送给最小化窗口当它图标将要被重画
WM_ICONERASEBKGND = 0x0027
;此消息发送给某个最小化窗口,仅当它在画图标前它的背景必须被重画
WM_NEXTDLGCTL = 0x0028;
发送此消息给一个对话框程序去更改焦点位置
WM_SPOOLERSTATUS = 0x002A;
每当打印管理列队增加或减少一条作业时发出此消息
WM_DRAWITEM = 0x002B;
WM_MEASUREITEM = 0x002C;
当button, combo box, list box, list view control, or menu item 被创建时
发送此消息给控件的所有者
WM_DeleteITEM = 0x002D;当listbox或combobox 被销毁或当某些项被删除通过LB_DeleteSTRING,LB_RESETCONTENT,CB_DeleteSTRING,CB_RESETCONTENT消息
WM_VKEYTOITEM = 0x002E;此消息有一个LBS_WANTKEYBOARDINPUT 风格的发出给它的所有者来响应
WM_KEYDOWN 消息
WM_CHARTOITEM = 0x002F;
此消息由一个LBS_WANTKEYBOARDINPUT 风格的列表框发送给他的所有者来
响应WM_CHAR 消息
WM_SETFONT = 0x0030;
当绘制文本时程序发送此消息得到控件要用的颜色
WM_GETFONT = 0x0031;
应用程序发送此消息得到当前控件绘制文本的字体
WM_SETHOTKEY = 0x0032;
应用程序发送此消息让一个窗口与一个热键相关连
WM_GETHOTKEY = 0x0033;
应用程序发送此消息来判断热键与某个窗口是否有关联
WM_QUERYDRAGICON = 0x0037;
此消息发送给最小化窗口,当此窗口将要被拖放而它的类中没有定义图标,应用程
序能返回一个图标或光标的句柄,当用户拖放图标时系统显示这个图标或光标
WM_COMPAREITEM = 0x0039;
发送此消息来判定combobox 或listbox 新增加的项的相对位置
WM_GETOBJECT = 0x003D;
WM_COMPACTING = 0x0041;
显示内存已经很少了
WM_WINDOWPOSCHANGING = 0x0046;
发送此消息给那个窗口的大小和位置将要被改变时,来调用setwindowpos 函数或
其它窗口管理函数
WM_WINDOWPOSCHANGED = 0x0047;
发送此消息给那个窗口的大小和位置已经被改变时,来调用setwindowpos 函数或
其它窗口管理函数
WM_POWER = 0x0048;(适用于16 位的windows)
当系统将要进入暂停状态时发送此消息
WM_COPYDATA = https://www.zaoxu.com/jjsh/bkdq/0x004A;
当一个应用程序传递数据给另一个应用程序时发送此消息
WM_CANCELJOURNAL = 0x004B;
当某个用户取消程序日志激活状态,提交此消息给程序
WM_NOTIFY = 0x004E;
当某个控件的某个事件已经发生或这个控件需要得到一些信息时,发送此消息给它
的父窗口
WM_INPUTLANGCHANGEREQUEST = 0x0050;
当用户选择某种输入语言,或输入语言的热键改变
WM_INPUTLANGCHANGE = 0x0051;
当平台现场已经被改变后发送此消息给受影响的最顶级窗口
WM_TCARD = 0x0052;
当程序已经初始化windows 帮助例程时发送此消息给应用程序
WM_HELP = 0x0053;
此消息显示用户按下了F1,如果某个菜单是激活的,就发送此消息个此窗口关联
的菜单 , 否则就
发送给有焦点的窗口,如果当前都没有焦点,就把此消息发送给当前激活的窗口
WM_USERCHANGED = 0x0054;
当用户已经登入或煺出后发送此消息给所有的窗口,当用户登入或煺出时系统更新
用户的具体
设置信息,在用户更新设置时系统马上发送此消息;
WM_NOTIFYFORMAT = 0x0055;
公用控件,自定义控件和他们的父窗口通过此消息来判断控件是使用ANSI 还是
UNICODE 结构
在WM_NOTIFY 消息,使用此控件能使某个控件与它的父控件之间进行相互通信
WM_CONTEXTMENU = 0x007B;
当用户某个窗口中点击了一下右键就发送此消息给这个窗口
WM_STYLECHANGING = 0x007C;
当调用SETWINDOWLONG 函数将要改变一个或多个 窗口的风格时发送此消息给
那个窗口
WM_STYLECHANGED = 0x007D;
当调用SETWINDOWLONG 函数一个或多个 窗口的风格后发送此消息给那个窗口
WM_DISPLAYCHANGE = 0x007E;
当显示器的分辨率改变后发送此消息给所有的窗口
WM_GETICON = 0x007F;
此消息发送给某个窗口来返回与某个窗口有关连的大图标或小图标的句柄;
WM_SETICON = 0x0080;
程序发送此消息让一个新的大图标或小图标与某个窗口关联;
WM_NCCreate = 0x0081;
当某个窗口第一次被创建时,此消息在WM_Create 消息发送前发送;
WM_NCDESTROY = 0x0082;
此消息通知某个窗口,非客户区正在销毁
WM_NCCALCSIZE = 0x0083;
当某个窗口的客户区域必须被核算时发送此消息
WM_NCHITTEST = 0x0084;//移动鼠标,按住或释放鼠标时发生
WM_NCPAINT = 0x0085;
程序发送此消息给某个窗口当它(窗口)的框架必须被绘制时;
WM_NCACTIVATE = 0x0086;
此消息发送给某个窗口 仅当它的非客户区需要被改变来显示是激活还是非激活状
态;
WM_GETDLGCODE = 0x0087;
发送此消息给某个与对话框程序关联的控件,widdows 控制方位键和TAB 键使输
入进入此控件
通过响应WM_GETDLGCODE 消息,应用程序可以把他当成一个特殊的输入控件
并能处理它
WM_NCMOUSEMOVE = 0x00A0;
当光标在一个窗口的非客户区内移动时发送此消息给这个窗口 //非客户区为:窗体
的标题栏及窗
的边框体
WM_NCLBUTTONDOWN = 0x00A1;
当光标在一个窗口的非客户区同时按下鼠标左键时提交此消息
WM_NCLBUTTONUP = 0x00A2;
当用户释放鼠标左键同时光标某个窗口在非客户区十发送此消息;
WM_NCLBUTTONDBLCLK = 0x00A3;
当用户双击鼠标左键同时光标某个窗口在非客户区十发送此消息
WM_NCRBUTTONDOWN = 0x00A4;
当用户按下鼠标右键同时光标又在窗口的非客户区时发送此消息
WM_NCRBUTTONUP = 0x00A5;
当用户释放鼠标右键同时光标又在窗口的非客户区时发送此消息
WM_NCRBUTTONDBLCLK = 0x00A6;
当用户双击鼠标右键同时光标某个窗口在非客户区十发送此消息
WM_NCMBUTTONDOWN = 0x00A7;
当用户按下鼠标中键同时光标又在窗口的非客户区时发送此消息
WM_NCMBUTTONUP = 0x00A8;
当用户释放鼠标中键同时光标又在窗口的非客户区时发送此消息
WM_NCMBUTTONDBLCLK = 0x00A9;
当用户双击鼠标中键同时光标又在窗口的非客户区时发送此消息
WM_KEYFIRST = 0x0100;
WM_KEYDOWN = 0x0100;
//按下一个键
WM_KEYUP = 0x0101;
//释放一个键
WM_CHAR = 0x0102;
//按下某键,并已发出WM_KEYDOWN,WM_KEYUP 消息
WM_DEADCHAR = 0x0103;
当用translatemessage 函数翻译WM_KEYUP 消息时发送此消息给拥有焦点的窗口
WM_SYSKEYDOWN = 0x0104;
当用户按住ALT 键同时按下其它键时提交此消息给拥有焦点的窗口;
WM_SYSKEYUP = 0x0105;
当用户释放一个键同时ALT 键还按着时提交此消息给拥有焦点的窗口
WM_SYSCHAR = 0x0106;
当WM_SYSKEYDOWN 消息被TRANSLATEMESSAGE 函数翻译后提交此消息给
拥有焦点的窗口
WM_SYSDEADCHAR = 0x0107;
当WM_SYSKEYDOWN 消息被TRANSLATEMESSAGE 函数翻译后发送此消息给
拥有焦点的窗口
WM_KEYLAST = 0x0108;
WM_INITDIALOG = 0x0110;
在一个对话框程序被显示前发送此消息给它,通常用此消息初始化控件和执行其它
任务
WM_COMMAND = 0x0111;
当用户选择一条菜单命令项或当某个控件发送一条消息给它的父窗口,一个快捷键
被翻译
WM_SYSCOMMAND = 0x0112;
当用户选择窗口菜单的一条命令或当用户选择最大化或最小化时那个窗口会收到此
消息
WM_TIMER = 0x0113; //发生了定时器事件
WM_HSCROLL = 0x0114;
当一个窗口标准水平滚动条产生一个滚动事件时发送此消息给那个窗口,也发送给
拥有它的控件
WM_VSCROLL = 0x0115;
当一个窗口标准垂直滚动条产生一个滚动事件时发送此消息给那个窗口也,发送给
拥有它的控件 WM_INITMENU = 0x0116;
当一个菜单将要被激活时发送此消息,它发生在用户菜单条中的某项或按下某个菜
单键 , 它允许程序在显示前更改菜单
WM_INITMENUPOPUP = 0x0117;
当一个下拉菜单或子菜单将要被激活时发送此消息,它允许程序在它显示前更改菜
单 , 而不要改变全部
WM_MENUSelect = 0x011F;
当用户选择一条菜单项时发送此消息给菜单的所有者(一般是窗口)
WM_MENUCHAR = 0x0120;
当菜单已被激活用户按下了某个键(不同于加速键),发送此消息给菜单的所有
者;
WM_ENTERIDLE = 0x0121;
当一个模态对话框或菜单进入空载状态时发送此消息给它的所有者,一个模态对话
框或菜单进入空载状态就是在处理完一条或几条先前的消息后没有消息它的列队中
等待
WM_MENURBUTTONUP = 0x0122;
WM_MENUDRAG = 0x0123;
WM_MENUGETOBJECT = 0x0124;
WM_UNINITMENUPOPUP = 0x0125;
WM_MENUCOMMAND = 0x0126;
WM_CHANGEUISTATE = 0x0127;
WM_UpdateUISTATE = 0x0128;
WM_QUERYUISTATE = 0x0129;

SendMessage发消息,怎样用PeekMessage接收>HWND hwnd=::FindWindow(0,"wang");
>::PeekMessage(&msg,hwnd,0,0,PM_REMOVE);
如果hwnd是其他线程的窗口 , PeekMessage是不会成功的 。

如果要处理其他进程发过来的消息 , 不用调用PeekMessage,直接对那个消息加入处理即可 。系统会自动获取消息并调用你的处理函数 。

如何将系统消息作为SendMessage来发送?编辑词条SendMessage()
函数功能:该函数将指定的消息发送到一个或多个窗口 。此函数为指定的窗口调用窗口程序 , 直到窗口程序处理完消息再返回 。而函数PostMessage不同,将一个消息寄送到一个线程的消息队列后立即返回 。
函数原型:LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam);
参数:
hWnd:其窗口程序将接收消息的窗口的句柄 。如果此参数为HWND_BROADCAST,则消息将被发送到系统中所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口,但消息不被发送到子窗口 。
Msg:指定被发送的消息 。
wParam:指定附加的消息指定信息 。
IParam:指定附加的消息指定信息 。
返回值:返回值指定消息处理的结果,依赖于所发送的消息 。
备注:需要用HWND_BROADCAST通信的应用程序应当使用函数RegisterWindowMessage来为应用程序间的通信取得一个唯一的消息 。

我想用SendMessage来发送字符串 , 怎么办首先说怎么发送,然后说怎么接收:
自己定义一个消息,加上一个消息响应函数 。然后用SendMessage把字符串的地址发过去 。
比如VC环境:
在stdafx.h中,
#define MY_MESSAGE USER+1

定义一个函数用来发送,可以是定时器,可以是按钮 。
void send()
{
CString str;
str = "12345";
::SendMessage(hWnd,MY_MESSAGE ,(WPARAM)&str);
}
在你的类头文件.h中:
afx_msg void MyFunction(WPARAM wParam,LPARAM lParam);

在.cpp中
BEGIN_MESSAGE_MAP下面加入:
ON_MESSAGE(MY_MESSAGE ,MyFunction)

在后面加上你的函数体
void 你的类名::MyFunction(WPARAM wParam,LPARAM lParam)
{
//如果你发送的字符串的地址在WPARAM中,则用WPARAM来接收
CString* pStr = (CString*)wParam.
AfxMessageBox(*pStr);
}

你要注意的是:这只能适合SendMessage,如果你要使用PostMessage,就要把你发送的字符串设定为类的成员 , 或者全局的,不能是临时变量 。因为SendMessage是要让消息响应函数执行完了才会返回,所以str是不会被系统释放的 。PostMessage是直接返回 , 于是你传了一个str的地址过去 , 但是消息响应函数执行的时候,str已经被删除了 , 这个时候的地址是一个不可知的内容,程序就会发生内存泄露,所以还是推荐你定义一个字符串专门用来发送 。

我想用SendMessage来发送字符串,怎么办发送 :

COPYDATASTRUCT cds;

AnsiString Data=https://www.zaoxu.com/jjsh/bkdq/Edit2->Text;//"Just a test";

cds.dwData=https://www.zaoxu.com/jjsh/bkdq/sizeof(COPYDATASTRUCT);
cds.cbData=https://www.zaoxu.com/jjsh/bkdq/Data.Length();
cds.lpData=https://www.zaoxu.com/jjsh/bkdq/(LPVOID)Data.c_str();

//想目标窗口发消息WM_COPYDATA
SendMessage((HWND)Edit1->Text.ToInt(),WM_COPYDATA,(WPARAM)NULL,(LPARAM)&cds);

接收:

if(Message.Msg==WM_COPYDATA)
{
COPYDATASTRUCT *cds;
char* DataBuf;

cds=(COPYDATASTRUCT*)Message.LParam;
DataBuf=new char[cds->cbData];
CopyMemory(DataBuf,cds->lpData,cds->cbData);

AnsiString Str=AnsiString(DataBuf);
Memo1->Lines->Add("Str="+Str);

delete[] DataBuf;
}

我已经得到窗口上句按键的句柄,怎么用SENDMESSAGE,发送回车,赐教如果是一个按钮的话,那么直接发送一个点击的消息即可:
SendMessage(hWnd, BM_CLICK, 0, 0);
如果一定要发送 Enter 消息,可以这样:
SendMessage(hWnd, WM_KEYDOWN, VK_RETURN, 0);
SendMessage(hWnd, WM_KEYUP, VK_RETURN, 0);
hWnd 代表按钮的句柄 。

sendmessage C# 鼠标点击WM_LBUTTONDOWN和WM_LBUTTONUP是sdk种定义的常量,c/c++专用 , 所以你得自己重定义
从网上粘来的,参考下
public enum WMessages : int
{
WM_LBUTTONDOWN = 0x201, //Left mousebutton down
WM_LBUTTONUP = 0x202,//Left mousebutton up
WM_LBUTTONDBLCLK = 0x203, //Left mousebutton doubleclick
WM_RBUTTONDOWN = 0x204, //Right mousebutton down
WM_RBUTTONUP = 0x205,//Right mousebutton up
WM_RBUTTONDBLCLK = 0x206, //Right mousebutton doubleclick
WM_KEYDOWN = 0x100,//Key down
WM_KEYUP = 0x101,//Key up
}

如何用SENDMESSAGE发送组合键如CTRL+A如果是系统级的击键就再用WM_SYSKEYDOWN或者WM_SYSKEYUP试试看.
另外,我记得WM_KEYDOWN的LPARAM也不应该是0,不过记不大清楚了,查API帮助应该有更详细的信息.

好像偶也试过,SendMessage和PostMessage有点不大尽如人意,但是你可以试一下
VKKeyScan和MapVirtualKey来获得要发送的按键的扫描码和虚拟键值,这两个值
在SendMessage和PostMessage中分别对应wparam和lparam,当然还要经过移位和
KeyUp,KeyDown的Mask,好像可以通过发送四个消息来模拟Ctrl+A.
另外我觉得kbd_event这个API比较合适用来发送模拟按键,唯一的缺点是他只能向
当前最前的活动窗口发送消息.

SendMessage(handle, WM_CHAR, aChar, aKeyData)
aChar = "A"
aKeyData = https://www.zaoxu.com/jjsh/bkdq/32位
1-15位表示发送几遍,
16-23表示ALT、CTRL、NUM、CAPS等(具体何值忘了),
24位表示是左ALT、CTRL还是右ALT、CTRL(通常为0) , 
25-28位保留
30位表示上一个键的状态KEY DOWN OR UP , 1为发送前的DWON状态,0为UP
31位表示:0表示键开始按下,1为开始释放 。
从要求看:aKeyData为: 0000 0000 xxxx xxxx 0000 0000
其中xxxx xxxx放CTRL的扫描码,具体忘了,请自己查一下 。

VC SendMessage发送鼠标按键消息(指定坐标)怎么写当你按下了键盘或鼠标时(左或右键),其实就发生了一个WM_CHAR消息,假设是左键,代码如下:
//窗口过程函数

LRESULT CALLBACK WindowProc(HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
switch(uMsg)
{

case WM_LBUTTONDOWN:
MessageBox(hwnd,"left mouse clicked","提示",0);//输出“左键被按下”
HWND hwnd;//定义窗口句柄
HDC hdc;//定义一个实体句柄
hdc=GetDC(hwnd);//得到实体句柄,因为你程序最终要\//使文本放置到何位置,是和窗口发\
//生关系,所以要得到窗口句bing
TextOut(hdc,0,0,"文本放置位置",strlen("文本放置位置"));//输出文本的起始位置(x和y的\
//坐标,这里假设为 屏幕原点\
//: 0,0)
ReleaseDC(hwnd,hdc);//释放DC,因为DC是系统维护的一个数据结构,要占据内存 , \
//如果不释放,就会造成内存泄露
break;
case 2:
......
break;
case 3:
......
break;
default:
return DefwindowProc(hwnd,uMsg,wPara,lParam);//返回缺省的窗口处理过程
}
return 0;
}

C++怎么发送某个按键的消息SendMessagePlatform SDK的函数原型似乎该是这样
LRESULT SendMessage(
HWND hWnd,// handle to destination window
UINT Msg,// message
WPARAM wParam,// first message parameter
LPARAM lParam// second message parameter
);
而且,发送按键值一般用 WM_CHAR 捕获后在窗口过程函数中处理
个人见解^_^

SendMessage参数个数究竟是三个还是四个很多语言都有 SendMessage 。参数有多有少 。
有些语言有 重名函数,即同样的 函数名字,但 形式参数个数不同,例如 可以 3个 也 可以 4个 。当 实际参数 给 3 个 时,就 调用形参为 3个 的 同名函数,实际参数 给 4 个 时 , 就 调用形参为 4个 的 同名函数 。
参考 百度百科:
http://baike.baidu.com/item/SendMessage/6374103

SendMessage函数是干什么用的?有哪些参数?是向一个指定的窗口发送一条指定的消息
它有4个参数
第一个,是指定的窗口的句柄,这个窗口是广义上的,也就是说包括各种控件,对话框 。它指明你到底要向谁发送消息
第二个 , 是具体的消息 , 你要向这个窗口发送一条什么样的消息,要在这说明,消息是由微软给定义好的以WM_开头 , 比如WM_SETFOCUS设置输入焦点 。有很多,你可以查看MSDN
第三个和第四个参数,这两个和第二个参数有关,它们都是消息的附加参数,具体是什么类型的要看消息是什么 , MSDN中对每个消息的附加参数都写的很明确 。
比如WM_GETTEXT该消息用于获取窗口中的内容 。它的附加参数,一个是字符数组,用于接收这个文本 。一个是接收文本的大?。偃缁袢〉奈谋境飧鲋稻蜕崞?。
还有很多你可以看看MSDN

SendMessage函数是干什么用的 它有哪些参数是向一个指定的窗口发送一条指定的消息
它有4个参数
第一个,是指定的窗口的句柄,这个窗口是广义上的,也就是说包括各种控件,对话框 。它指明你到底要向谁发送消息
第二个,是具体的消息,你要向这个窗口发送一条什么样的消息,要在这说明 , 消息是由微软给定义好的以WM_开头,比如WM_SETFOCUS设置输入焦点 。有很多 , 你可以查看MSDN
第三个和第四个参数 , 这两个和第二个参数有关,它们都是消息的附加参数,具体是什么类型的要看消息是什么,MSDN中对每个消息的附加参数都写的很明确 。
比如WM_GETTEXT该消息用于获取窗口中的内容 。它的附加参数 , 一个是字符数组,用于接收这个文本 。一个是接收文本的大小,假如获取的文本超过这个值就舍弃 。
还有很多你可以看看MSDN

谁能详细讲讲Send()函数各参数的意义函数原型int send( SOCKET s,const char FAR *buf,int len,int flags );不论是客户还是服务器应用程序都用send函数来向TCP连接的另一端发送数据 。客户程序一般用send函数向服务器发送请求,而服务器则通常用send函数来向客户程序发送应答 。该函数的第一个参数指定发送端套接字描述符;第二个参数指明一个存放应用程序要发送数据的缓冲区;第三个参数指明实际要发送的数据的字节数;第四个参数一般置0 。(可在MSDN上查看其具体含义)

SendMessage()函数的 第二、三、四个参数是什么 怎么用LRESULT SendMessage(
HWND hWnd,// handle of destination window
UINT Msg,// message to send
WPARAM wParam,// first message parameter
LPARAM lParam// second message parameter
);
hWnd
Handle to the window whose window procedure will receive the message. If this parameter is HWND_BROADCAST, the message is sent to all top-level windows in the system, including disabled or invisible unowned windows, overlapped windows, and pop-up windows; but the message is not sent to child windows.
Msg
Specifies the message to be sent.
wParam
Specifies additional message-specific information.
lParam
Specifies additional message-specific information.

python用sendmessage函数向其他程序的编辑框(当前激活窗口,并且在活动光标处)内发送这就是个windows SDk的编程问题#coding:utf-8from ctypes import *WM_SETTEXT = 0x000Cdef ChangeActiveWindowTtile(): hwnd=windll.user32.FindWindowW(u"Notepad",u"无标题 - 记事本") if (windll.user32.IsWindow(hwnd)):windll.user32.SendMessageW(hwnd,WM_SETTEXT,None,u"我是标题") ChangeActiveWindowTtile()

为什么用SendMessage函数向窗口发送WM消息处理机制是Windows特有的机制,向窗口发送消息,最简单就是这个API了,还有一个是postmessage 。
SendMessage:是等待接受窗口处理完成然后返回结果;
postmessage:是不等接受窗口处理;

VB中sendmessage具体用法SendMessage
说明
调用一个窗口的窗口函数 , 将一条消息发给那个窗口 。除非消息处理完毕,否则该函数不会返回 。SendMessageBynum,SendMessageByString是该函数的“类型安全”声明形式
用法:
SendMessage 窗口句柄,消息标识符(也就是SendMessage需要做什么),消息标识符的反回值 , 消息标识符的反回值
返回值
Long,由具体的消息决定
参数表
参数 类型及说明
hwnd Long,要接收消息的那个窗口的句柄
wMsg Long , 消息的标识符--取决定作用
wParam Long,具体取决于消息
lParam Any , 具体取决于消息
SendMessage 用法大全
消息标识符 用途 wParam Long lParam Long 返回值
BM_CLICK=&HF5 向目标窗口发送Click指令 0 0 非零表示成功
EM_GETLINECOUNT = &HBA 获取目标窗口文本总行数 0 0 返回行数
EM_GETLINE= &HC4 将目标窗口的第wParam行的内容显示在lParam中 常数,第几行,第一行为0 String字符串数组





例1多行TextBox中的快速处理功能在处理多行TextBox时我们经常会碰到以下几种情况:
希望了解多行TextBox中目前共有多少行文字 。
想快速返回第N行的文字 。

用SendMessage函数完成上面两个任务的方法非常简单,每个任务只需简单地发送一条消息给多行TextBox即可,两个消息分别为:EM_GETLINECOUNT、EM_GETLINE,其它参数和返回值见附表 。
下面用一个简单的实例演示这两个功能:
新建工程,在Form1上添加三个TextBox(名称分别为Text1-3,将Text1的MultiLine属性置为True)和一个命令按钮

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 EM_GETLINECOUNT = &HBA
Const EM_GETLINE = &HC4
Private Sub Command1_Click()
Dim str(256) As Byte
str(1) = 1 '最大允许存放256个字符
'获取总行数,结果显示在文本框text2中
Text2 = SendMessage(Text1.hwnd, EM_GETLINECOUNT, 0, 0)
'获取第3行的数据放在str中 , 转换为字符串后显示在文本框text3中
SendMessage Text1.hwnd, EM_GETLINE, 2, str(0)
Text3 = StrConv(str, vbUnicode)
End Sub

两点补充说明:在调用SendMessage获取第N行字符串时,lParam需要说明为字节数组,在调用完成后,再将字节数组转换为字符串;另外,调用前必须在lParam的前两个字节指明允许存放的最大长度,其中第一个字节为低位,第二个字节为高位,本例将高位(即str(1))置1.说明最大允许存放256个字符 。
~~~~~~~`
我自己的笔记,你自己慢慢看吧 。。

c# 中如何通过sendMessage或postMessage给桌面最顶层的窗体发送一个回车?using System.Runtime.InteropServices; [DllImport("user32.dll")] private static extern IntPtr GetForegroundWindow();[DllImport("user32.dll ")]static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);private void button1_Click(object sender, EventArgs e){ IntPtr hwnd = GetForegroundWindow();//取前台窗体句柄 SendMessage(hwnd, 256, 0xD, 0);//按下回车键 //SendMessage(hwnd, 257, 0xD, 0);//弹起回车键}

C++如何通过SENDMESSAGE发送全选命令,最终结果是想复制一个编辑框中的内容全?。粗频郊籼搴芗虻?。

但你说的“将复制的内容贴到一个文本文件中”是什么意思?
这文本文件是另一程序正在编辑的?
还是在同一程序的另一个编辑框里正编辑着?
还是根本没有打开的磁盘文件 。

SendMessage()函数的 第二、三、四个参数是什么 怎么用第二个参数是发送给窗体的消息,比如WM_CLOSE,WM_DESTROY之类的
第三个参数和第四个参数对于不同的消息意义也不一样 , 比如在WM_LBUTTONDOWN消息里wParam表示鼠标左键按下时的组合键信息,lParam则包含了鼠标点击的坐标,而在WM_CLOSE里这两个参数都没有被用到 。对于不同的消息wParam和lParam表示的意义具体要查看msdn 。

SendMessage(GetDlgItem(hwnd,IDC_LSTINFO),LB_ADDSTRING,0,LPARAM("名称\t类型\t\t总大小\t可用空间"));
LB_ADDSTRING是个listbox消息 , 作用是给listbox窗口(SendMessage的第一个参数)添加一个新项 , 在这个消息里wParam没有用,所以给它了一个0值 , lParam里则包含了要被添加的字符串 , 
LPARAM("名称\t类型\t\t总大小\t可用空间")这个是c++的类型强转,把这个字符串从char*转成LPARAM类型才能编译通过,因为SendMessage里它的参数类型就是LPARAM

参考: http://msdn.microsoft.com/en-us/library/bb775181%28VS.85%29.aspx

请问:C++中SendMessage函数怎么用?(我已经知道那几个参数 , 最好有一个实例?。┬恍唬?/h3>百科 http://baike.baidu.com/view/1080187.htm SendMessage,带有各种语言的例子 。

SendMessage
函数功能
该函数将指定的消息发送到一个或多个窗口 。此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回 。而和函数PostMessage不同,PostMessage是将一个消息寄送到一个线程的消息队列后就立即返回 。
函数原型
LRESULT SendMessage(HWND hWnd,UINT Msg , WPARAM wParam,LPARAM IParam);
参数:
hWnd:其窗口程序将接收消息的窗口的句柄 。如果此参数为HWND_BROADCAST , 则消息将被发送到系统中所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口,但消息不被发送到子窗口 。
Msg:指定被发送的消息 。
wParam:指定附加的消息特定信息 。
lParam:指定附加的消息特定信息 。

VC++ 中CWnd::SendMessage( )函数的作用是什么?SendMessage(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam);
这个函数的第一个参数是你要发送到的窗口的句柄,第二个参数是消息的号码,如果是系统自定义消息的话可以直接用,如果是你自定义消息的话需要自己指定一个值,可以在头文件里用宏进行定义,如:
#define WM_MY_MESSAGE (WM_USER+1)
WM_USER 是系统预留给用户的自定义消息的最小值,所有大于这个值的消息都是自定义消息.你也可以用常量代替:
const UINT WM_MY_MESSAGE = WM_USER+1
后面的两个参数就是windows消息的两个32位参数.

SendMessage函数 , 参数问题WM_LBUTTONDOWN 消息的第二个参数是一个 DWORD 值,它的低位代表鼠标点击的 x 坐标而高位代表鼠标点击的 y 坐标 。由于 Windows 系统是 32 位系统,而 DWORD 事实上也是对 int 类型的重新定义 , 它占用的内存大小是 4 字节 。(BYTE 字节,WORD 即字 = 2 个 BYTE,DWORD 即双字 = 2 个 WORD) 。一个 32 位数字,其中前 16 部分所代表的数值就称为高位,而后 16 位部分称为低位 。比如一个 x、y 坐标(1, 1)用上述参数的二进制或十六进制表示法就是:00000000000000010000000000000001 或 0x00010001同理 , 坐标(21, 192)表示为:00000000000101010000000011000000 或 0x001500C0其中 10101/11000000 就是 21/192 的二进制表示法,15/C0 则是其十六进制表示法 。可以看出,其实高位字节其实就是把 y 坐标所代表的二进制值向左移动了 16 位 , 即 y << 16 , "<<" 是 C/C++ 中的位移运算符 。微软使用该 DWORD 值用来表示一个点在屏幕上的位置 。事实上该 DWORD 值也可以表示一个 POINTS 结构体,它是由两个 short 数值组成 。这样理解起来更加明了 。Windows 提供了一个宏 MAKELPARAM , 故语句也可以写成:SendMessage(hwnd, WM_LBUTTONDOWN, 0, MAKELPARAM(x, y));该宏定义如下:#define MAKELPARAM(l, h) ((LPARAM) MAKELONG(l, h))#define MAKELONG(a, b) ((LONG) (((WORD) (a)) | ((DWORD) ((WORD) (b))) << 16))宏 MAKELPARAM:http://msdn.microsoft.com/en-us/library/ms632661.aspxPOINTS结构体:http://msdn.microsoft.com/en-us/library/dd162808.aspx关于 WM_LBUTTONDOWN 消息及其参数的说明,可以查看 MSDN 。http://msdn.microsoft.com/en-us/library/ms645607.aspx

vc中怎么使用SendMessage自定义消息函数SendMessage的基本结构如下:SendMessage(HWNDhWnd,//消息传递的目标窗口或线程的句柄 。UINTMsg,//消息类别(这里可以是一些系统消息,也可以是自己定义 , 下文具体介绍,)WPARAMwParam, //参数1 (WPARAM 其实是与UINT是同种类型的,//在vc编译器中右键有个“转到WPARAM的定义”的选项可以查看 。LPARAMlParam); //参数2其中一些参数的由来如下://typedef unsigned int UINT;//typedef UINT WPARAM;//typedef LONG LPARAM;//typedef LONG LRESULT;例如可以用以下语句:::SendMessage(this-m_hWnd, WM_MY_DOSOME, (WPARAM) 0, (LPARAM)0);这里我发送的消息是本窗体接收的,所以句柄用:this-m_hWnd这里的消息类别WM_MY_DOSOME就是我自定义的 , 在接收消息的窗体或线程所在的头文件里:#define WM_MY_DOSOMEWM_USER+1//do something当然你还可以定义更多如:

请教SendMessageEMusing System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

const int WM_SETTEXT = 0x000C;

[DllImport("User32.dll", EntryPoint = "SendMessage")]
private static extern int SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, string lParam);

private void button1_Click(object sender, EventArgs e)
{
SendMessage(this.textBox1.Handle,WM_SETTEXT,(IntPtr)0,"A");
}
}
}

如何用SendMessage 更新ListCtrlActiveX控件用于Web的过程是将控件嵌入主页中,用户通过浏览器访问该主页时,将主页中的控件下载,并在用户机器上注册,以后就可在用户的浏览器上运行 。
控件下载一次后就驻留在用户本地机器上,下次再访问相同的主页时 , 可不再下载该控件,而是直接运行用户本地的控件 。这里控件容器就是浏览器,用户不需要通过浏览器调用控件的属性或方法 。
因此,开发面向Web的ActiveX控件比开发桌面的控件还要简单些,所复杂的是如何将该控件很好地嵌入主页,使用户能正常浏览 。

求sendmessage的所有消息常数