日期:2014-05-20  浏览次数:21004 次

[求助]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
要找的行号
存结果的字节串
结果字节串的字节数