2012-01-09 19 views
1

VB2010のプロセス名に基づいて他のアプリケーションにフォーカスを設定するにはどうすればよいですか?プロセス名に基づいて他のアプリケーションにフォーカスを設定する方法VB

私が今できることは、FindWindowを使ってウィンドウ名に基づいて他のアプリケーションに焦点を合わせ、SetForegroundWindowを使用することです。私が現在持っているものは以下の通りです

 Dim theHandle As IntPtr 
     theHandle = FindWindow(Nothing, "Gmail: Email from Google") 
     If theHandle <> IntPtr.Zero Then 
     SetForegroundWindow(theHandle) 

問題は、FindWindowが正確なウィンドウ名を必要とし、正確な名前がわからないことです。 (私のプログラムは、ユーザーが入力する別のWebサイトを開くので、開いているサイトを制御することはできません)。とにかく、代わりにプロセス名を使ってフォーカスを設定できるのですか? (この場合はfirefox.exe)その他の提案は歓迎します。

おかげ

答えて

1

あなたは名前でプロセスをルックアップするためにSystem.Diagnostics.Processを使用して、ウィンドウのタイトルを見つけることができます。

For Each app As Process In Process.GetProcessesByName("firefox") 
    Dim theHandle As IntPtr = FindWindow(Nothing, app.MainWindowTitle) 
    If theHandle <> IntPtr.Zero Then 
     SetForegroundWindow(theHandle) 
    End If 
Next 

静的GetProcessesByName方法と、その後MainWindowTitleプロパティを使用します。このサンプルでは、​​正しい名前空間をインポートするにはImport System.Diagnosticsが必要です。この使用後

ActivateApp(System.Diagnostics.Process.GetCurrentProcess.Id) 
      SendKeys.SendWait("~") 
+0

構文を許してください。私はこのPCにVB Expressをインストールしていません。 – Abraham

+0

信じられないほど脆い;彼らは名前を変更しないことをより良い希望!それはすでに一度起こった。 –

+0

@Cody私は同意できません。しかし、OPはプロセス名に基づいてフォーカスを設定する方法を尋ねました。 – Abraham

0
Private Sub ActivateApp(ByVal pID As Integer) 
     Dim p As Process = Process.GetProcessById(pID) 
     If p IsNot Nothing Then 
      SetForegroundWindow(p.MainWindowHandle) 
     End If 
End Sub 

その後、これを使用することがオフの場合

ActivateApp(System.Diagnostics.Process.GetCurrentProcess.Id) 
SendKeys.SendWait("~") 
0
Private Sub ActivateApp(ByVal pID As Integer) 
     Dim p As Process = Process.GetProcessById(pID) 
     If p IsNot Nothing Then 
      SetForegroundWindow(p.MainWindowHandle) 
     End If 
    End Sub 

関連する問題