我是很新的这一点,已经创建一个与我们的外部应用程序的一个连通的Excel文档摸索我的路。VBA发送API调用外部程序
我已经通过使用FindWindowEX找到这个应用程序的特定按钮/箱,已设法成功地插入文字的形式之一的教程。
我打了一个路障试图“点击”按钮时,我想的问题是,我试图用犯规通信的应用有独特的类名。
从可以看到的画面,几乎一切都被称为“WindowsForms10.Window.8.app.0.2004eee”
这意味着我可以插入文本插入第一个也是唯一的文字但不能深入了解我需要“点击”才能搜索的按钮。
当前代码如下:我并不需要打开应用程序,因为它总是从启动起来。
Sub Runapplication()
DoEvents
Hwindow2 = FindWindow(vbNullString, "General Account Enquiry")
'Account Number
Account_Number = FindWindowEx(Hwindow2, 0&, "WindowsForms10.EDIT.app.0.2004eee", vbNullString)
Accountnumber = ThisWorkbook.Sheets("Sheet1").Range("A1")
Call SendMessageByString(Account_Number, WM_SETTEXT, 0, Accountnumber)
DoEvents
Account1 = FindWindow(vbNullString, "csEditAccount")
Account = FindWindowEx(Hwindow2, 0&, "WindowsForms10.Window.8.app.0.2004eee", vbNullString)
'Call EnableWindow(Account, True)
Call SendMessage(Account, WM_LBUTTONDOWN, 0, ByVal 0&)
End Sub
我有所有的常量/ declrations
Public Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (_
ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare PtrSafe Function CloseWindow Lib "user32" (ByVal hWnd As Long) As Long
Public Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" (_
ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
lParam As Any) As Long
Public Declare PtrSafe Function SendMessageByString Lib "user32" Alias "SendMessageA" (_
ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
ByVal lParam As String) As Long
Public Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (_
ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _
ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Public Declare PtrSafe Function FindWindowEx Lib "user32" _
Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, _
ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Public Declare PtrSafe Function EnableWindow Lib "USER32.dll" (_
ByVal hWnd As Long, _
ByVal fEnable As Long) As Long
Public Const SW_NORMAL As Long = 1
Public Const WM_CLOSE As Long = &H10
Public Const BM_CLICK As Long = &HF5
Public Const WM_KEYUP As Long = &H101
Public Const WM_SETTEXT = &HC
Public Const LB_FINDSTRING = &H18F
Public Const WM_LBUTTONDOWN = &H201
任何帮助将不胜感激,我几乎是昨天疯狂去网上淘试图寻找一个答案,这个问题,
谢谢您!
EnumChildWindows可以提供帮助,但是图像中可用的信息比声明的要多。你有标题(文本)内容,类(编辑,静态,按钮等)。例如,我可以看到你有一个标有“Get Acct ...”的按钮,其HWND为“000107A0”。 –
嗨,肯,我希望我能以某种方式将句柄或任何其他信息合并到“findwindowex”中,这大部分是我花了我的时间寻找昨天的东西,但没有提出任何比模糊暗示findwindowEX可能不是我应该使用的。 –
你的Windows 8应用程序是否实现'IAccessible'?你可以执行一个IAccessible。 – ThunderFrame