Visual Basic .NET veya Visual Basic 2005 başka bir uygulamayı kapatmak için nasıl kullanılır

Makale çevirileri Makale çevirileri
Makale numarası: 305602 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Bu Sayfada

Özet

Bu makalede, bir uygulama içinde bir uygulamadan kapatmak açıklamaktadır. Birden fazla örneğini bir uygulama çalışıyorsa, ayrıca başka bir uygulama, Notepad gibi belirli bir örneğini kapatın açıklar.

Programlama mantığının tartışma

Değişkenleri bildir.

Birçok değişken tanımlanması gerekir. Bu değişkenler, birden çok yöntemleri kullanıldığından, kapsam içinde kalırlar, bunların dışındaki herhangi bir yordamı tanımlanmalıdır. Yordam değişken bir <a0>tek tek bir işlem</a0> nesnesine bir başvuru içerir ve işlemlerGetProcessByName yöntemi tarafından döndürülen işlem nesnelerini tutan bir dizidir:
Private proc As Process
Private processes() As Process
Private procName As String = "notepad"
				

Uygulama örnekleri listesini edinin.

Aşağıdaki kodu Not Defteri'nde yeni bir örneğini her oluşturulduğunda çağrılan bir işlevi (buildList örnek denir) oluşur. Bu örnek, bir liste görünümü denetimi işlemi bilgileri saklar; yalnızca tutarlılığını tam örnek ile ListView denetimini doldurmak için kodu bulunur. En önemli bu kod <a0>işlem</a0> sınıfının GetProcessByName yöntemi çağrısı parçasıdır. Bu yöntem iterated işlem nesnelerinin bir dizisi döndürür bir for... kullanarak üzerinden her engellemek, aşağıdaki gibi:
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
				

Belirli bir uygulama örneği kapatın.

Uygulaması birden çok örneğini çalıştırıyorsanız ve bir örnek kapatmak istediğiniz zaman, bu işlemler arasında ayırt etmek gerekir. Aşağıdaki örnek, uzak işlemler bildirmek için işlem nesnesi <a1>kimlik</a1> özelliğini kullanır. Id özelliği ve MainWindowTitle özelliği (başka bir işlem nesnesi özelliği) ListView denetim içinde depolanır. ListView denetimde seçili olan işlem sınıfı GetProcessById yöntemini kullanarak bir referans işlemi için alır ve bu işlem gibi CloseMainWindow yöntemini ça??rarak kapatır maddenin kodunu alır:
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
				

Uygulama, tüm örneklerini kapatın.

Belirli bir uygulamanın tüm örneklerinin kapatılması göreli olarak basittir. Her işlem nesnesi üzerinde GetProcessByName yöntemi ve CloseMainWindow yöntemi çağrısı tarafından aşağıdaki gibi döndürülür dizinin konusunda sizi yönlendiren:
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
				

Örnek oluşturma adımları

  1. Yeni bir Visual Basic Windows uygulaması Visual Studio 2005 veya Visual Studio. NET'i başlatın.
  2. Form1.vb, varsayılan formun'ı sağ tıklatın ve Görünüm kodu seçin.
  3. Aşağıdaki kod penceresinde kodunu değiştir:
    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
    					
    Not Visual Basic 2005 kodunu değiştirmeniz gerekir. Bir Windows Forms oluşturduğunuzda, varsayılan olarak, Visual Basic projesinin iki dosya oluşturur... proje. Formun adı Form1 verilirse, formun temsil eden iki dosya Form1.vb ve Form1.Designer.vb olarak adlandırılır. Kodu, Form1.vb dosyasında yazın. Windows Forms Designer kod Form1.Designer.vb dosyaya yazar. Windows Forms Designer kısmi anahtar Form1 uygulamasının iki ayrı dosyaya bölmek için kullanır. Bu davranış, kodunuzu interspersed designer tarafından üretilen kod engeller.

    Yeni Visual Basic 2005 dil geliştirmeleri hakkında daha fazla bilgi için aşağıdaki Microsoft Developer Network (MSDN) Web sitesini ziyaret edin:
    http://msdn.microsoft.com/en-us/library/ms379584(VS.80).aspx
    Kısmi sınıfları ve Windows formları hakkında daha fazla bilgi için Tasarımcısı aşağıdaki MSDN Web sitesini ziyaret edin:
    http://msdn2.microsoft.com/en-us/library/ms171843.aspx
    NotWindows Form Designer tarafından üretilen kod etiketli bölge daraltma önerilir.
  4. Uygulamayı çalıştırın.
  5. Not Defteri'ni Başlat bir veya birkaç kez tıklatın.
  6. Liste görünümü denetimi penceresinde bir not defteri'ni tıklatın ve Close işlemi seçin. Bu, belirli bir kopya seçtiğiniz bir not defteri kapatır. Tüm çalışan örneklerini Not Defteri'ni kapatmak için Kapat, tüm işlemler de seçebilirsiniz.

NOTLAR

Bu örnek, işlem sınıfı ıd özelliği, uygulama örnekleri arasında ayırt etmek için kullanır. ıd özelliği bu görev için iyi bir aday çünkü tüm kimlikler işlemi benzersizdir. Uygulama örnekleri arasında ayırt etmek için bir <a0>işlem</a0> nesnesinin WindowHandle özelliğini de kullanabilirsiniz; böylece WindowHandle özelliğini, aynı geçerlidir.

Bunlar göreve daha az uygun olmasına karşın diğer özellikleri de kullanılabilir. Örneğin, belirli bir işlemin işlem KIMLIĞI'ni bilmiyorsanız veya ana penceresinin işleyicisi olan, MainWindowTitle özelliği doğru örnek belirlemek için kullanabilirsiniz. MainWindowTitle özelliği benzersiz olabilir, ancak istenen uygulama yalıtmak için yardımcı olabilir.

Bu makaledeki örnek Windows kullanan uygulama ve uygulamayı kapatmak için CloseMainWindow yöntemini kullanır. CloseMainWindow Windows olmayan bir uygulama ile çalışmaz. Uygulamayı kapatmaya çalışıyorsunuz, pencere (örneğin, bir konsol uygulaması) yoksa, uygulamayı kapatmak için kill yöntemini kullanmanız gerekir.

Başvurular

Daha fazla bilgi için bkz:, aşağıdaki Microsoft Developer Network (MSDN) Web sitesi:
Işlem sınıfı
http://msdn.microsoft.com/en-us/library/system.diagnostics.process(VS.71).aspx

Özellikler

Makale numarası: 305602 - Last Review: 29 Mart 2007 Perşembe - Gözden geçirme: 2.7
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
Anahtar Kelimeler: 
kbmt kbvs2005swept kbvs2005applies kbhowtomaster KB305602 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:305602

Geri Bildirim Ver

 

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