[求助]SendMessage怎么用啊?
怎么给用Findwindow 捕捉到的窗口中发送信息呢?
又如何确定 捕捉到的窗口中的textbox并且定位在特定的一个textbox中输入值?
------解决方案--------------------vs.net有个spy++工具,可以查看页面信息.
你可以通过Findwindow找到该Textbox的句柄(先找这个窗体,然后再找这个TextBox,特征信息用spy看).
得到句柄后再进行sendmessage操作
------解决方案--------------------Windows API(应用程序接口)是Windows系列软件为程序开发人员提供的火力强大的“武器库”,在这个武器库中,有很多极具威力的武器,SendMessage就是其中之一,它的功能非常丰富,灵活使用这个函数,会给编程工作带来很多便利,本文以Visual Basic为例,结合几个具体的例子介绍该函数的功能。
一、SendMessage函数简介
顾名思义,SendMessage函数的功能是“发送消息”,即将一条消息发送到指定对象(操作系统、窗口或控件等)上,以产生特定的动作(如滚屏、修改对象外观等)。
SendMessage函数在VB中的函数说明如下:
Declare Function SendMessage Lib "user32 " Alias "SendMessageA " (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
其中四个自变量的含义和说明如下:
hwnd:对象的句柄。
希望将消息传送给哪个对象,就把该对象的句柄作为实参传送,在VB中可以简单地用“对象.hWnd”获得某个对象的句柄,如Text1.hWnd和Form1.hWnd分别可以得到Text1和Form1的句柄。
wMsg:被发送的消息。
根据具体需求和不同的对象,将不同的消息作为实参传送,以产生预期的动作。
wParam、lParam:附加的消息信息。
这两个是可选的参数,用来提供关于wMsg消息更多的信息,不同的wMsg可能使用这两个参数中的0、1或2个,如果不需要哪个附加参数,则将实参赋为NULL(在VB中赋为0)。
在简单了解了SendMessage函数的格式和功能后,让我们以几个例子来看看它的威力:
二、SendMessage函数使用实例
例1、多行TextBox中的快速处理功能
在处理多行TextBox时我们经常会碰到以下几种情况:
希望了解多行TextBox中目前共有多少行文字;
想快速返回第N行的文字;
对于上面的情况,如果用VB自身的语句或函数来实现的话,要写不短的代码,而且由于要采用顺序查找的办法来完成,因此代码的执行效率也很低。如果使用SendMessage函数则可以大大减少代码量,并大幅度的提高执行效率。
用SendMessage函数完成上面两个任务的方法非常简单,每个任务只需简单地发送一条消息给多行TextBox即可,两个消息分别为:EM_GETLINECOUNT 、EM_GETLINE,其它参数和返回值见下表:
消息常量名
消息值
wParam
lParam
返回值
EM_GETLINECOUNT
&HBA
未用
未用
行数
EM_GETLINE
&HC4
要找的行号
存结果的字节串
结果字节串的字节数