windows消息的消息常量

2024-05-14

1. windows消息的消息常量

以下是WINDOWS特有的消息常量标识符:WM_NULL = $0000;WM_CREATE = $0001;应用程序创建一个窗口WM_DESTROY = $0002;一个窗口被销毁WM_MOVE = $0003;移动一个窗口WM_SIZE = $0005;改变一个窗口的大小WM_ACTIVATE = $0006;一个窗口被激活或失去激活状态;WM_SETFOCUS = $0007;获得焦点后WM_KILLFOCUS = $0008;失去焦点WM_ENABLE = $000A;改变enable状态WM_SETREDRAW = $000B;设置窗口是否能重画WM_SETTEXT = $000C;应用程序发送此消息来设置一个窗口的文本WM_GETTEXT = $000D;应用程序发送此消息来复制对应窗口的文本到缓冲区WM_GETTEXTLENGTH = $000E;得到与一个窗口有关的文本的长度(不包含空字符)WM_PAINT = $000F;要求一个窗口重画自己WM_CLOSE = $0010;当一个窗口或应用程序要关闭时发送一个信号WM_QUERYENDSESSION = $0011;当用户选择结束对话框或程序自己调用ExitWindows函数WM_QUIT = $0012;用来结束程序运行或当程序调用postquitmessage函数WM_QUERYOPEN = $0013;当用户窗口恢复以前的大小位置时,把此消息发送给某个图标WM_ERASEBKGND = $0014;当窗口背景必须被擦除时(例在窗口改变大小时)WM_SYSCOLORCHANGE = $0015;当系统颜色改变时,发送此消息给所有顶级窗口WM_ENDSESSION = $0016;当系统进程发出WM_QUERYENDSESSION消息后,此消息发送给应用程序,通知它对话是否结束WM_SYSTEMERROR = $0017;WM_SHOWWINDOW = $0018;当隐藏或显示窗口是发送此消息给这个窗口WM_ACTIVATEAPP = $001C;发此消息给应用程序哪个窗口是激活的,哪个是非激活的;WM_FONTCHANGE = $001D;当系统的字体资源库变化时发送此消息给所有顶级窗口WM_TIMECHANGE = $001E;当系统的时间变化时发送此消息给所有顶级窗口WM_CANCELMODE = $001F;发送此消息来取消某种正在进行的摸态(操作)WM_SETCURSOR = $0020;如果鼠标引起光标在某个窗口中移动且鼠标输入没有被捕获时,就发消息给某个窗口WM_MOUSEACTIVATE = $0021;当光标在某个非激活的窗口中而用户正按着鼠标的某个键发送此消息给当前窗口WM_CHILDACTIVATE = $0022;发送此消息给MDI子窗口当用户点击此窗口的标题栏,或当窗口被激活,移动,改变大小WM_QUEUESYNC = $0023;此消息由基于计算机的训练程序发送,通过WH_JOURNALPALYBACK的hook程序分离出用户输入消息WM_GETMINMAXINFO = $0024;此消息发送给窗口当它将要改变大小或位置;WM_PAINTICON = $0026;发送给最小化窗口当它图标将要被重画WM_ICONERASEBKGND = $0027;此消息发送给某个最小化窗口,仅当它在画图标前它的背景必须被重画WM_NEXTDLGCTL = $0028;发送此消息给一个对话框程序去更改焦点位置WM_SPOOLERSTATUS = $002A;每当打印管理列队增加或减少一条作业时发出此消息WM_DRAWITEM = $002B;当button,combobox,listbox,menu的可视外观改变时发送此消息给这些空件的所有者WM_MEASUREITEM = $002C;当button, combo box, list box, list view control, or menu item 被创建时发送此消息给控件的所有者WM_DELETEITEM = $002D;当the list box 或 combo box 被销毁 或 当 某些项被删除通过LB_DELETESTRING, LB_RESETCONTENT, CB_DELETESTRING, or CB_RESETCONTENT 消息WM_VKEYTOITEM = $002E;此消息有一个LBS_WANTKEYBOARDINPUT风格的发出给它的所有者来响应WM_KEYDOWN消息WM_CHARTOITEM = $002F;此消息由一个LBS_WANTKEYBOARDINPUT风格的列表框发送给他的所有者来响应WM_CHAR消息WM_SETFONT = $0030;当绘制文本时程序发送此消息得到控件要用的颜色WM_GETFONT = $0031;应用程序发送此消息得到当前控件绘制文本的字体WM_SETHOTKEY = $0032;应用程序发送此消息让一个窗口与一个热键相关连WM_GETHOTKEY = $0033;应用程序发送此消息来判断热键与某个窗口是否有关联WM_QUERYDRAGICON = $0037;此消息发送给最小化窗口,当此窗口将要被拖放而它的类中没有定义图标,应用程序能返回一个图标或光标的句柄,当用户拖放图标时系统显示这个图标或光标WM_COMPAREITEM = $0039;发送此消息来判定combobox或listbox新增加的项的相对位置WM_GETOBJECT = $003D;WM_COMPACTING = $0041;显示内存已经很少了WM_WINDOWPOSCHANGING = $0046;发送此消息给那个窗口的大小和位置将要被改变时,来调用setwindowpos函数或其它窗口管理函数WM_WINDOWPOSCHANGED = $0047;发送此消息给那个窗口的大小和位置已经被改变时,来调用setwindowpos函数或其它窗口管理函数WM_POWER = $0048;(适用于16位的windows)当系统将要进入暂停状态时发送此消息WM_COPYDATA = $004A;当一个应用程序传递数据给另一个应用程序时发送此消息WM_CANCELJOURNAL = $004B;当某个用户取消程序日志激活状态,提交此消息给程序WM_NOTIFY = $004E;当某个控件的某个事件已经发生或这个控件需要得到一些信息时,发送此消息给它的父窗口WM_INPUTLANGCHANGEREQUEST = $0050;当用户选择某种输入语言,或输入语言的热键改变WM_INPUTLANGCHANGE = $0051;当平台现场已经被改变后发送此消息给受影响的最顶级窗口WM_TCARD = $0052;当程序已经初始化windows帮助例程时发送此消息给应用程序WM_HELP = $0053;此消息显示用户按下了F1,如果某个菜单是激活的,就发送此消息个此窗口关联的菜单,否则就发送给有焦点的窗口,如果当前都没有焦点,就把此消息发送给当前激活的窗口WM_USERCHANGED = $0054;当用户已经登入或退出后发送此消息给所有的窗口,当用户登入或退出时系统更新用户的具体设置信息,在用户更新设置时系统马上发送此消息;WM_NOTIFYFORMAT = $0055;公用控件,自定义控件和他们的父窗口通过此消息来判断控件是使用ANSI还是UNICODE结构在WM_NOTIFY消息,使用此控件能使某个控件与它的父控件之间进行相互通信WM_CONTEXTMENU = $007B;当用户某个窗口中点击了一下右键就发送此消息给这个窗口WM_STYLECHANGING = $007C;当调用SETWINDOWLONG函数将要改变一个或多个 窗口的风格时发送此消息给那个窗口WM_STYLECHANGED = $007D;当调用SETWINDOWLONG函数一个或多个 窗口的风格后发送此消息给那个窗口WM_DISPLAYCHANGE = $007E;当显示器的分辨率改变后发送此消息给所有的窗口WM_GETICON = $007F;此消息发送给某个窗口来返回与某个窗口有关连的大图标或小图标的句柄;WM_SETICON = $0080;程序发送此消息让一个新的大图标或小图标与某个窗口关联;WM_NCCREATE = $0081;当某个窗口第一次被创建时,此消息在WM_CREATE消息发送前发送;WM_NCDESTROY = $0082;此消息通知某个窗口,非客户区正在销毁WM_NCCALCSIZE = $0083;当某个窗口的客户区域必须被核算时发送此消息WM_NCHITTEST = $0084;//移动鼠标,按住或释放鼠标时发生WM_NCPAINT = $0085;程序发送此消息给某个窗口当它(窗口)的框架必须被绘制时;WM_NCACTIVATE = $0086;此消息发送给某个窗口 仅当它的非客户区需要被改变来显示是激活还是非激活状态;WM_GETDLGCODE = $0087;发送此消息给某个与对话框程序关联的控件,widdows控制方位键和TAB键使输入进入此控件通过响应WM_GETDLGCODE消息,应用程序可以把他当成一个特殊的输入控件并能处理它WM_NCMOUSEMOVE = $00A0;当光标在一个窗口的非客户区内移动时发送此消息给这个窗口 //非客户区为:窗体的标题栏及窗的边框体WM_NCLBUTTONDOWN = $00A1;当光标在一个窗口的非客户区同时按下鼠标左键时提交此消息WM_NCLBUTTONUP = $00A2;当用户释放鼠标左键同时光标某个窗口在非客户区十发送此消息;WM_NCLBUTTONDBLCLK = $00A3;当用户双击鼠标左键同时光标某个窗口在非客户区十发送此消息WM_NCRBUTTONDOWN = $00A4;当用户按下鼠标右键同时光标又在窗口的非客户区时发送此消息WM_NCRBUTTONUP = $00A5;当用户释放鼠标右键同时光标又在窗口的非客户区时发送此消息WM_NCRBUTTONDBLCLK = $00A6;当用户双击鼠标右键同时光标某个窗口在非客户区十发送此消息WM_NCMBUTTONDOWN = $00A7;当用户按下鼠标中键同时光标又在窗口的非客户区时发送此消息WM_NCMBUTTONUP = $00A8;当用户释放鼠标中键同时光标又在窗口的非客户区时发送此消息WM_NCMBUTTONDBLCLK = $00A9;当用户双击鼠标中键同时光标又在窗口的非客户区时发送此消息WM_KEYFIRST = $0100;WM_KEYDOWN = $0100;//按下一个键WM_KEYUP = $0101;//释放一个键WM_CHAR = $0102;//按下某键,并已发出WM_KEYDOWN, WM_KEYUP消息WM_DEADCHAR = $0103;当用translatemessage函数翻译WM_KEYUP消息时发送此消息给拥有焦点的窗口WM_SYSKEYDOWN = $0104;当用户按住ALT键同时按下其它键时提交此消息给拥有焦点的窗口;WM_SYSKEYUP = $0105;当用户释放一个键同时ALT 键还按着时提交此消息给拥有焦点的窗口WM_SYSCHAR = $0106;当WM_SYSKEYDOWN消息被TRANSLATEMESSAGE函数翻译后提交此消息给拥有焦点的窗口WM_SYSDEADCHAR = $0107;当WM_SYSKEYDOWN消息被TRANSLATEMESSAGE函数翻译后发送此消息给拥有焦点的窗口WM_KEYLAST = $0108;WM_INITDIALOG = $0110;在一个对话框程序被显示前发送此消息给它,通常用此消息初始化控件和执行其它任务WM_COMMAND = $0111;当用户选择一条菜单命令项或当某个控件发送一条消息给它的父窗口,一个快捷键被翻译WM_SYSCOMMAND = $0112;当用户选择窗口菜单的一条命令或当用户选择最大化或最小化时那个窗口会收到此消息WM_TIMER = $0113; //发生了定时器事件WM_HSCROLL = $0114;当一个窗口标准水平滚动条产生一个滚动事件时发送此消息给那个窗口,也发送给拥有它的控件WM_VSCROLL = $0115;当一个窗口标准垂直滚动条产生一个滚动事件时发送此消息给那个窗口也,发送给拥有它的控件 WM_INITMENU = $0116;当一个菜单将要被激活时发送此消息,它发生在用户菜单条中的某项或按下某个菜单键,它允许程序在显示前更改菜单WM_INITMENUPOPUP = $0117;当一个下拉菜单或子菜单将要被激活时发送此消息,它允许程序在它显示前更改菜单,而不要改变全部WM_MENUSELECT = $011F;当用户选择一条菜单项时发送此消息给菜单的所有者(一般是窗口)WM_MENUCHAR = $0120;当菜单已被激活用户按下了某个键(不同于加速键),发送此消息给菜单的所有者;WM_ENTERIDLE = $0121;当一个模态对话框或菜单进入空载状态时发送此消息给它的所有者,一个模态对话框或菜单进入空载状态就是在处理完一条或几条先前的消息后没有消息它的列队中等待WM_MENURBUTTONUP = $0122;WM_MENUDRAG = $0123;WM_MENUGETOBJECT = $0124;WM_UNINITMENUPOPUP = $0125;WM_MENUCOMMAND = $0126;WM_CHANGEUISTATE = $0127;WM_UPDATEUISTATE = $0128;WM_QUERYUISTATE = $0129;WM_CTLCOLORMSGBOX = $0132;在windows绘制消息框前发送此消息给消息框的所有者窗口,通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置消息框的文本和背景颜色WM_CTLCOLOREDIT = $0133;当一个编辑型控件将要被绘制时发送此消息给它的父窗口;通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置编辑框的文本和背景颜色WM_CTLCOLORLISTBOX = $0134;当一个列表框控件将要被绘制前发送此消息给它的父窗口;通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置列表框的文本和背景颜色WM_CTLCOLORBTN = $0135;当一个按钮控件将要被绘制时发送此消息给它的父窗口;通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置按纽的文本和背景颜色WM_CTLCOLORDLG = $0136;当一个对话框控件将要被绘制前发送此消息给它的父窗口;通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置对话框的文本背景颜色WM_CTLCOLORSCROLLBAR= $0137;当一个滚动条控件将要被绘制时发送此消息给它的父窗口;通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置滚动条的背景颜色WM_CTLCOLORSTATIC = $0138;当一个静态控件将要被绘制时发送此消息给它的父窗口;通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置静态控件的文本和背景颜色WM_MOUSEFIRST = $0200;WM_MOUSEMOVE = $0200;// 移动鼠标WM_LBUTTONDOWN = $0201;//按下鼠标左键WM_LBUTTONUP = $0202;//释放鼠标左键WM_LBUTTONDBLCLK = $0203;//双击鼠标左键WM_RBUTTONDOWN = $0204;//按下鼠标右键WM_RBUTTONUP = $0205;//释放鼠标右键WM_RBUTTONDBLCLK = $0206;//双击鼠标右键WM_MBUTTONDOWN = $0207;//按下鼠标中键WM_MBUTTONUP = $0208;//释放鼠标中键WM_MBUTTONDBLCLK = $0209;//双击鼠标中键WM_MOUSEWHEEL = $020A;当鼠标轮子转动时发送此消息个当前有焦点的控件WM_MOUSELAST = $020A;WM_PARENTNOTIFY = $0210;当MDI子窗口被创建或被销毁,或用户按了一下鼠标键而光标在子窗口上时发送此消息给它的父窗口WM_ENTERMENULOOP = $0211;发送此消息通知应用程序的主窗口that已经进入了菜单循环模式WM_EXITMENULOOP = $0212;发送此消息通知应用程序的主窗口that已退出了菜单循环模式WM_NEXTMENU = $0213;WM_SIZING = 532;当用户正在调整窗口大小时发送此消息给窗口;通过此消息应用程序可以监视窗口大小和位置也可以修改他们WM_CAPTURECHANGED = 533;发送此消息 给窗口当它失去捕获的鼠标时;WM_MOVING = 534;当用户在移动窗口时发送此消息,通过此消息应用程序可以监视窗口大小和位置也可以修改他们;WM_POWERBROADCAST = 536;此消息发送给应用程序来通知它有关电源管理事件;WM_DEVICECHANGE = 537;当设备的硬件配置改变时发送此消息给应用程序或设备驱动程序WM_IME_STARTCOMPOSITION = $010D;WM_IME_ENDCOMPOSITION = $010E;WM_IME_COMPOSITION = $010F;WM_IME_KEYLAST = $010F;WM_IME_SETCONTEXT = $0281;WM_IME_NOTIFY = $0282;WM_IME_CONTROL = $0283;WM_IME_COMPOSITIONFULL = $0284;WM_IME_SELECT = $0285;WM_IME_CHAR = $0286;WM_IME_REQUEST = $0288;WM_IME_KEYDOWN = $0290;WM_IME_KEYUP = $0291;WM_MDICREATE = $0220;应用程序发送此消息给多文档的客户窗口来创建一个MDI 子窗口WM_MDIDESTROY = $0221;应用程序发送此消息给多文档的客户窗口来关闭一个MDI 子窗口WM_MDIACTIVATE = $0222;应用程序发送此消息给多文档的客户窗口通知客户窗口激活另一个MDI子窗口,当客户窗口收到此消息后,它发出WM_MDIACTIVE消息给MDI子窗口(未激活)激活它;WM_MDIRESTORE = $0223;程序 发送此消息给MDI客户窗口让子窗口从最大最小化恢复到原来大小WM_MDINEXT = $0224;程序 发送此消息给MDI客户窗口激活下一个或前一个窗口WM_MDIMAXIMIZE = $0225;程序发送此消息给MDI客户窗口来最大化一个MDI子窗口;WM_MDITILE = $0226;程序 发送此消息给MDI客户窗口以平铺方式重新排列所有MDI子窗口WM_MDICASCADE = $0227;程序 发送此消息给MDI客户窗口以层叠方式重新排列所有MDI子窗口WM_MDIICONARRANGE = $0228;程序 发送此消息给MDI客户窗口重新排列所有最小化的MDI子窗口WM_MDIGETACTIVE = $0229;程序 发送此消息给MDI客户窗口来找到激活的子窗口的句柄WM_MDISETMENU = $0230;程序 发送此消息给MDI客户窗口用MDI菜单代替子窗口的菜单WM_ENTERSIZEMOVE = $0231;WM_EXITSIZEMOVE = $0232;WM_DROPFILES = $0233;WM_MDIREFRESHMENU = $0234;WM_MOUSEHOVER = $02A1;WM_MOUSELEAVE = $02A3;WM_CUT = $0300;程序发送此消息给一个编辑框或combobox来删除当前选择的文本WM_COPY = $0301;程序发送此消息给一个编辑框或combobox来复制当前选择的文本到剪贴板WM_PASTE = $0302;程序发送此消息给editcontrol或combobox从剪贴板中得到数据WM_CLEAR = $0303;程序发送此消息给editcontrol或combobox清除当前选择的内容;WM_UNDO = $0304;程序发送此消息给editcontrol或combobox撤消最后一次操作WM_RENDERFORMAT = $0305;WM_RENDERALLFORMATS = $0306;WM_DESTROYCLIPBOARD = $0307;当调用ENPTYCLIPBOARD函数时 发送此消息给剪贴板的所有者WM_DRAWCLIPBOARD = $0308;当剪贴板的内容变化时发送此消息给剪贴板观察链的第一个窗口;它允许用剪贴板观察窗口来显示剪贴板的新内容;WM_PAINTCLIPBOARD = $0309;当剪贴板包含CF_OWNERDIPLAY格式的数据并且剪贴板观察窗口的客户区需要重画;WM_VSCROLLCLIPBOARD = $030A;WM_SIZECLIPBOARD = $030B;当剪贴板包含CF_OWNERDIPLAY格式的数据并且剪贴板观察窗口的客户区域的大小已经改变是此消息通过剪贴板观察窗口发送给剪贴板的所有者;WM_ASKCBFORMATNAME = $030C;通过剪贴板观察窗口发送此消息给剪贴板的所有者来请求一个CF_OWNERDISPLAY格式的剪贴板的名字WM_CHANGECBCHAIN = $030D;当一个窗口从剪贴板观察链中移去时发送此消息给剪贴板观察链的第一个窗口;WM_HSCROLLCLIPBOARD = $030E;此消息通过一个剪贴板观察窗口发送给剪贴板的所有者 ;它发生在当剪贴板包含CFOWNERDISPALY格式的数据并且有个事件在剪贴板观察窗的水平滚动条上;所有者应滚动剪贴板图象并更新滚动条的值;WM_QUERYNEWPALETTE = $030F;此消息发送给将要收到焦点的窗口,此消息能使窗口在收到焦点时同时有机会实现他的逻辑调色板WM_PALETTEISCHANGING= $0310;当一个应用程序正要实现它的逻辑调色板时发此消息通知所有的应用程序WM_PALETTECHANGED = $0311;此消息在一个拥有焦点的窗口实现它的逻辑调色板后发送此消息给所有顶级并重叠的窗口,以此来改变系统调色板WM_HOTKEY = $0312;当用户按下由REGISTERHOTKEY函数注册的热键时提交此消息WM_PRINT = 791;应用程序发送此消息仅当WINDOWS或其它应用程序发出一个请求要求绘制一个应用程序的一部分;WM_PRINTCLIENT = 792;WM_HANDHELDFIRST = 856;WM_HANDHELDLAST = 863;WM_PENWINFIRST = $0380;WM_PENWINLAST = $038F;WM_COALESCE_FIRST = $0390;WM_COALESCE_LAST = $039F;WM_DDE_FIRST = $03E0;WM_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 + 8;WM_APP = $8000;WM_USER = $0400;此消息能帮助应用程序自定义私有消息;

windows消息的消息常量

2. 如何用VB或读取QQ消息

VB读取QQ消息,依次读取QQ消息窗口
01 Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long    
02 Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVallpWindowName As String) As Long    
03 Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVallpString As String, ByVal cch As Long) As Long    
04      Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVallpClassName As String, ByVal nMaxCount As Long) As Long    
05    Private Const GW_CHILD = 5    
06    Private Const GW_HWNDNEXT = 2    
07    Private Sub Command1_Click()    
08        Dim hWin As Long    
09        Dim strText As String    
10        Dim strClass As String    
11        Dim arr(1 To 5) As String    
12        Dim flag As Integer    
13        Dim length As Integer    
14        flag = 1    
15        List1.Clear    
16        '第一个QQ消息窗口    
17        hWin = FindWindow("CTXOPConntion_Class", vbNullString)    
18        If hWin = 0 Then Exit Sub    
19        Do    
20                strText = String$(50, vbNullChar)    
21                GetWindowText hWin, strText, Len(strText)    
22                strText = Left$(strText, InStr(strText, vbNullChar) - 1)    
23                If InStr(strText, "OP_") = 1 Then    
24                        strText = Mid$(strText, 4)    
25                        List1.AddItem strText    
26                        arr(flag) = strText    
27                        flag = flag + 1    
28                End If    
29                Do    
30                        '下一个窗口    
31                        hWin = GetWindow(hWin, GW_HWNDNEXT)    
32                        If hWin = 0 Then Exit Do    
33                        strClass = String$(50, vbNullChar)    
34                        GetClassName hWin, strClass, Len(strClass)    
35                        strClass = Left$(strClass, InStr(strClass, vbNullChar) - 1)    
36                Loop While strClass  "CTXOPConntion_Class"    
37        Loop While hWin    
38        List1.Text = strText    
39    End Sub

3. VC对话框之间如何传递信息???

方法很多,我给你一中最简单的方法。
在CNo2Dlg.CPP中定义个全局变量,CString strMSG;
在CNo3Dlg.CPP中引用这个全局变量,extern CString strMSG;
在第二个对话框读完文件后,将要传递的字符串赋值到strMSG,然后给第一个对话框发一个消息,让他显示一下即可。
发消息方法会吗?
在CNo2Dlg.H中定义消息#define WM_GETTEXT  WM_USER+100
CNo3Dlg.CPP包含这个头文件,然后读完文件SendMessage(第一个对话框句柄, WM_GETTEXT, NULL, NULL);
CNo2Dlg.CPP中加宏ON_MESSAGE(WM_GETTEXT, 处理函数)
具体后面的自己实现,说的太清楚,你印象就不深了。

VC对话框之间如何传递信息???

4. windows消息的Windows消息分类

1.系统定义消息(System-Defined Messages)(1)标准消息除WM_COMMAND之外,所有以WM_开头的消息都是标准消息,例如鼠标单击、移动,键盘左击、右击。(2)命令消息来自菜单,加速键或工具栏按钮的消息。这类消息都以WM——COMMAND形式呈现。WM_COMMAND, LOWORD(wParam)表示菜单项,工具栏按钮或一般控件的ID如编辑框,按钮等。如果是控件, HIWORD(wParam)表示控件消息类型(3)通告消息由复杂控件产生的消息。这类消息也是以WM——COMMAND形式呈现。 这是最灵活的消息格式, 其Message, wParam, lParam分别为:WM_NOTIFY, 控件ID,指向NMHDR的指针。NMHDR包含控件通知的内容, 可以任意扩展2.程序定义消息(Application-Defined Messages)   用户自定义的消息, 对于其范围有如下规定:   WM_USER: 0x0400-0x7FFF   (ex. WM_USER+10)

5. 举例说明windows应用程序中消息传递是如何进行的?

系统以messages的形式将输入传递给窗口过程。消息可以被系统和应用程序产生。系统产生消息当每一次输入事件发生,如当用户敲键盘,移鼠标,或者单击滚动条。系统也用消息来响应由于应用程序引起的系统变化。如应用程序改变系统字体资源或者改变它的一个窗口。应用程序产生消息来让他的窗口执行一些任务或者与其他应用程序的窗口通讯。


系统发送消息给窗口过程并传递4个参数,windows句柄, 消息标识符, 2个消息参数。系统使用窗体句柄来决定那个窗口过程来接受消息。


消息标识符以常量命名指出消息的含义。当窗口过程接收到消息,使用消息标识符决定如何处理消息。例如、WM_PAINT告诉窗口过程窗体客户区被改变了需要重绘。 


消息参数指定被窗口过程使用的数据和数据的位置。其含义和值取决于消息类型。消息参数可以包含一个整数, 标志位,一个指针等。 当消息不使用消息参数时,他们被设置位NULL。一个Window窗口过程必须根据消息标识符来决定如何解释消息参数。


Message Types
This section describes the two types of messages: 
· System-Defined Messages 
· Application-Defined Messages
System-Defined Messages

当系统和应用程序通讯时,系统post和send系统定义消息。他使用消息来控制应用程序的操作,提供输入和其他信息让应用程序处理。应用程序也可以post或者send系统定义消息。 


每一个系统定义消息由一个唯一的标识符与一致的常量以声明消息的含义。例如 WM_PAINT 要求窗口绘制它的内容。


符号常量指定系统定义消息属于的类别,常量的前缀指定处理解释消息的窗体的类型。以下使一些前缀和他们相关的消息类别。


Prefix Message category
ABM Application desktop toolbar 
BM Button control 
CB Combo box control 
CBEM Extended combo box control
CDM Common dialog box 
DBT Device 
DL Drag list box 
DM Default push button control 
DTM Date and time picker control
EM Edit control 
HDM Header control 
HKM Hot key control
IPM IP address control
LB List box control 
LVM List view control 
MCM Month calendar control
PBM Progress bar 
PGM Pager control
PSM Property sheet 
RB Rebar control
SB Status bar window 
SBM Scroll bar control 
STM Static control 
TB Toolbar 
TBM Trackbar 
TCM Tab control 
TTM Tooltip control 
TVM Tree-view control 
UDM Up-down control
WM General window 


通用窗体消息覆盖了很大一个信息和请求的范围, 包括鼠标键盘消息, 菜单对话框的输入, 窗体产生与管理, 动态数据交换 (DDE).


Application-Defined Messages


应用程序可以产生自己用的消息或者与其他进程中窗体通讯。如果应用程序产生自己的消息,窗口过程接受并且必须提供合适的处理。 


系统保留消息标识符的值在0x0000在0x03ff(WM_USER-1)范围。这些值被系统定义消息使用。 应用程序不能使用这些值给自己的消息。


private window classes用0x0400(WM_USER)到0x7fff消息标识符


· If your application is marked version 4.0, you can use message-identifier values in the range 0x8000 (WM_APP) through 0xBFFF for private messages. 


系统使用RegisterWindowMessage来注册消息,返回一个消息标识符范围在0XC000到0XFFFF,使用这个函数来保证整个系统范围内是唯一的


Message Routing

系统有两个方法将消息传递到窗口过程。Post一个消息到先进先出的消息队列。系统定义的临时内存对象。和直接 send消息到窗口过程。

被发送到消息队列的消息称做入队消息,主要是由鼠标键盘输入,例如 WM_MOUSEMOVE, WM_LBUTTONDOWN, WM_KEYDOWN, and WM_CHAR messages。还包括定时器, 刷新, 退出: WM_TIMER, WM_PAINT, and WM_QUIT。其他直接发送到窗口过程的消息被称为 非入队消息。


Queued Messages


系统可以显示任何数量的窗体同一时间。为了传递鼠标键盘消息到合适的窗口,系统使用消息队列。 


系统维护一个系统消息队列和每一个GUI线程的消息队列,为避免给non-GUI现成创建消息队列,所有线程产生时并没有消息队列。仅当线程第一次调用GDI函数时,系统给线程创建一个消息队列。只要用户移动鼠标,点击鼠标,敲键,驱动程序将其转换为消息将他们放在系统消息队列中。系统将他们从系统消息队列中移走,检查他们的目标窗口,然后将他们发送到创建目标窗口的线程的消息队列。线程消息队列接收由这个线程创建的所有窗口的鼠标键盘消息。线程删除消息系统调用窗口过程进行处理。 

WM_PAINT是一个例外,系统总是将消息Post在消息队列的末尾。这样保证窗口以先进先出的顺序接受消息。然而, 仅当没有其他消息时WM_PAINT才被传递窗口过程。同一个窗口的多个 WM_PAINT被合并成一个 WM_PAINT 消息, 合并所有的无效区域到一个无效区域。合并WM_PAIN减少了刷新窗口的次数。


系统通过填充MSG结构并将它复制到消息队列来发送消息到线程队列。MSG结构包括:窗口句柄,消息标识符,两个消息参数。 消息被posted的时间, 和鼠标的位置。线程可以使用PostMessage和PostThreadMessage来给发送消息到自己消息队列或者另一个线成的消息队列。


应用程序可以使用GetMessage从消息队列删除消息。可以使用 PeekMessage来检查一个消息而不删除它。 这个函数将消息队列的消息填充到MSG结构。


在从消息队列删除了一个消息,应用程序可以使用DispatchMessage使系统将消息发送到窗口过程来处理。DispatchMessage拥有一个指向由GetMessage或者PeekMessage填充的MSG结构的指针,传递窗口句柄,消息标识符,消息参数给窗口过程。但它并不传递消息发送的时间和鼠标的位置,应用程序可以通过GetMessageTime和GetMessagePos来得到这些信息。

线程可以使用WaitMessage将控制交给其他线程当消息队列中没有他的消息队烈时,这个函数挂起线程,并不返回,直到新的消息放置于消息队列中。 


你可以调用SetMessageExtraInfo函数来关联一个值到当前线程的消息队列。调用GetMessageExtraInfo来得到这个与最后一次通过GetMessage或者PeekMessaage获得的消息关联得值。


Nonqueued Messages


非入队消息即直接发送到窗口过程的消息,绕过系统队列和线程消息队列。系统发送非入队消息通知一个窗口事件,例如,当用户激活一个新的应用程序窗口,系统发送WM_ACTIVATE, WM_SETFOCUS, and WM_SETCURSOR。这些消息通知窗口它被激活了,键盘输入被直接传递到窗口,鼠标在当前窗口内移动。 非入队消息也可以由当应用程序调用系统函数产生。例如,当程序调用SetWindowPos系统发送WM_WINDOWPOSCHANGED消息。


一些函数也发送非入队消息如 BroadcastSystemMessage, BroadcastSystemMessageEx, SendMessage, SendMessageTimeout, and SendNotifyMessage.


Message Handling


应用程序必须移除和处理被post到消息队列的消息。单线程应用程序通常在WinMain使用消息循环来移除和分发消息到何时窗口过程来处理。多线程应用程序可以在每一个创建窗口的线程中中包含消息循环。 


Message Loop
A simple message loop consists of one function call to each of these three functions: GetMessage, TranslateMessage, and DispatchMessage. Note that if there is an error, GetMessage returns -1 -- thus the need for the special testing.
Show Example
MSG msg;
BOOL bRet;

while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0)
{ 
if (bRet == -1)
{
// handle the error and possibly exit
}
else
{
TranslateMessage(&msg); 
DispatchMessage(&msg); 
}
}


GetMessage 函数从消息队列获得一个消息并将它复制到MSG结构。他返回一个非0值,除非遇到WM_QUIT消息。否则它返回0然后结束循环。In a single-threaded application, ending the message loop is often the first step in closing the application. 应用程序可以使用PostQuitMessage来结束自己的消息循环。通常在主窗口的WM_DESTROY消息中调用。


如果你将一个窗口句柄作为第二个参数传入GetMessage,那么只有指定窗口的的消息可以从队列中获得。GetMessage也可以从消息队列中过滤消息只接受消息队列中落在范围内的消息。详细见消息过滤。 一个线程循环必须包括TranslateMessage如果线程接受键盘的字符输入。每一次用户按键系统产生虚拟键消息,一个虚拟键消息包含虚拟键用来标志那个键被按下,并不是他的字符值,要获得这个值消息循环必须调用TranslateMessage,用于将虚拟键转换为字符消息WM_CHAR然后将它放回应用程序消息队列。通过将它转发到窗口过程,字符消息被删除。


DispatchMessage 函数分发消息到MSG结构中的窗口句柄关联的窗口过程。如果窗口句柄是HWND_TOPMOST,DispatchMessage分发消息到系统中的所有的top-level窗口的窗口过程。如果句柄是NULL,DispatchMessage不做任何事。

应用程序得主线程在初始化,创建至少一个窗口后启动它的消息循环,一旦启动消息循环持续从线程队列中获得消息,然后分发他们到合适的窗口。消息循环在通过GetMessage得到WM_QUIT并将他从队列中删除后结束。


一个消息都列仅需要一个消息循环, 即使程序包含很多窗口。DispatchMessage 总是分发消息到合适的窗口,这是因为MSG结构包含消息所属的窗口的句柄。 


你可以用各种方式修改消息循环。例如,从消息队列获得消息消息但不把他们分发到窗口中去。当应用程序发送一个消息但不指定窗口时是有用的。你可以用GetMessage获得一个特定的消息,而保留其他消息在消息队列。当你需要改变先进先出的顺序时是有用的。


应用程序使用加速键必须将键盘消息转换为WM_COMMAND消息。所以消息循环必须包括TranslateAccelerator函数。详细信息参见加速键。


如果线程使用非模态对话框,消息循环必须包括 IsDialogMessage 以使非模态对话框获得键盘输入。


Window Procedure


窗口过程是一个用于处理所有发送到这个窗口的消息的函数。任何一个窗口类都有一个窗口过程。同一个类的窗口使用同样的窗口过程来响应消息。


系统发送消息给窗口过程将消息数据作为参数传递给他,窗口过程使用参数产生合适行为。 


一个窗口过程通常不忽略消息,如果他不处理,它会将消息传回到执行默认的处理。窗口过程通过调用DefWindowProc来做这个处理。窗口过程必须return一个值作为它的消息处理结果。大多数窗口只处理小部分消息和将其他的通过DefWindowProc传递给系统做默认的处理。


因为窗口过程是同一个类的窗口共享的,它可以为不同的窗口处理消息。通过检查消息中的窗口句柄来找到被消息影响的窗口。详细信息请看Window Procedures。


Message Filtering


应用程序可以从消息队列选择特定的消息。使用GetMessage或者PeekMessage并指定一个消息过滤器。这个过滤器是一个消息标识符的范围或者是一个窗体句柄,或者两者同时指定。GetMessage和PeekMessage使用过滤器来选择从消息队列中获得那些消息。当应用程序要查找一个后入消息队列的消息是很有用。


一个应用程序过滤消息时必须保证符合过滤条件的消息能被发送。例如应用程序在窗口中过滤WM_CHAR并不能得到键盘输入,GetMessage并不返回。这将挂起应用程序。


Posting and Sending Messages


应用程序可以post和send消息,通过将消息复制到消息队列即post消息,send消息将消息数据作为参数直接传递到窗口过程。
可以使用PostMessage来post消息,SendMessage,BroadcastSystemMessage, SendMessageCallback, SendMessageTimeout, SendNotifyMessage, or SendDlgItemMessage来send消息。


Posting Messages


应用程序post消息通知指定窗体执行任务。PostMessage可以创建MSG结构并将它Copy到消息队列。消息循环最终捕获消息并分发到合适的窗口过程。 


给PostMessage传递一个NULL句柄不指定哪一个窗口,这个消息就被发送到当前线程消息队列,应用程序必须在消息处理中处理这个消息。这是为整个应用程序发送消息的一个方法。 


偶尔你可以使用HWND_TOPMOST 这个参数作为句柄参数向所有的top-level窗口发送消息。 


当消息队列满的时候PostMessage并不发送消息,应用程序需要检查PostMessage函数的返回值来确定消息是否被发送,或者没有需要重发。 


Sending Messages


通过Send消息来通知窗口过程立即执行任务。SendMessage将消息发送给指定窗口的窗口过程。函数将等待窗口过程处理完才返回一个消息结果。父窗口和子窗口通常使用Send消息来互相通讯。例如,一个父窗口拥有以一个文本框作为它的子窗口,它可以通过发送消息到子窗口来给文本框设置文字。子窗口也可将文字被用户改变的消息发送给父窗口。 


SendMessageCallback也将消息发送给指定窗口的窗口过程,但是他立即返回。在窗口过程处理完消息后,系统调用指定的回调函数,回调函数的详细资料参见SendAsyncProc


偶尔,你可以发送消息系统中到所有的top-level窗口,例如,应用程序改变了系统时间。它必须以HWND_TOPMOST作为句柄参数发送一个WM_TIMECHANGE 消息通知所有的top-level窗口,你也可以将lpdwRecipients 指定为BSM_APPLICATIONS 用BroadcastSystemMessage函数向所有应用程序广播。


可以使用InSendMessage或者InSendMessageEx函数,窗口过程可以判断它处理的消息是否是由其他线程调用SendMessage发送过来的。This capability is useful when message processing depends on the origin of the message.


Message Deadlocks


一个线程可以调用SendMessage想其他线程发送消息,这个线程不能继续执行直到获得消息得窗口过程返回。如果接受消息的线程处理消息时yields控制,发送线程的消息将永远得不到执行,因为他在等待SendMessage返回。如果接受线程和发送线成语同一个消息队列联系起来,它可能导致消息死锁。
Note that the receiving thread need not yield control explicitly; calling any of the following functions can cause a thread to yield control implicitly. 
接受线程不需要明确yield控制,下面任何一个函数回导致一个线程明确yield控制。


· DialogBox 
· DialogBoxIndirect 
· DialogBoxIndirectParam 
· DialogBoxParam 
· GetMessage 
· MessageBox 
· PeekMessage 
· SendMessage

为了避免潜在的死锁,可以使用SendNotifyMessage 或者 SendMessageTimeout,否则窗口过程,将用InSendMessage或者InSendMessageEx判断消息是否由另一个线程发送过来。当调用前面任何一个函数窗口过程将首先调用InSendMessage或者InSendMessagEx,如果函数返回true窗口过程必须在引起线程yeild控制前调用ReplyMessage 。


Broadcasting Messages


每一个消息包括消息标识符和两个参数,wParam和lParam,消息标识符是唯一的代表这个消息的含义。参数提供与消息相关的额外的信息,但是wParam参数通常是一个类型值提供更多的消息信息。


消息广播是简单的将消息发送到系统中的多个接收者。使用BroadcastSystemMessage函数来广播消息,你必须指定一个或者多个接收者类型,这些类型可以是applications, installable drivers, network drivers, and system-level device drivers。系统将消息发送给指定类型的所有成员。


系统广播消息来响应系统设备驱动程序或者组件的变化。驱动程序或相关组件广播消息给应用程序和其他组件以通知他们这些变化。例如,负责磁盘响应的组件广播消息只要软盘驱动程序发现媒体的变化,如当用户将磁盘插入驱动器。


系统按一下顺序广播消息给接收者:系统级的设备驱动程序,网络驱动程序,installable drivers,和应用程序。意味着如果系统级设备驱动程序作为接收者总是第一个有机会来响应消息。在接受者类型中,没有一个驱动程序能保证在其他驱动程序前接受一个消息。即一个给特定驱动程序的消息必须有一个全局唯一的标志使其他不关心这个消息的驱动程序不处理它。 


你也可以广播消息给所有顶层窗口通过在SendMessage等函数中指定HWND_BROADCAST。 
应用程序通过顶层窗口的窗口过程来接收消息。消息不发送到子窗口。服务可以接收消息通过窗口过程或者他们的服务控制函数。


Query Messages


你可以创建自定义的消息使用它们来调整你的应用程序和其他组件之间的行为。这个非常有用如果你已创建你自己的installable drivers和系统机设备驱动程序。你的驱动程序和使用这个驱动程序的应用程序可以通过自定义消息互相传递信息。


To poll recipients for permission to carry out a given action, use a query message.你可以通过在dwFlags参数中设置BSF_QUERY调用BroadcastSystemMessage。每一个query message的接收者必须返回TRUE来将消息发送到下一个接收者。如果任何一个接收者返回BROADCAST_QUERY_DENY,广播立即停止函数返回0。


Windows 95/98/Me: 你可以创建广播和处理消息的installable drivers。一个installable drivers是一个导出DriverProc函数的dll。驱动程序通过它的DriverProc来接收消息。Installable drivers典型的用来支持多媒体设备,例如sound boards,也可以用于其他设备和目的。


Windows 95/98/Me: 网络驱动程序是给应用程序提供以下支持的dlls。系统级设备驱动程序是系统特定的提供直接访问和管理计算机硬件的可执行组件。这些组件如何处理系统消息超出了这篇文章的范围。

举例说明windows应用程序中消息传递是如何进行的?

6. 如何用hook屏蔽wm_gettext消息

HOOK掉wm_gettext也解决不了这个问题,我能通过API获取,你说你HOOK API?我可以恢复你的HOOK再调用,所以这个是无用功
    我提几个建议:
1.别的程序获取你密码框的密码?你的正确密码肯定是以密文形式存在于其他地方吧,密码框的密码只是当前用户的输入密码,这个用户输入完后你进行密码比对后就马上清除掉就OK了
2.正确密码是不应当以明文存放的,你应该做加密处理后存储

7. 点击,发vc

这个问题不是很难的,基本思想是这样:1.你要取得你要自动点击的窗口的句柄。这一步不是很难,一般用FindWindow()就可以搞定。2.你可以根据这个父窗口的句柄,列出它的所有子窗口(其实也就是窗口的控件)的句柄。找到你需要控件的句柄。3.那就简单了,向那个控件发消息就可以了!具体的你自己查查资料应该可以搞定的了。至于要获取指定控件的文本,你只要向那个控件发送WM_GETTEXT消息就可以了。用FindWindowEx得到按钮的handle再用GetDlgCtrlID得到按钮的ID,然后用SendMessage如:HWNDbhd=FindWindowEx(whd,NULL,NULL,"确定");//whd为窗口的句柄,"确定"为按钮的名称longid=::GetDlgCtrlID(bhd);::SendMessage(wd,WM_COMMAND,MAKELONG(id,BN_CLICKED),(long)bhd);可参考这一段改桌面的程序:

点击,发vc

8. SendMessage函数的后两个参数怎么用呀?

LRESULT SendMessage(
  HWND hWnd,      // handle to destination window
  UINT Msg,       // message
  WPARAM wParam,  // first message parameter
  LPARAM lParam   // second message parameter
);最后两个参数是与消息有关的数据,消息不同,意义就不同。你要问这两个参数怎么用,没有办法回答你的,因为具体怎么用,要看是传递的是什么消息。比如发送 WM_GETTEXT 来取得窗口文本的时候,wParam 指定返回的最大字符数(一般是接收文本的内存大小,如果小于窗口文本的长度,则只能收到一部分),lParam 则是用来接收窗口文本的内存地址。发送 WM_DESTROY 来销毁窗口的时候,这两个参数都没有使用,传递0就可以了