我是很新的這一點,已經創建一個與我們的外部應用程序的一個連通的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