Показать уже открытое окно со списком (VB) - PullRequest
0 голосов
/ 15 ноября 2018

По сути, я делаю менеджера, который будет отображать окно, когда вы нажимаете кнопку или элемент списка.

Это может быть полезно, потому что на рабочих местах ИТ есть программы, открытые с несколькими разными окнами или экземплярами одной запущенной программы, и переключение между задачами может быть проще, если посмотреть на конкретный экземпляр и щелкнуть его, чтобы отобразитьэто, чем прокручивать панель задач, пытаясь найти тот ОДИН документ, который вы ищете.

У меня есть два вопроса:

  1. Как мне показать окно, которое вывыбирается кнопкой после выбора экземпляра в списке

  2. Как мне сделать так, чтобы он закрывал только вкладку / экземпляр программы вместо программы?

Используемый мной скрипт уничтожения:

Private Sub btnKill_Click(sender As Object, e As EventArgs) Handles btnKill.Click
    Try
        Dim whole As String = Search.SelectedItem.ToString
        Dim pid = whole.Substring(whole.LastIndexOf(" # "))
        pid = pid.Replace(" # ", "")
        Dim p As Process = Process.GetProcessById(pid)
        Try
            p.Kill()
        Catch ex As Exception
            ' MessageBox.Show(ex.Message)
        End Try
    Catch ex As Exception
        ' MessageBox.Show(ex.Message)
    End Try
    Search.Items.Clear()
    For Each p As Process In Process.GetProcesses
        If p.MainWindowTitle = String.Empty = False Then
            Search.Items.Add(p.ProcessName & " # " & p.MainWindowTitle & " # " & p.Id)
        End If
    Next
    'For every process running
    For Each P As Process In Process.GetProcesses
        'Get a list of ALL of the open windows associated with the process  
        Dim windows As IDictionary(Of IntPtr, String) = GetOpenWindowsFromPID(P.Id)
        For Each kvp As KeyValuePair(Of IntPtr, String) In windows
            If kvp.Value.ToLower = "start" = False Then
                lstMain.Items.Add(P.ProcessName & " # " & kvp.Value & " # " & P.Id)
                Search.Items.Clear()
            End If
        Next
    Next
    Try
        Dim whole As String = lstMain.SelectedItem.ToString
        Dim pid = whole.Substring(whole.LastIndexOf(" # "))
        pid = pid.Replace(" # ", "")
        Dim p As Process = Process.GetProcessById(pid)
        Try
            p.Kill()
        Catch ex As Exception
            ' MessageBox.Show(ex.Message)
        End Try
    Catch ex As Exception
        ' MessageBox.Show(ex.Message)
    End Try
    lstMain.Items.Clear()
    For Each p As Process In Process.GetProcesses
        If p.MainWindowTitle = String.Empty = False Then
            lstMain.Items.Add(p.ProcessName & " # " & p.MainWindowTitle & " # " & p.Id)
        End If
    Next
    'For every process running
    For Each P As Process In Process.GetProcesses
        'Get a list of ALL of the open windows associated with the process  
        Dim windows As IDictionary(Of IntPtr, String) = GetOpenWindowsFromPID(P.Id)
        For Each kvp As KeyValuePair(Of IntPtr, String) In windows
            If kvp.Value.ToLower = "start" = False Then
                lstMain.Items.Add(P.ProcessName & " # " & kvp.Value & " # " & P.Id)
            End If
        Next
    Next
End Sub

Даже если у меня, скажем, открыто 3 разных файла слов, если я убью один, он убивает их всех.Я думаю, что это связано с:

Dim pid = whole.Substring(whole.LastIndexOf(" # "))
    pid = pid.Replace(" # ", "")
    Dim p As Process = Process.GetProcessById(pid)

Помощь будет очень признателен!

СПАСИБО!

-Filip

РЕДАКТИРОВАТЬ: Как могЯ использую команду "BringtoFront" с ним?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...