私はこれに新しく、私たちの外部アプリケーションの1つと通信する優れたドキュメントを作成する方法を間違っています。外部プログラムへのVBA送信API呼び出し
私はこのアプリケーションの特定のボタン/ボックスを見つけるためにFindWindowEXを使用するチュートリアルを終え、フォームの1つにテキストを挿入することができました。
ボタンをクリックしようとするとロードブロッキングが発生しました。問題は、通信しようとしているアプリケーションが一意のクラス名を持っているということです。そのほとんどすべてが「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が助けてくれるかもしれませんが、あなたが持っていると主張するよりも多くの情報があなたのイメージにあります。キャプション(テキスト)コンテンツ、クラス(EDIT、STATIC、BUTTONなど)があります。たとえば、 'Get Acct ... 'と表示され、HWNDが' 000107A0'のボタンがあるのがわかります。 –
こんにちはKen、yeh私は何とかハンドルやその他の情報を「findwindowex」に組み込むことができたと思っていましたが、それは主に私が昨日探していた時間でしたが、曖昧なヒントfindwindowEXは私が使うべきものではないかもしれません。 –
あなたのWindows 8アプリは 'IAccessible'を実装していますか? IAccessibleを実行することができます。 – ThunderFrame