2015-07-07 2 views
0

У меня есть код ниже, чтобы проверить, работает ли «chrome», когда я нажимаю кнопку Button1. Если он не запускает хром. Это работает, но я не знаю код, необходимый в инструкции If, чтобы переключиться на chrome, если он уже запущен. Надеюсь, это что-то очень простое.Проверьте процесс, затем переключитесь на него?

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 

    If Process.GetProcessesByName("chrome").Count > 0 Then 

     ??**SHOW RUNNING APPLICATION**?? 

    Else 
     Process.Start("C:\Program Files\Google\Chrome\Application\chrome.exe") 
    End If 


End Sub 
+3

'Chrome' начало многих случаев сам по себе. Каждая вкладка имеет свой собственный процесс, так как вы собираетесь сказать, на какой из них нужно переключиться? – Codexer

+0

Это не проблема. В данный момент будет только одна вкладка. –

ответ

4

Как я уже упоминал выше, комментарий Chrome starts many instances of itself. Each tab has its own process, so how are you going to tell it which one to switch to?. Это зависит от того, какая вкладка была выбрана, когда вы сворачиваете окно или сворачиваете себя на панель задач. Ниже следует помочь вам, и это проверено и проверено. Единственная проблема заключается в том, что если вы открываете Chrome и имеете несколько вкладок, это нормально, но если вы создаете другой экземпляр Chrome, он не покажет второй экземпляр, он только выведет первый экземпляр ... Если вы закроете первый экземпляр, второй экземпляр, конечно, выйдет вперед.

Public Class Form1 

#Region "DLL Imports" 
    <System.Runtime.InteropServices.DllImport("User32.dll")> _ 
    Private Shared Function SetForegroundWindow(handle As IntPtr) As Boolean 
    End Function 

    <System.Runtime.InteropServices.DllImport("User32.dll")> _ 
    Private Shared Function ShowWindow(handle As IntPtr, nCmdShow As Integer) As Boolean 
    End Function 

    <System.Runtime.InteropServices.DllImport("User32.dll")> _ 
    Private Shared Function IsIconic(handle As IntPtr) As Boolean 
    End Function 
#End Region 

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     StartOrShowProcess("chrome") 
    End Sub 


    Private Sub StartOrShowProcess(ByVal strProcessName As String) 
     Try 
      Dim handle As IntPtr 
      Dim proc As Process() = Process.GetProcessesByName(strProcessName) 
      If proc.Count > 0 Then 
       For Each procP As Process In proc 
        handle = procP.MainWindowHandle 
        If handle <> 0 AndAlso IsIconic(handle) Then 'Do we have a handle and is it minimized? 
         ShowWindow(handle, 9) 
         SetForegroundWindow(handle) 
        End If 
       Next 
      Else 'Not running or started... 
       Process.Start(strProcessName) 
      End If 

     Catch ex As Exception 
      'Handle your error... 
     End Try 
    End Sub 


End Class 
+0

Это сработало большое спасибо! Однако, если это было сведено к минимуму, оно будет иметь окно на передний план. Если на заднем плане ничего не происходит. Могут ли в нее быть внесены поправки, всегда приносит окно вперед? –

+1

@TomLumbard ܤ да, он может прийти в порядок, если это не так. Просто удалите этот 'AndAlso IsIconic (handle)'. Тогда это не имеет значения, если окно сведено к минимуму или нет, или если оно не находится спереди. – Codexer

Смежные вопросы