回 帖 发 新 帖 刷新版面

主题:怎样获得另一个EXE运行时窗体中的文本框句柄

大家好,我这个问题搞了好久都没完成,在这里请教一下大家。我的VB程序要想操作另一个软件,被操作的软件窗体句柄和按扭句柄都能得到,就是死活得不到它的输入框句柄,我想得到它的文本框句柄,并得到它里面的内容,也可以发送字符到这个文本框,请问有会的吗?能教教我吗?谢谢。QQ764496522

回复列表 (共4个回复)

沙发

下面的代码,你只要把鼠标移动到控件上,就可得到你想要的。其中4个API函数要事先声明。

Private Type POINTAPI
  X As Long
  Y As Long
End Type

Dim Po As POINTAPI
Dim Txt(1024) As Byte
Dim hWin As Long
Dim str As String * 128
    
GetCursorPos Po                     '获得当前鼠标位置
hWin = WindowFromPoint(Po.X, Po.Y)  '获得窗口句柄
GetClassName hWin, str, 128         '获得窗口类名
SendMessage hWin, &HD, 1024, Txt(0) '获得窗口标题
Label1.Caption = "句柄: " & hWin
Label2.Caption = "类名: " & str
Label3.Caption = "标题: " & StrConv(Txt, vbUnicode)

板凳

谢谢您的帮助,我要做的是一个通信软件的用户操作增强程序(通信软件是买的,分析出是VB编的。没有源码),通信软件会随时得到COM口的数据,而我的程序要做的是启动哪个软件,并把正确COM口指定给哪个通信软件,然后哪个通信软件的一个TEXT控件就会随时按收到COM口不同的数据,而我的程序将根据通信软件接收来的数据做出不同的功能,我不想让在使用程序时给人感觉在用2个程序,所以想程序启动通信软件后,自动的得到通信软件哪个TEXT控件的句柄。

3 楼

那你试试API函数 FindWindowEx,文本框的类名是:ThunderRT6TextBox

4 楼

用您说的方法得到了一个句柄,不知道句柄是否正确。
在网上看的使用SENDMESSAGE得到句柄中内容的方法。试了下没有得到正确的内容,不是道对不对。
Public Declare Function SendMessageT Lib "user32 " Alias "SendMessageA" (ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As String) As Long

Private Declare Function SendMessage Lib "user32 " Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

hpwnd = FindWindow(vbNullString, "通信 ")

hcwnd = FindWindowEx(hpwnd, 0, vbNullString, ThunderRT6TextBox)


Tex = SendMessage(hcwnd, WM_GETTEXTLENGTH, ByVal CLng(0), ByVal CLng(0)) + 1
Text = SendMessageT(hcwnd, WM_GETTEXT, ByVal Tex, ByVal txtBuff)

我来回复

您尚未登录,请登录后再回复。点此登录或注册