วิธีการใช้ Visual Basic .NET หรือ Visual Basic 2005 เพื่อปิดโปรแกรมประยุกต์อื่น

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 305602 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
ขยายทั้งหมด | ยุบทั้งหมด

เนื้อหาบนหน้านี้

สรุป

บทความนี้อธิบายวิธีการปิดโปรแกรมประยุกต์จากภายในโปรแกรมประยุกต์ ได้นอกจากนี้ยังอธิบายวิธีการปิดอินสแตนซ์ที่เฉพาะของโปรแกรมประยุกต์อื่น เช่น Notepad ถ้าอินสแตนซ์หนึ่งของโปรแกรมประยุกต์ที่กำลังทำงาน

การสนทนาของตรรกะการเขียนโปรแกรม

กำหนดตัวแปร

ตัวแปรต่าง ๆ ที่จำเป็นต้องมีการกำหนด เนื่องจากตัวแปรเหล่านี้จะใช้ในหลายวิธี เหล่านั้นควรมีกำหนดภายนอกของกระบวนการใด ๆ เพื่อให้พวกเขายังคงอยู่ในขอบเขต กระบวนการprocตัวแปรที่มีการอ้างอิงถึงวัตถุกระบวนการแต่ละ และกระบวนการเป็นอาร์เรย์ที่มีวัตถุของกระบวนการที่ส่งคืนโดยGetProcessByNameวิธีการ:
Private proc As Process
Private processes() As Process
Private procName As String = "notepad"
				

ดูรายการของอินสแตนซ์ของแอพลิเคชัน

ฟังก์ชัน (เรียกว่าการประกอบด้วยรหัสต่อไปนี้buildListในตัวอย่าง) ที่จะเรียกว่าแต่ละครั้งที่มีสร้างอินสแตนท์ใหม่ของแผ่นจดบันทึก ตัวอย่างนี้เก็บข้อมูลขั้นตอนในตัวListViewรหัสการเติมข้อมูล การควบคุมนี้ListViewตัวควบคุมจะรวมสำหรับความสอดคล้องกับตัวอย่างสมบูรณ์เท่านั้น ส่วนที่สำคัญที่สุดของรหัสนี้มีการเรียกไปGetProcessByNameวิธีการนี้กระบวนการคลาสที่ วิธีนี้ส่งกลับอาร์เรย์ของกระบวนการวัตถุ ซึ่ง iterated ผ่าน โดยใช้ตัวสำหรับ...แต่ละบล็อก เป็นดังนี้:
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
				

ปิดตัวอย่างแอพลิเคชันมีการระบุ

แยกความแตกเมื่อรันอินสแตนซ์หลายอินสแตนซ์ของโปรแกรมประยุกต์ และคุณต้องการปิดอินสแตนซ์ที่หนึ่ง คุณต้องต่างระหว่างกระบวนการเหล่านั้น ต่อไปนี้การใช้ตัวอย่างนี้หมายเลขคุณสมบัตินี้กระบวนการวัตถุเพื่อบอกกระบวน apart กระบวนการหมายเลขคุณสมบัติและMainWindowTitleคุณสมบัติ (คุณสมบัติอื่นของกระบวนการวัตถุ) จะถูกเก็บไว้ในนั้นListViewตัวควบคุม รหัสการขอรับสินค้าที่เลือกไว้ในนั้นListViewควบคุมการ การอ้างอิงถึงกระบวนการขอรับ โดยใช้การGetProcessByIdวิธีการนี้กระบวนการคลา และปิดที่ประมวลผล โดยการเรียกCloseMainWindowวิธี ดัง:
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
				

ปิดอินสแตนซ์ทั้งหมดของแอพลิเคชันมี

การปิดอินสแตนซ์ทั้งหมดของโปรแกรมประยุกต์เฉพาะที่จะค่อนข้าง straightforward คุณสามารถนำแถวลำดับที่ถูกส่งกลับโดยGetProcessByNameวิธีการและการเรียกCloseMainWindowวิธีการในแต่ละดำเนินการ วัตถุต่อไปนี้:
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
				

ขั้นตอนในการสร้างตัวอย่างนี้

  1. Start a new Visual Basic Windows application in Visual Studio .NET or in Visual Studio 2005.
  2. Right-click the default form, Form1.vb, and selectรหัสของมุมมอง.
  3. Replace the code that is in the code window with the following:
    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
    					
    หมายเหตุ:You must change the code in Visual Basic 2005. By default, Visual Basic creates two files for the project when you create a Windows Forms project. If the form is named Form1, the two files that represent the form are named Form1.vb and Form1.Designer.vb. You write the code in the Form1.vb file. The Windows Forms Designer writes the code in the Form1.Designer.vb file. The Windows Forms Designer uses the partial keyword to divide the implementation of Form1 into two separate files. This behavior prevents the designer-generated code from being interspersed with your code.

    For more information about the new Visual Basic 2005 language enhancements, visit the following Microsoft Developer Network (MSDN) Web site:
    http://msdn.microsoft.com/en-us/library/ms379584(VS.80).aspx
    For more information about partial classes and the Windows Forms Designer, visit the following MSDN Web site:
    http://msdn2.microsoft.com/en-us/library/ms171843.aspx
    หมายเหตุ:It is recommended that you collapse the region that is labeledWindows Form Designer generated code.
  4. เรียกใช้โปรแกรมประยุกต์
  5. คลิกStart Notepadone or more times.
  6. Click an instance of Notepad in theListViewcontrol window and selectClose Process. This closes the specific instance of Notepad that you selected. You can also selectClose All Processesto close all of the running instances of Notepad.

หมายเหตุ

ตัวอย่างนี้ใช้นั้นIdคุณสมบัตินี้กระบวนการclass to differentiate between instances of the application. กระบวนการIdproperty is a good candidate for this task because all process IDs are unique. The same is true of theWindowHandleproperty, so you can also use theWindowHandleคุณสมบัติของคำกระบวนการobject to differentiate between instances of the application.

Other properties can also be used, although they are less well-suited to the task. For example, if you do not know the process ID of a specific process or have the handle of the main window, you can use theMainWindowTitleproperty to help identify the proper instance. กระบวนการMainWindowTitleproperty may not be unique, but it can help you to isolate the desired application.

The sample in this article uses a Windows application and employs theCloseMainWindowmethod to close the application.CloseMainWindowdoes not work with a non-Windows application. If the application that you are attempting to close does not have a window (for example, a console application), you must use theทำลายmethod to close the application.

อ้างอิง:

For more information, see the following Microsoft Developer Network (MSDN) Web site:
Process Class
.aspx http://msdn.microsoft.com/en-us/library/system.diagnostics.process (VS.71)

คุณสมบัติ

หมายเลขบทความ (Article ID): 305602 - รีวิวครั้งสุดท้าย: 10 มกราคม 2554 - Revision: 2.0
ใช้กับ
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
Keywords: 
kbvs2005swept kbvs2005applies kbhowtomaster kbmt KB305602 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:305602

ให้ข้อเสนอแนะ

 

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