如何使用Win32功能的VBA找到文本框的文本?
我正在尝试使用VBA从程序中获取文本。我正在使用Win32编程并捕获手柄,并尝试使用常数发送消息。我简化了我正在使用的代码,并将其放在下面。
我遇到麻烦的部分是WM_GetText消息。运行几秒钟后,该行代码崩溃了程序。
根据我的研究,ThunderRT6意味着目标程序是用VB 6制成的。
Private Declare PtrSafe Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare PtrSafe FindWindowEx Lib "user32.dll" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
Private Const WM_GETTEXT As Long = &HD
Private Const WM_GETTEXTLENGTH As Long = &HE
Sub GetTextFromTextBox()
Dim hwnd As Long, myTxtBox As Long
hwnd = FindWindow(vbNullString, "My Window")
myTxtBox = FindWindowEx(hwnd, 0&, "ThunderRT6TextBox", vbNullString)
Dim myBuffer As String
Dim myPtr As Long
myPtr = VarPtr(myBuffer)
Dim myLen As Long
myLen = SendMessage(myTxtBox, WM_GETTEXTLENGTH, 0, ByVal 0&)
Debug.Print SendMessage(myTxtBox, WM_GETTEXT, myLen, ByVal myPtr)
End Sub
I am trying to get the text from a textbox from a program using VBA. I am using Win32 programming and capturing the handles and trying to send messages using constants. I have simplified the code I am using and put it below.
The part I am having trouble with is with the WM_GETTEXT message. That line code crashes the program after a few seconds of being run.
Based on my research, ThunderRT6 means the target program was made with VB 6.
Private Declare PtrSafe Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare PtrSafe FindWindowEx Lib "user32.dll" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
Private Const WM_GETTEXT As Long = &HD
Private Const WM_GETTEXTLENGTH As Long = &HE
Sub GetTextFromTextBox()
Dim hwnd As Long, myTxtBox As Long
hwnd = FindWindow(vbNullString, "My Window")
myTxtBox = FindWindowEx(hwnd, 0&, "ThunderRT6TextBox", vbNullString)
Dim myBuffer As String
Dim myPtr As Long
myPtr = VarPtr(myBuffer)
Dim myLen As Long
myLen = SendMessage(myTxtBox, WM_GETTEXTLENGTH, 0, ByVal 0&)
Debug.Print SendMessage(myTxtBox, WM_GETTEXT, myLen, ByVal myPtr)
End Sub
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论