2016-06-19 20 views
-1

VB .NETを使用して外部アプリケーションを自動化しようとしています。外部アプリケーションはVB .NETで作成され、winフォームが使用されます。 Spy ++を使って、テキストフィールドや押しボタンなどを編集することができます。しかし、メニューからアイテムを選択する方法はわかりません。VB .NET外部プログラムのメニューストリップでオプションを選択する自動化

アプリケーションの上部には、hereに似たサブメニューと2次サブメニューを持つメニューがあります。 Spy ++はメニューストリップ全体を1つの要素とみなし、メニューストリップのハンドルを持っている場合、どのようにアイテムを選択するかわかりません。

これまでのところ、私はちょうどでアプリを自動化しています:

Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Integer, ByVal hWnd2 As Integer, ByVal lpsz1 As String, ByVal lpsz2 As String) As Integer 
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Integer 
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, lParam As String) As Integer 

たぶんそこにこのようなメニューを処理するためのAPIですが、私はそれを見つけていません。

うまくいけば、誰かが私を啓発する:)

答えて

1

をリサイズでできるようになる、メニューの2つのタイプがあります。古いMainMenuコントロールはネイティブWin32スタイルのメニューを実装しました。これはstandard Windows API functionsで操作できます。新しいMenuStripコントロールは、C#で書かれ、2000年代のMicrosoft Officeアプリケーションの外観を模倣するように設計された、完全にオーナーが描いたメニューバーでした。残念ながら、多くのWinFormsアプリケーションでは、(A)デフォルトであり、(B)メニュー項目に画像を表示しやすくなっているため、醜いMenuStripコントロールを使用しています。 MenuStripはC#で記述され、ネイティブのWin32メニューの実装とは関係がないため、標準のAPI関数を使用して相互作用することはできません。 Spy ++はそれを単一のコントロールとして、事実上ブラックボックスとして表示します。

ボタンやテキストボックスのような他のほとんどのWinFormsコントロールは、ネイティブのWin32コントロールを包むラッパーであるため、Spy ++で表示され、標準のWindows API関数を使用して相互作用します。 (あなたはVB 6アプリケーションを作成している場合を除きもちろん、あなたがは、これらの関数のANSIバージョンを呼び出すべきではありません。)

あなたは絶対に別のアプリケーションの内部を操作する必要がある場合は、あなたがUI Automationを使用する必要がありますそれをするために。これは、実際のコントロールと偽のコントロールの両方で機能します。

+0

ありがとうございます。前もってUIオートメーションを調べておき、紛らわしいことを覚えておいてください。しかし、もう一度見て、もう少し理解し始めています。実際には私が必要としていた答えです。あなたの明確なガイダンスは正しい軌道に乗りました:)コーディング例を探している人たちのために、私はこれを見つけました(C#で思います):http://stackoverflow.com/questions/29119171/simulate -a-click-on-a-button-with-no-apparent-handleを使用すると、これはVBに簡単に適応します。 – area9

関連する問題