Windows是一个消息驱动模式的系统,SendMessage 是应用程序和应用程序之间进行消息传递的主要手段之一。由于 SendMessage 函数的参数选项过于繁多,因此很有必要作一个汇总,分门别类地来向大家介绍。

方法/步骤

 
  1. 1

    函数声明

    LRESULT SendMessage(  __in  HWND hWnd,  

                          __in  UINT Msg,  

                          __in  WPARAM wParam,  

                          __in  LPARAM lParam );

    hWnd 参数:窗口句柄。窗口可以是任何类型的屏幕对象。

    Msg 参数:用于区别其他消息的常量值。

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

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

  2. 下面,向大家分类介绍 Msg 参数 常量值。

 

 

窗口消息

 

 

  • WM_CREATE           创建一个窗口

 

  • WM_DESTROY          当一个窗口被破坏时发送

 

  • WM_MOVE             移动一个窗口

 

  • WM_SIZE             改变一个窗口的大小

 

  • WM_ACTIVATE         一个窗口被激活或失去激活状态

 

  • WM_SETFOCUS         一个窗口获得焦点

 

  • WM_KILLFOCUS        一个窗口失去焦点

 

  • WM_ENABLE           一个窗口改变成Enable状态

 

  • WM_SETREDRAW        设置窗口是否能重画

 

  • WM_SETTEXT          应用程序发送此消息来设置一个窗口的文本

 

  • WM_GETTEXT          应用程序发送此消息来复制对应窗口的文本到缓冲区

 

  • WM_GETTEXTLENGTH    得到与一个窗口有关的文本的长度(不包含空字符)

 

  • WM_PAINT            要求一个窗口重画自己

 

  • WM_CLOSE            当一个窗口或应用程序要关闭时发送一个信号

 

  • WM_QUERYENDSESSION  当用户选择结束对话框或程序自己调用ExitWindows函数

 

  • WM_QUIT             用来结束程序运行

 

  • WM_QUERYOPEN        当用户窗口恢复以前的大小位置时,把此消息发送给某个图标

 

  • WM_ERASEBKGND       当窗口背景必须被擦除时(例在窗口改变大小时)

 

  • WM_SYSCOLORCHANGE   当系统颜色改变时,发送此消息给所有顶级窗口

 

  • WM_ENDSESSION       当系统进程发出WM_QUERYENDSESSION消息后,此消息发送给应用程序,通知它对话是否结束

 

  • WM_SHOWWINDOW       当隐藏或显示窗口是发送此消息给这个窗口

 

  • WM_ACTIVATEAPP      发此消息给应用程序哪个窗口是激活的,哪个是非激活的

 

  • WM_FONTCHANGE       当系统的字体资源库变化时发送此消息给所有顶级窗口

 

  • WM_TIMECHANGE       当系统的时间变化时发送此消息给所有顶级窗口

 

  • WM_CANCELMODE       发送此消息来取消某种正在进行的摸态(操作)

 

  • WM_SETCURSOR        如果鼠标引起光标在某个窗口中移动且鼠标输入没有被捕获时,就发消息给某个窗口

 

  • WM_MOUSEACTIVATE    当光标在某个非激活的窗口中而用户正按着鼠标的某个键发送此消息给当前窗口

 

  • WM_CHILDACTIVATE    发送此消息给MDI子窗口当用户点击此窗口的标题栏,或当窗口被激活,移动,改变大小

 

  • WM_QUEUESYNC        此消息由基于计算机的训练程序发送,通过 WH_JOURNALPALYBACK 的 hook 程序分离出用户输入消息

 

  • WM_GETMINMAXINFO    此消息发送给窗口当它将要改变大小或位置

 

  • WM_PAINTICON        发送给最小化窗口当它图标将要被重画

 

  • WM_ICONERASEBKGND   此消息发送给某个最小化窗口,仅当它在画图标前它的背景必须被重画

 

  • WM_NEXTDLGCTL       发送此消息给一个对话框程序去更改焦点位置

 

  • WM_SPOOLERSTATUS    每当打印管理列队增加或减少一条作业时发出此消息

 

  • WM_DRAWITEM         当button,combobox,listbox,menu的可视外观改变时发送

 

  • WM_MEASUREITEM      当button, combo box, list box, list view control, or menu item 被创建时

 

  • WM_VKEYTOITEM       此消息有一个LBS_WANTKEYBOARDINPUT风格的发出给它的所有者来响应WM_KEYDOWN消息

 

  • WM_CHARTOITEM       此消息由一个LBS_WANTKEYBOARDINPUT风格的列表框发送给他的所有者来响应WM_CHAR消息

 

  • WM_SETFONT          当绘制文本时程序发送此消息得到控件要用的颜色

 

  • WM_GETFONT          应用程序发送此消息得到当前控件绘制文本的字体

 

  • WM_SETHOTKEY        应用程序发送此消息让一个窗口与一个热键相关连

 

  • WM_GETHOTKEY        应用程序发送此消息来判断热键与某个窗口是否有关联

 

  • WM_QUERYDRAGICON    此消息发送给最小化窗口,当此窗口将要被拖放而它的类中没有定义图标,应用程序能返回一个图标或光标的句柄,当用户拖放图标时系统显示这个图标或光标

 

  • WM_COMPAREITEM      发送此消息来判定 combobox 或 listbox 新增加的项的相对位置

 

  • WM_COMPACTING       显示内存已经很少了

 

  • WM_WINDOWPOSCHANGING   发送此消息给那个窗口的大小和位置将要被改变时,来调用 setwindowpos 函数或其它窗口管理函数

 

  • WM_WINDOWPOSCHANGED 发送此消息给那个窗口的大小和位置已经被改变时,来调用setwindowpos函数或其它窗口管理函数

 

  • WM_POWER            当系统将要进入暂停状态时发送此消息

 

  • WM_COPYDATA         当一个应用程序传递数据给另一个应用程序时发送此消息

 

  • WM_CANCELJOURNA     当某个用户取消程序日志激活状态,提交此消息给程序

 

  • WM_NOTIFY           当某个控件的某个事件已经发生或这个控件需要得到一些信息时,发送此消息给它的父窗口

 

  • WM_INPUTLANGCHANGEREQUEST  当用户选择某种输入语言,或输入语言的热键改变

 

  • WM_INPUTLANGCHANGE  当平台现场已经被改变后发送此消息给受影响的最顶级窗口

 

  • WM_TCARD            当程序已经初始化 windows 帮助例程时发送此消息给应用程序

 

  • WM_HELP             此消息显示用户按下了F1,如果某个菜单是激活的,就发送此消息个此窗口关联的菜单,否则就发送给有焦点的窗口,如果当前都没有焦点,就把此消息发送给当前激活的窗口

 

  • WM_USERCHANGED      当用户已经登入或退出后发送此消息给所有的窗口,当用户登入或退出时系统更新用户的具体设置信息,在用户更新设置时系统马上发送此消息

 

  • WM_NOTIFYFORMAT     公用控件,自定义控件和他们的父窗口通过此消息来判断控件是使用ANSI还是UNICODE结构

 

  • WM_CONTEXTMENU      当用户某个窗口中点击了一下右键就发送此消息给这个窗口

 

  • WM_STYLECHANGING    当调用SETWINDOWLONG函数将要改变一个或多个 窗口的风格时发送此消息给那个窗口

 

  • WM_STYLECHANGED     当调用 SETWINDOWLONG 函数一个或多个 窗口的风格后发送此消息给那个窗口

 

  • WM_DISPLAYCHANGE    当显示器的分辨率改变后发送此消息给所有的窗口

 

  • WM_GETICON          此消息发送给某个窗口来返回与某个窗口有关连的大图标或小图标的句柄

 

  • WM_SETICON          程序发送此消息让一个新的大图标或小图标与某个窗口关联

 

  • WM_NCCREATE         当某个窗口第一次被创建时,此消息在WM_CREATE消息发送前发送

 

  • WM_NCDESTROY        此消息通知某个窗口,非客户区正在销毁

 

  • WM_NCCALCSIZE       当某个窗口的客户区域必须被核算时发送此消息

 

  • WM_NCHITTEST        移动鼠标,按住或释放鼠标时发生

 

  • WM_NCPAINT          程序发送此消息给某个窗口当它(窗口)的框架必须被绘制时

 

  • WM_NCACTIVATE       此消息发送给某个窗口仅当它的非客户区需要被改变来显示是激活还是非激活状态

 

  • WM_GETDLGCODE       发送此消息给某个与对话框程序关联的控件。正常情况下,windows 处理所有输入到此控件的箭头键和 TAB 键。通常响应 WM_GETDLGCODE 消息,应用程序可以控制一个特定类型的输入和处理这个输入
  •                     

 

  • WM_NCMOUSEMOVE      当光标在一个窗口的非客户区内移动时发送此消息给这个窗口。非客户区为:窗体的标题栏及窗体的边框

 

  • WM_NCLBUTTONDOWN    当光标在一个窗口的非客户区同时按下鼠标左键时提交此消息

 

  • WM_NCLBUTTONUP      当用户释放鼠标左键同时光标某个窗口在非客户区十发送此消息

 

  • WM_NCLBUTTONDBLCLK  当用户双击鼠标左键同时光标某个窗口在非客户区十发送此消息

 

  • WM_NCRBUTTONDOWN    当用户按下鼠标右键同时光标又在窗口的非客户区时发送此消息

 

  • WM_NCRBUTTONUP      当用户释放鼠标右键同时光标又在窗口的非客户区时发送此消息

 

  • WM_NCRBUTTONDBLCLK  当用户双击鼠标右键同时光标某个窗口在非客户区十发送此消息

 

  • WM_NCMBUTTONDOWN    当用户按下鼠标中键同时光标又在窗口的非客户区时发送此消息

 

  • WM_NCMBUTTONUP      当用户释放鼠标中键同时光标又在窗口的非客户区时发送此消息

 

  • WM_NCMBUTTONDBLCLK  当用户双击鼠标中键同时光标又在窗口的非客户区时发送此消息

 

  • WM_KEYFIRST         WM_KEYDOWN 按下一个键

 

  • WM_KEYUP            释放一个键

 

  • WM_CHAR             按下某键,并已发出WM_KEYDOWN, WM_KEYUP消息

 

  • WM_DEADCHAR         当用 translatemessage 函数翻译 WM_KEYUP 消息时发送此消息给拥有焦点的窗口

 

  • WM_SYSKEYDOWN       当用户按住 ALT 键同时按下其它键时提交此消息给拥有焦点的窗口

 

  • WM_SYSKEYUP         当用户释放一个键同时 ALT 键还按着时提交此消息给拥有焦点的窗口

 

  • WM_SYSCHAR          当WM_SYSKEYDOWN消息被TRANSLATEMESSAGE函数翻译后提交此消息给拥有焦点的窗口

 

  • WM_SYSDEADCHAR      当WM_SYSKEYDOWN消息被TRANSLATEMESSAGE函数翻译后发送此消息给拥有焦点的窗口

 

  • WM_INITDIALOG       在一个对话框程序被显示前发送此消息给它,通常用此消息初始化控件和执行其它任务

 

  • WM_COMMAND          当用户选择一条菜单命令项或当某个控件发送一条消息给它的父窗口,一个快捷键被翻译

 

  • WM_SYSCOMMAND       当用户选择窗口菜单的一条命令或当用户选择最大化或最小化时那个窗口会收到此消息

 

  • WM_TIMER            发生了定时器事件

 

  • WM_HSCROLL          当一个窗口标准水平滚动条产生一个滚动事件时发送此消息给那个窗口,也发送给拥有它的控件

 

  • WM_VSCROLL          当一个窗口标准垂直滚动条产生一个滚动事件时发送此消息给那个窗口,也发送给拥有它的控件

 

  • WM_INITMENU         当一个菜单将要被激活时发送此消息,它发生在用户菜单条中的某项或按下某个菜单键,它允许程序在显示前更改菜单

 

  • WM_INITMENUPOPUP    当一个下拉菜单或子菜单将要被激活时发送此消息,它允许程序在它显示前更改菜单,而不要改变全部

 

  • WM_MENUSELECT       当用户选择一条菜单项时发送此消息给菜单的所有者(一般是窗口)

 

  • WM_MENUCHAR         当菜单已被激活用户按下了某个键(不同于加速键),发送此消息给菜单的所有者

 

  • WM_ENTERIDLE        当一个模态对话框或菜单进入空载状态时发送此消息给它的所有者,一个模态对话框或菜单进入空载状态就是在处理完一条或几条先前的消息后没有消息它的列队中等待

 

  • WM_CTLCOLORMSGBOX   在 windows 绘制消息框前发送此消息给消息框的所有者窗口,通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置消息框的文本和背景颜色

 

  • WM_CTLCOLOREDIT     当一个编辑型控件将要被绘制时发送此消息给它的父窗口 通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置编辑框的文本和背景颜色

 

  • WM_CTLCOLORLISTBOX  当一个列表框控件将要被绘制前发送此消息给它的父窗口 通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置列表框的文本和背景颜色

 

  • WM_CTLCOLORBTN      当一个按钮控件将要被绘制时发送此消息给它的父窗口 通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置按纽的文本和背景颜色

 

  • WM_CTLCOLORDLG      当一个对话框控件将要被绘制前发送此消息给它的父窗口 通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置对话框的文本背景颜色

 

  • WM_CTLCOLORSCROLLBAR  当一个滚动条控件将要被绘制时发送此消息给它的父窗口 通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置滚动条的背景颜色

 

  • WM_CTLCOLORSTATIC   当一个静态控件将要被绘制时发送此消息给它的父窗口 通过响应这条消息,所有者窗口可以 通过使用给定的相关显示设备的句柄来设置静态控件的文本和背景颜色

 

  • WM_MOUSEFIRST       移动鼠标时发生

 

  • WM_MOUSEMOVE        移动鼠标时发生,同WM_MOUSEFIRST

 

  • WM_LBUTTONDOWN      按下鼠标左键

 

  • WM_LBUTTONUP        释放鼠标左键

 

  • WM_LBUTTONDBLCLK    双击鼠标左键

 

  • WM_RBUTTONDOWN      按下鼠标右键

 

  • WM_RBUTTONUP        释放鼠标右键

 

  • WM_RBUTTONDBLCLK    双击鼠标右键

 

  • WM_MBUTTONDOWN      按下鼠标中键

 

  • WM_MBUTTONUP        释放鼠标中键

 

  • WM_MBUTTONDBLCLK    双击鼠标中键

 

  • WM_MOUSEWHEEL       当鼠标轮子转动时发送此消息个当前有焦点的控件

 

  1. 按钮

    BM_CLICK    按钮被点击消息 

    BM_GETCHECK 可用于复选框/单选框。查看是否被选择了 

    BM_GETSTATE 发送此消息,可返回 button 的状态,如是否被选择;是否可用(不可用就变灰了) 

    BM_SETCHECK 如果已经选择了,发送此消息后,变为未选择,就是那个钩没被勾上

    BM_SETSTATE 设置 button 被点击状态。

  2. 组合框

    CB_ADDSTRING       添加字符串到组合框。 

    CB_DELETESTRING    删除组合框中的条目,即 item 。

    CB_GETCOUNT        得到组合框条目 item 的数目。 

    CB_GETCURSEL       返回组合框中被选条目在组合框中的位置,第一条为 0。

                       如果没有条目或出错,则返回 -1 。

    CB_GETDROPPEDSTATE 发送此消息,可判断组合框的下拉列表是否下拉。

                       如果是,返回非零值,不是,则返回 0 。

    CB_GETLBTEXT       得到组合框的条目文本。返回值是这个文本的长度。 

    CB_GETLBTEXTLEN    返回值是条目的文本的长度。 

    CB_INSERTSTRING    插入字符串条目到组合框中。 

    CB_RESETCONTENT    清空组合框所有条目。 

    CB_SETCURSEL       设置组合框被选条目。 

    CB_SHOWDROPDOWN    让组合框的下拉列表下拉,即显出所有条目。

  3. 编辑框 

    EM_CANUNDO             决定上一次操作是否可以 undo(撤消操作)。如果可以,则可发送 EM_UNDO 消息 

    EM_GETFIRSTVISIBLELINE 在多行控件中,找到最上层的可见的行号。此行号是相对于所有行的。 

    EM_GETPASSWORDCHAR     返回密码框的字符集,即查看密码。 

    EM_GETSEL              返回在可编辑控件中,被选择(高亮选择)的字符集的起点和终点的位置,用 SendMessage 的 wParam 参数返回起点位置,lParam 返回终点位置 

    EM_REPLACESEL          用不同的字符串替换可编辑控件中的字符串。如果可编辑控件中没有字符串,则此消息变为添加字符串。如果 wParam 为 TRUE,则本次操作允许撤消,FALSE 禁止撤消。 

    EM_SETPASSWORDCHAR     在可编辑控件中设置密码字符集,即用 * 代替 

    EM_UNDO                发送操作撤消消息。 

    EM_GETLINE             获取编辑控件中输入的文字。

    EM_LINEFROMCHAR        检索指定字符索引(索引编号从编辑框的第一个字符开始)所在的行索引

    EM_LINEINDEX           在多行编辑控件中,检索某行首字符在编辑控件中的索引

    EM_ERRSPACE            编辑控件不能分配足够的内存来满足特定的要求。

                           编辑控件的父窗口通过 WM_COMMAND 消息收到此消息。

    EM_LIMITTEXT           设置编辑框用户可输入的最大字符数。wParam 为字符数,lParam 不使用(0L)

  4. IP 地址控件

    IPM_CLEARADDRESS       清除 IP 地址控件(IP Address control)的内容 

    IPM_GETADDRESS         从 IP 地址控件获得存储在它中的 IP 地址信息

    IPM_ISBLANK            决定 IP 地址控件是否可以为空值。即 127.0.0.1 之类的地址为空 

    IPM_SETADDRESS         在 IP 地址控件中设置 IP 地址 

    IPM_SETFOCUS           在 IP 地址控件中,当需要输入 IP 地址时, 使之获得键盘输入焦点 

    IPM_SETRANGE           设置输入 IP 地址的有效范围 

  5. MCI(Media Control Interface)

    MM_MCINOTIFY           该 MM_MCINOTIFY 消息通知应用程序,一个 MCI 设备已完成操作。只有设置了 MCI_NOTIFY 标志时,MCI 设备才发送此消息。 

  6. 菜单

    WM_COMMAND     当用户选择菜单中的项目后,将向窗体发送此消息. 窗体收到此消息后,再决定下一个行为。

    WM_INITMENU    当菜单准备显示前,向窗体发送此消息, 窗体将初始化菜单项。 

    WM_SYSCOMMAND  向窗体发送用户点击系统菜单消息. 窗体将响应这个消息 ,决定下个行为。

  7. 列表框

    LB_ADDSTRING        在条目中添加字符串 

    LB_DELETESTRING     删除一个条目. 条目序号是从 0 开始的. 

    LB_GETCOUNT         得到条目总数. 

    LB_GETCURSEL        得到单选的列表框选项条目的序号 

    LB_GETSEL           判断列表框的条目是否被选上, 如果选上了,则返回 >0 的值。否则返回 0 ,表示用户没选择条目 

    LB_GETSELCOUNT      获得可多选的列表框中被选择的条目数 

    LB_GETSELITEMS      返回可多选的列表框中被选条目的序号,可返回数组

    LB_GETTEXT          得到列表框中的一个条目的文本 

    LB_GETTEXTLEN       得到列表框中的一个条目的文本的长度 

    LB_INSERTSTRING     在列表框中插入一个条目。如果成功,将返回插入后此条目的序号。 

    LB_SETCURSEL        对单选的列表框,设定用户选择条目的具体值 

    LB_SETSEL           对多选的列表框,设定用户选择条目的具体值 

    LB_RESETCONTENT     从列表框删除所有项目,wParam 和 lParam 参数均不使用(为 0)

    LB_SETHORIZONTALEXTENT 设定列表框水平滚动范围。如果列表框宽度小于此值,则水平滚动条显现;如果列表框宽度大于等于此值,则水平滚动条是隐藏的。wParam 为所设的水平滚动范围(像素),lParam 不使用,为 0。没有返回值

    注意:LB_SETHORIZONTALEXTENT 消息要起作用,列表框必须定义 WS_HSCROLL 样式

    LB_SETTABSTOPS      在列表框中设置制表位位置(即每列间距)为了应对 LB_SETTABSTOPS 消息,列表框必须已经拥有 LBS_USETABSTOPS 样式。 wParam 指定制表位数量,lParam 为制表位整数数组(各列之间间隔,不必相等)如果 wParam 是 0,lParam 为 NULL,默认制表位是 2 个对话框模板单位。如果 wParam 是 1,制表位为 lParam 指定的距离。如果超过 1,制表位将被设置为 lParam 中的每个值(wParam 指定数量)

  8. 鼠标 

    WM_LBUTTONDBLCLK  当鼠标在一个窗体范围内时,告诉此窗体鼠标左键已双击,返回值 0 

    WM_LBUTTONDOWN    当鼠标在一个窗体范围内时,告诉此窗体鼠标左键已点击,返回值 0 

    WM_LBUTTONUP      当鼠标在一个窗体范围内时,告诉此窗体鼠标左键已释放,返回值 0  

    WM_MBUTTONDBLCLK  当鼠标在一个窗体范围内时,告诉此窗体鼠标中键已双击,返回值 0 

    WM_MBUTTONDOWN    当鼠标在一个窗体范围内时,告诉此窗体鼠标中键已点击,返回值 0 

    WM_MBUTTONUP      当鼠标在一个窗体范围内时,告诉此窗体鼠标中键已释放,返回值 0