2012-01-27 10 views
0

私は現在、別のアプリケーションをテストするのに役立つアプリケーションを作成しています(どちらもVB.NETで作成されています)。私のテスターアプリは私の他のアプリケーションのフォームに情報を入力できるようにしたい。私は両方のアプリケーションに慣れ親しんでいるので、私は自分のテストアプリで何かしたいと思うフォームについての名前とすべてを知っています。私の問題は、テストステイ・フォームのこの情報を使って、実際にテスター・アプリケーション用のコードでそのフォームを参照できるハンドルまたは何かを得る方法が必要なことです。特定のフォームを見つけて参照するには? (VB.NET)

このフォームを取得するにはどうすればよいですか?似たようで、私の唯一の経験は、プロセスのメインウィンドウのハンドルを得ていたが、それはこれを行うことによって、少し簡単だった。しかし、でもそれは反復処理する必要があるため、私はと本当に満足していないことを

Dim iTunesID as intptr 
    for each process as process in process.getprocesses 
if proc.mainwindowtitle = "iTunes" then iTunesID = proc.MainwindowHandle 
next 

すべてのプロセス。それからも、このケースではメインウィンドウではないので、私は自分の特定のウィンドウをどのように参照するのか本当に分かりません。私はこれを行う方法を探そうとしましたが、私の検索はあまりにも漠然としています。私は、これを行うためにどのような方法が利用できるのか、それを助けるために利用できるのか分かりません。

私の最初の考えは、「form.formsrunning」という種類のforms.formのような形式のものがありますが、「フォームを実行するコマンドを知りません。私はおそらく1つを見つけることができると思いますが、私はすべてのプロセス/フォームを反復するよりも優れたソリューションを望んでいます。

事前にお問い合わせいただきありがとうございます。 :)

+0

...これは助けと関心であった願っています。ただしないでください。 –

+0

アプリケーション外のフォームへの参照を得るのは難しいですか?テストアプリケーションを変更したくないので、私は同じアプリケーションでそれらを使用したくありません(他のいくつかの質問に回答しているので、テストしようとしているプログラムがかなり敏感です)。 ..) – user1167662

+0

@HansPassant ^これを忘れてしまった – user1167662

答えて

0

時間がある場合は、Hawkeyeソース(http://hawkeye.codeplex.com/)をご覧ください。 これは、実行中の.Netアプリケーションに接続して変更するopensourceユーティリティです。プロパティ値、呼び出し方法など...

Hawkeyeは実際にはポイントアンドクリック操作で実行中のアプリケーションに接続します。

既存のプロセスのループを使用して実行中のアプリケーションを見つけることができます。Hawkeyeのソースコードのノウハウを使用してこのアプリケーションにフックし、値の変更、メソッドの呼び出しなどを開始できます。

1

私が正しくあなたの質問を以下てる場合は、以下のVB.NETのコード断片は助けになることがあります。

Dim procNameSought As String = "Notepad2" 

' 
' Use LINQ to get the Process ID for the Application whose window should 
' be brought into focus if you don't already have the Process ID... 
' 
Dim processID As Integer = (From proc As Process In Process.GetProcesses 
          Where proc.ProcessName.Trim() = procNameSought 
          Select proc.Id).FirstOrDefault() 

' 
' Use AppActivate to bring the Main Window for the Process into Focus.... 
' 
Microsoft.VisualBasic.AppActivate(processID) 

アプリケーションのメインウィンドウは、タスクバー、 (例えばに最小化されていない場合は、メインウィンドウは別のアプリケーションによって隠されています)、それは をforegに持ち込みますラウンドし、フォーカスを持っています。ただし、プロセスのメインウィンドウが がタスクバーに最小化されている場合、Windows API関数SetActiveWindow (http://msdn.microsoft.com/en-us/library/ms939986.aspx)を と呼び出すには、PInvokeを使用する必要があります。 、あなたがすることができ、あなたにフォーカスを設定しようとしているWindowsハンドルのインスタンスを指定する必要があります)(SetActiveWindowを使用するために Correct way (in .NET) to switch the focus to another application

caeasyの説明はここでこれを行う方法の一つのアプローチをカバー次の呼び出しによって得られた:

' 
' 32-Bit Window Handle : You may need to change this over to Int64 if 
' you're running on a 64-Bit OS... 
' 
Dim windowHandle As Int32 = (From proc As Process In Process.GetProcesses 
          Where proc.ProcessName.Trim() = procNameSought 
          Select proc.MainWindowHandle).FirstOrDefault() 

Dim winHandlePtr As New IntPtr(windowHandle) 

私はあなたが別のプロセスでテスターを保つことによって、これは千倍以上に複雑作っている

関連する問題