Zavřete jiné aplikace pomocí Visual Basic .NET nebo Visual Basic 2005

Microsoft Visual C++ .NET verzi tohoto článku naleznete v tématu
307395 .
Microsoft Visual C# .NET verzi tohoto článku naleznete v tématu
305603 .
Microsoft Visual Basic 6.0 verzi tohoto článku naleznete v tématu
176391 .


V TOMTO ÚKOLU


Souhrn

Tento článek popisuje postup uzavření aplikace z v rámci aplikace. Také popisuje postup uzavření konkrétní instance jiné aplikace, například do programu Poznámkový blok, pokud je spuštěn více než jednu instanci aplikace.

Diskuse o programování logiky

Deklarace proměnných

Několik proměnných musí být definován. Protože tyto proměnné se používají ve více metod, měly by se definovat mimo jakéhokoli postupu tak, aby zůstaly v oboru. Proc proměnná obsahuje odkaz na objekt jednotlivých procesů a procesů je, že pole, které obsahuje proces objekty, které jsou vráceny pomocí GetProcessByName metoda:
Private proc As ProcessPrivate processes() As Process
Private procName As String = "notepad"

Získat seznam instancí aplikace

Následující kód obsahuje funkci (nazvanou buildList ve vzorku), která se nazývá pokaždé, když je vytvořena nová instance programu Poznámkový blok. V tomto příkladu ukládá informace o procesu v ovládacím prvku ListView ; kód k naplnění ovládacího prvku ListView je zahrnut pouze z důvodu konzistence s celý vzorek. Nejdůležitější součástí tohoto kódu je volání GetProcessByName metoda proces třída. Tato metoda vrátí matici proces objekty, které lze vstupní převzetí použití pro... Každý blok, takto:
Dim itemAdd As ListViewItemListView1.Items.Clear()

processes = Process.GetProcessesByName(procName)

For Each proc In processes
itemAdd = ListView1.Items.Add(proc.MainWindowTitle)
itemAdd.SubItems.Add(proc.Id.ToString)
Next

Uzavřít konkrétní Instance aplikace

Pokud používáte více instancí aplikace a chcete zavřít jednu instanci, musíte rozlišovat mezi těmito procesy. Následující příklad používá vlastnost Id objektu procesu zjistit procesy, které jsou od sebe. Id vlastnost a vlastnost MainWindowTitle (jinou vlastnost proces objekt) jsou uloženy v ovládacím prvku ListView . Kód získá zboží, které je aktuálně vybrán v ovládacím prvku ListView , získá odkaz na proces pomocí GetProcessById metody třídy procesu a ukončení procesu voláním CloseMainWindow metoda:
Try    Dim procID As Integer = _  
System.Convert.ToInt32(ListView1.SelectedItems(0).SubItems(1).Text)
Dim tempProc As Process = Process.GetProcessById(procID)
tempProc.CloseMainWindow()
tempProc.WaitForExit()
buildList()
Catch
MessageBox.Show("Please select a process in the ListView before clicking this button." + _
" Or the Process may have been closed by somebody.")
buildList()
End Try

Ukončete všechny instance aplikace

Zavření všech instancí určité aplikace je poměrně jednoduchá. Můžete procházet matice, která je vrácena pomocí metody GetProcessByName a volání CloseMainWindow metoda pro každý objekt proces takto:
Try  For Each proc In processes
proc.CloseMainWindow()
proc.WaitForExit()
Next
buildList()
Catch ex As System.NullReferenceException
MessageBox.Show("No instances of Notepad running.")
End Try

Kroky k vytvoření vzorku

  1. Spustíte novou aplikaci Windows jazyka Visual Basic v aplikaci Visual Studio .NET nebo Visual Studio 2005.
  2. Klepněte pravým tlačítkem myši výchozí formulář Form1.vb a vyberte Zobrazit kód.
  3. Nahraďte kód v okně kód s následující:
    Option Strict OnOption Explicit On 

    Public Class Form1
    Inherits System.Windows.Forms.Form

    #Region " Windows Form Designer generated code "

    Public Sub New()
    MyBase.New()

    'This call is required by the Windows Form Designer.
    InitializeComponent()

    'Add any initialization after the InitializeComponent() call.

    End Sub

    'Form overrides dispose to clean up the component list.
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
    If disposing Then
    If Not (components Is Nothing) Then
    components.Dispose()
    End If
    End If
    MyBase.Dispose(disposing)
    End Sub
    Friend WithEvents btnLaunch1 As System.Windows.Forms.Button
    Friend WithEvents ColumnHeader1 As System.Windows.Forms.ColumnHeader
    Friend WithEvents ColumnHeader2 As System.Windows.Forms.ColumnHeader
    Friend WithEvents ListView1 As System.Windows.Forms.ListView
    Friend WithEvents btnCloseAll As System.Windows.Forms.Button
    Friend WithEvents btnClose1 As System.Windows.Forms.Button

    'Required by the Windows Form Designer.
    Private components As System.ComponentModel.Container

    'NOTE: The following procedure is required by the Windows Form Designer
    'It can be modified by using the Windows Form Designer.
    'Do not modify it by using the code editor.
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
    Me.btnClose1 = New System.Windows.Forms.Button()
    Me.ListView1 = New System.Windows.Forms.ListView()
    Me.ColumnHeader1 = New System.Windows.Forms.ColumnHeader()
    Me.ColumnHeader2 = New System.Windows.Forms.ColumnHeader()
    Me.btnCloseAll = New System.Windows.Forms.Button()
    Me.btnLaunch1 = New System.Windows.Forms.Button()
    Me.SuspendLayout()
    '
    'btnClose1
    '
    Me.btnClose1.Location = New System.Drawing.Point(160, 176)
    Me.btnClose1.Name = "btnClose1"
    Me.btnClose1.Size = New System.Drawing.Size(112, 32)
    Me.btnClose1.TabIndex = 4
    Me.btnClose1.Text = "Close Selected Process"
    '
    'ListView1
    '
    Me.ListView1.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.ColumnHeader1, Me.ColumnHeader2})
    Me.ListView1.Location = New System.Drawing.Point(22, 8)
    Me.ListView1.MultiSelect = False
    Me.ListView1.Name = "ListView1"
    Me.ListView1.Size = New System.Drawing.Size(250, 152)
    Me.ListView1.TabIndex = 7
    Me.ListView1.View = System.Windows.Forms.View.Details
    '
    'ColumnHeader1
    '
    Me.ColumnHeader1.Text = "Window Title"
    Me.ColumnHeader1.Width = 160
    '
    'ColumnHeader2
    '
    Me.ColumnHeader2.Text = "Process ID"
    Me.ColumnHeader2.Width = 85
    '
    'btnCloseAll
    '
    Me.btnCloseAll.Location = New System.Drawing.Point(160, 216)
    Me.btnCloseAll.Name = "btnCloseAll"
    Me.btnCloseAll.Size = New System.Drawing.Size(112, 32)
    Me.btnCloseAll.TabIndex = 3
    Me.btnCloseAll.Text = "Close All Processes"
    '
    'btnLaunch1
    '
    Me.btnLaunch1.Location = New System.Drawing.Point(32, 176)
    Me.btnLaunch1.Name = "btnLaunch1"
    Me.btnLaunch1.Size = New System.Drawing.Size(112, 72)
    Me.btnLaunch1.TabIndex = 1
    Me.btnLaunch1.Text = "Start Notepad"
    '
    'Form1
    '
    Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
    Me.ClientSize = New System.Drawing.Size(292, 266)
    Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.ListView1, Me.btnClose1, Me.btnCloseAll, Me.btnLaunch1})
    Me.Name = "Form1"
    Me.Text = "Process Example"
    Me.ResumeLayout(False)

    End Sub

    #End Region

    Private procName As String = "notepad"
    Private proc As Process
    Private processes() As Process
    Private specialFolder As String = System.Environment.GetFolderPath(Environment.SpecialFolder.System)

    Private Sub buildList()
    'this sub populates the listview control with the instances of 'procName'
    'that are currently running.
    Dim itemAdd As ListViewItem
    ListView1.Items.Clear()

    processes = Process.GetProcessesByName(procName)

    For Each proc In processes
    itemAdd = ListView1.Items.Add(proc.MainWindowTitle)
    itemAdd.SubItems.Add(proc.Id.ToString)
    Next

    End Sub


    Private Sub btnLaunch1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnLaunch1.Click
    'Launch notepad and open the end user license agreement.
    Dim pInfo As New ProcessStartInfo()
    pInfo.FileName = specialFolder & "\eula.txt"
    pInfo.WindowStyle = ProcessWindowStyle.Minimized
    Dim p As Process = Process.Start(pInfo)
    p.WaitForInputIdle()
    buildList()
    End Sub


    Private Sub btnClose1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClose1.Click
    'Close one of the instances of notepad based on the selected item in the ListView.
    'There are several ways to identify a process. For example,
    'you can use the mainwindowtitle, windowhandle, or processname, depending
    'on your needs. The process ID is used here because there may be several
    'windows open with the same title.
    Try
    Dim procID As Integer = System.Convert.ToInt32(ListView1.SelectedItems(0).SubItems(1).Text)
    Dim tempProc As Process = Process.GetProcessById(procID)
    tempProc.CloseMainWindow()
    tempProc.WaitForExit()
    buildList()
    Catch
    MessageBox.Show("Please select a process in the ListView before clicking this button." + _
    " Or the Process may have been closed by somebody.")
    buildList()
    End Try
    End Sub

    Private Sub btnCloseAll_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCloseAll.Click
    'Walk the process array and close all processes.
    Try
    For Each proc In processes
    proc.CloseMainWindow()
    proc.WaitForExit()
    Next
    buildList()
    Catch ex As System.NullReferenceException
    MessageBox.Show("No instances of Notepad running.")
    End Try
    End Sub

    Private Sub Form1_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
    'Make sure that you do not leave any instances running.
    If Not (processes Is Nothing) Then
    If (processes.Length <> 0) Then
    Me.btnCloseAll_Click(Me, e)
    End If
    End If
    End Sub

    End Class

    Poznámka: Je nutné změnit kód v jazyce Visual Basic 2005. Ve výchozím nastavení jazyka Visual Basic vytvoří dva soubory projektu při vytvoření projektu model Windows Forms. Pokud formulář s názvem Form1, dva soubory, které představují formuláře jsou pojmenovány Form1.vb a Form1.Designer.vb. Píšete kód v souboru Form1.vb. Návrhář model Windows Forms zapíše kód v souboru Form1.Designer.vb. Návrhář model Windows Forms používá klíčové slovo částečné provádění Form1 rozdělit do dvou samostatných souborů. Toto chování zabraňuje generované designer kód je proloženo kódu.

    Další informace o nová vylepšení jazyka Visual Basic 2005 navštivte následující Web společnosti Microsoft Developer Network (MSDN):Další informace o částečné třídy a Návrhář model Windows Forms naleznete na následujícím webu MSDN:Poznámka: Doporučuje se sbalíte region s názvem že Windows Form Designer s vygenerovaným kódem.
  4. Spusťte aplikaci.
  5. Spuštění programu Poznámkový blok klepněte jednou nebo vícekrát.
  6. Klepněte na instanci programu Poznámkový blok v okně Ovládací prvek ListView a vyberte Zavřít proces. Tímto tlačítkem ukončíte konkrétní instanci programu Poznámkový blok, který jste vybrali. Můžete také vybrat Zavřete všechny procesy zavřete všechny spuštěné instance aplikace Poznámkový blok.

Poznámky

Tento příklad používá vlastnost Id třídy proces rozlišovat mezi instancí aplikace. Vlastnost Id je vhodný kandidát pro tento úkol, protože všechny identifikátory procesu jsou jedinečné. Totéž platí WindowHandle vlastnosti, takže můžete také použít WindowHandle vlastnost proces objekt rozlišovat mezi instancí aplikace.


Další vlastnosti lze také, i když jsou méně vhodné k úkolu. Například pokud znáte Identifikátor procesu určitého procesu nebo mít popisovač hlavního okna, můžete použít vlastnost MainWindowTitle pomoci identifikovat správné instance. MainWindowTitle vlastnost nemusí být jedinečné, ale může pomoci izolovat požadované aplikace.

Ukázkové v tomto článku používá aplikace Windows a využívá CloseMainWindow metoda zavřete aplikaci. CloseMainWindow nefunguje s aplikací systému Windows. Není-li aplikaci, která se pokouší zavřít okno (například aplikace konzoly), musí použít Kill metoda zavřete aplikaci.

ODKAZY

Další informace naleznete následujícím webu Microsoft Developer Network (MSDN):
Vlastnosti

ID článku: 305602 - Poslední kontrola: 20. 1. 2017 - Revize: 1

Váš názor