那一刻怦然心动:在VC中寻找某个运行中的VB程序的某个文本框并改变其内容

来源:百度文库 编辑:中科新闻网 时间:2024/04/26 06:45:03
我是一个VB程序员,略懂VC。现在由于使用NSIS写安装程序并需要在安装前实现一些特殊功能,而需要使用VC来做一个DLL,使用__stdcall写函数接口。该函数将会被NSIS调用,并且会寻找某个运行中的VB窗口,并寻找它的其中一个TextBox,改变其内容。用VC写DLL以及寻找VB窗口的句柄我已有相关的资料,现在我的问题是,由于无法从VB的程序中主动的发送TextBox的句柄给VC的DLL,那么,VC的DLL如何检索出这个指定的TextBox?另一个问题就是,如何改变这个文本框的内容(例如使用SendMessage)?给出实例的,再另加100分!

SendMessage函数完全使用手册
首先 我们了解一下Windows的消息机制。Windows是一个消息驱动式系

统,Windows消息提供应用程序与应用程序之间,应用程序与Windows系统之间进

行通信的手段。
举个例子,打开记事本程序,该程序有一个 “文件“菜单。 那么,在运行该程序

的时候,如果用户单击“文件菜单“里的“新建“命令, 这个动作将被Windows所捕

捉,Windows经过分析得知这个动作应该由我们打开的记事本程序所来处理,然后

Windows就发送个消息 譬如我们编程的时候有时用到的 WM_COMMAND的消息给记

事本,然后记事本就把这个消息处理掉。 这个过程就是消息处理。
接下来,我们把SendMessage的完整形式讲一下
SendMessage
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal

hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As

Long
别名
SendMessageA
说明
调用一个窗口的窗口函数,将一条消息发给那个窗口。除非消息处理完毕,否

则该函数不会返回

SendMessage所包含4个参数
hwnd 32位的窗口句柄窗口可以是任何类型的屏幕对象,因为Win32能够维

护大多数可视对象的句柄
wMsg 用于区别其他消息的常量值,这些常量可以是Windows单元中预定

义的常量,也可以是自定义的常量
wParam 通常是一个与消息有关的常量值,也可能是窗口或控件的句柄
lParam 通常是一个指向内存中数据的指针。由于WParm、lParam和Pointer

都是32位的,因此,它们之间可以相互转换

wMsg函数
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 当系统将要进入暂停状态时发送此

改变这个文本框的内容 就用 SetWindowText