Jak pomocí jazyka Visual Basic.NET nebo zavřete jiné aplikace Visual Basic 2005

Překlady článku Překlady článku
ID článku: 305602 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Souhrn

Tento článek popisuje, jak ukončit aplikaci v rámci aplikace. Popisuje také postup uzavření určité instance jiné aplikace, například programu Poznámkový blok, pokud více než jeden výskyt aplikace je spuštěna.

Diskuse o programování logiky

Deklarování proměnných

Několik proměnných je nutné definovat. Protože jsou tyto proměnné použít více metod, měly by se definovat mimo jakékoli řád tak, aby že zůstanou v oboru. Na proc proměnná obsahuje odkaz na objekt jednotlivých procesů a procesy je pole, které obsahuje proces objekty, které jsou vráceny na GetProcessByName Metoda:
Private proc As Process
Private processes() As Process
Private procName As String = "notepad"
				

Získat seznam instancí aplikace

Následující kód obsahuje funkci (nazvanou buildList ve vzorku), se nazývá každý čas novou instanci programu Poznámkový blok je vytvořen. Tento příklad uloží informace o procesu v Zobrazení ListView řízení; kód k naplnění Zobrazení ListView ovládací prvek je součástí pouze z důvodu konzistence s úplnou vzorek. Nejdůležitější součástí tohoto kódu je volání GetProcessByName Metoda Proces Třída. Tato metoda vrátí pole Proces objekty, které lze musí přes pomocí Pro...Každý blok takto:
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
				

Zavřete určité Instance aplikace

Při více instancí aplikace běží a Chcete zavřít jednu instanci, je nutné rozlišovat mezi těchto procesů. Na Po použití vzorku ID Vlastnost Proces objekt zjistit procesy, které jsou od sebe. Na ID Vlastnost a MainWindowTitle Vlastnosti (vlastnost jiného Proces objekt) jsou uloženy v Zobrazení ListView ovládací prvek. Kód získá zboží, které je aktuálně vybrán v na Zobrazení ListView řízení, získá odkaz na proces pomocí GetProcessById Metoda Proces Třída a zavře, které zpracovávají voláním CloseMainWindow Metoda takto:
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 relativně jednoduché. Mohou vás matice, která je vrácena GetProcessByName Metoda a volání CloseMainWindow Metoda na každém zpracování objektu, 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. Spuštění nové aplikace Windows jazyka Visual Basic v aplikaci Visual Studio.NET nebo Visual Studio 2005.
  2. Klepněte pravým tlačítkem myši na výchozí formulář, Form1.vb a vyberte Zobrazit kód.
  3. Nahradit kód, který je v okně kódu následující:
    Option Strict On
    Option 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í Visual Basic vytvoří dva soubory projektu při vytvoření model Windows Forms projekt. Pokud formulář pojmenován Formulář1, jsou dva soubory, které představují formuláře pojmenovaný 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. Na Návrhář model Windows Forms používá klíčové slovo částečné provádění rozdělení Formulář1 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í pro jazyk Visual Basic 2005 navštivte následující Webový server služby Microsoft Developer Network (MSDN):
    http://msdn.microsoft.com/en-us/library/ms379584 (VS.80) .aspx
    Další informace o částečné třídy a model Windows Forms Návrhář, naleznete na následujícím webu MSDN:
    http://msdn2.microsoft.com/en-us/library/ms171843.aspx
    Poznámka: Je vhodné, že sbalíte region s názvem Kód generovaný aplikací Windows Form Designer.
  4. Spuštění aplikace.
  5. Klepněte na tlačítko Spusťte program Poznámkový blok jednou nebo vícekrát.
  6. Klepněte na instanci programu Poznámkový blok v Zobrazení ListView okno řízení a vyberte Ukončit 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 programu Poznámkový blok.

Poznámky

V tomto příkladu ID Vlastnost Proces Třída rozlišovat mezi instancí aplikace. Na ID Vlastnost je vhodná pro tento úkol, protože všechny zpracovat ID 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 menší nebudou vhodné k úkolu. Například pokud neznáte ID procesu určitý proces nebo mají úchyt hlavního okna, můžete použít MainWindowTitle Vlastnost k identifikaci správného instance. Na MainWindowTitle Vlastnost nemůže být jedinečné, ale může pomoci izolovat požadované aplikace.

Vzorek v tomto článku používá Windows aplikace a zahrnuje CloseMainWindow Metoda aplikaci zavřete. CloseMainWindow nefunguje s aplikací systému Windows. Pokud aplikace že se snažíte zavřít okno (například konzoly nemá aplikace), je nutné použít Kill Metoda aplikaci zavřete.

ODKAZY

Další informace naleznete v následujících Microsoft Developer Webový server společnosti Network (MSDN):
Třída procesu
http://msdn.microsoft.com/en-us/library/System.Diagnostics.Process (VS.71) .aspx

Vlastnosti

ID článku: 305602 - Poslední aktualizace: 18. května 2011 - Revize: 4.0
Informace v tomto článku jsou určeny pro produkt:
Klíčová slova: 
kbvs2005swept kbvs2005applies kbhowtomaster kbmt KB305602 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:305602

Dejte nám zpětnou vazbu

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com