Как установить фокус на другое приложение на основе имени процесса VB - PullRequest
1 голос
/ 09 января 2012

Как настроить фокус на другое приложение на основе имени процесса в VB2010?

Что я могу сделать сейчас, так это установить фокус на другое приложение на основе имени окна, используя FindWindow, а затем использовать SetForegroundWindow. Вот то, что у меня сейчас есть

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

Проблема в том, что FindWindow для работы требуется точное имя окна, а я не всегда знаю точное имя. (Поскольку моя программа открывает другой веб-сайт, на который заходят пользователи, я не могу контролировать, какой сайт они открывают). Так есть ли в любом случае, что я могу установить фокус, используя вместо этого имя процесса? (в этом случае firefox.exe) Любые другие предложения приветствуются.

Спасибо

Ответы [ 2 ]

1 голос
/ 27 января 2012

Вы можете использовать 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 импортировать правильное пространство имен.

0 голосов
/ 14 июля 2016
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("~")
...