使用enumchildwindows进行VBA枚举

使用enumchildwindows进行VBA枚举,vba,excel,Vba,Excel,我正在尝试创建一个excel文档,用于与我们的一个外部应用程序进行通信 为了从特定窗口获取文本,我的sendmessage工作得很好,但是我无法访问下一个childwindow,因为类名都是相同的: 我的第一个代码从名为“WindowsForms10.EDIT.app.0.2004eee”的父窗口下的第一个类中获取文本 但是我还需要从带圆圈的红色框中获取文本,它具有相同的类名。我只对类名唯一的API调用有经验 一位非常有用的stackoverflow贡献者告诉我使用enumchildwindo

我正在尝试创建一个excel文档,用于与我们的一个外部应用程序进行通信

为了从特定窗口获取文本,我的sendmessage工作得很好,但是我无法访问下一个childwindow,因为类名都是相同的:

我的第一个代码从名为“WindowsForms10.EDIT.app.0.2004eee”的父窗口下的第一个类中获取文本

但是我还需要从带圆圈的红色框中获取文本,它具有相同的类名。我只对类名唯一的API调用有经验

一位非常有用的stackoverflow贡献者告诉我使用enumchildwindows循环浏览其他5个同名子窗口,但经过几天的搜索,我一直无法找到正确的代码来执行此操作

是否有人能够帮助我或提供我可以使用的示例代码


非常感谢

看来我在发布这篇文章大约5分钟后就找到了答案

Grange=FindWindow(vbNullString,“一般账户查询”)


如果包含API函数的声明,这将非常有用。
 Grange = FindWindow(vbNullString, "General Account Enquiry")
 Account_number = FindWindowEx(Grange, 0&,   "WindowsForms10.EDIT.app.0.2004eee", vbNullString)

 the_count = SendMessage(Account_number, WM_GETTEXTLENGTH, 0&, 0&)

 Buffer$ = Space$(the_count)
 Call SendMessageByString(Account_number, WM_GETTEXT, the_count + 1, Buffer$)
Account_number = FindWindowEx(Grange, 0&, "WindowsForms10.EDIT.app.0.2004eee", vbNullString)
Account_number2 = FindWindowEx(Grange, Account_number, "WindowsForms10.EDIT.app.0.2004eee", vbNullString)
Account_number3 = FindWindowEx(Grange, Account_number2, "WindowsForms10.EDIT.app.0.2004eee", vbNullString)
Account_number4 = FindWindowEx(Grange, Account_number3, "WindowsForms10.EDIT.app.0.2004eee", vbNullString)
Account_number5 = FindWindowEx(Grange, Account_number4, "WindowsForms10.EDIT.app.0.2004eee", vbNullString)
Account_number6 = FindWindowEx(Grange, Account_number5, "WindowsForms10.EDIT.app.0.2004eee", vbNullString)
Account_number7 = FindWindowEx(Grange, Account_number6, "WindowsForms10.EDIT.app.0.2004eee", vbNullString)

the_count = SendMessage(Account_number6, WM_GETTEXTLENGTH, 0&, 0&)

Buffer$ = Space$(the_count)
Call SendMessageByString(Account_number6, WM_GETTEXT, the_count + 1, Buffer$)

ThisWorkbook.Sheets("Sheet1").Range("A2") = Buffer$