Artikel ini menjelaskan cara untuk menutup aplikasi dari
dalam aplikasi. Ini juga menjelaskan bagaimana menutup contoh khusus dari
aplikasi lain, seperti Notepad, jika lebih dari satu contoh dari
aplikasi berjalan.
Diskusi tentang pemrograman logika
Menyatakan variabel
Beberapa variabel perlu didefinisikan. Karena variabel-variabel ini
digunakan dalam beberapa metode, mereka harus didefinisikan di luar dari setiap prosedur jadi
bahwa mereka tetap dalam lingkup. The
proc variabel memegang referensi ke objek proses individu, dan
proses adalah sebuah array yang memegang objek proses yang dikembalikan oleh
The
GetProcessByName metode:
Private proc As Process
Private processes() As Process
Private procName As String = "notepad"
Mendapatkan daftar contoh aplikasi
Kode berikut terdiri dari fungsi (disebut
buildList dalam sampel) yang disebut masing-masing waktu contoh baru dari Notepad
dibuat. Sampel ini menyimpan informasi proses di
ListView kontrol; kode untuk mengisi
ListView kontrol disertakan hanya untuk konsistensi dengan lengkap
sampel. Yang paling penting bagian dari kode ini adalah panggilan untuk
GetProcessByName metode
Proses kelas. Metode ini mengembalikan array
Proses benda-benda, yang dapat mengulangi oleh menggunakan
Untuk...
Setiap blok, sebagai berikut:
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
Menutup contoh khusus aplikasi
Ketika beberapa contoh dari aplikasi berjalan, dan Anda
ingin menutup satu contoh, Anda harus membedakan antara proses-proses tersebut. The
mengikuti contoh menggunakan
Id properti
Proses objek untuk memberitahu proses terpisah. The
Id properti dan
MainWindowTitle properti (properti lain dari
Proses objek) disimpan dalam
ListView kontrol. Kode memperoleh item yang dipilih dalam
The
ListView kontrol, mendapatkan referensi untuk proses dengan menggunakan
GetProcessById metode
Proses kelas, dan menutup yang memproses dengan menelepon
CloseMainWindow metode, sebagai berikut:
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
Tutup semua contoh dari aplikasi
Menutup semua contoh dari aplikasi tertentu adalah relatif
langsung. Anda dapat berjalan array yang dikembalikan oleh
GetProcessByName metode dan panggilan
CloseMainWindow metode pada setiap proses objek, sebagai berikut:
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
Langkah-langkah untuk membangun sampel
- Mulai Visual Basic Windows aplikasi baru di Visual
Studio.NET atau dalam Visual Studio 2005.
- Bentuk standar, Form1.vb, klik kanan dan pilih Lihat kode.
- Mengganti kode yang ada di dalam jendela kode dengan
berikut:
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
Catatan Anda harus mengubah kode pada Visual Basic 2005. Secara default, Visual
Dasar menciptakan dua file untuk proyek ketika Anda membuat Windows Forms
proyek. Jika bentuk bernama Form1, kedua file yang mewakili bentuk yang
bernama Form1.vb dan Form1.Designer.vb. Anda menulis kode dalam Form1.vb file.
Windows Forms Designer menulis kode dalam Form1.Designer.vb file. The
Windows Forms Designer menggunakan kata kunci parsial untuk membagi pelaksanaan
Form1 menjadi dua file terpisah. Perilaku ini mencegah desainer yang dihasilkan
kode dari yang diselingi dengan kode Anda.
Untuk informasi lebih lanjut
tentang baru Visual Basic 2005 bahasa tambahan, kunjungi berikut
Situs Web Microsoft Developer Network (MSDN): Untuk informasi lebih lanjut tentang kelas parsial dan Windows Forms
Desainer, kunjungi Website MSDN berikut: Catatan Dianjurkan bahwa Anda runtuh daerah yang diberi label Kode Windows Form Designer dihasilkan. - Menjalankan aplikasi.
- Klik Jalankan Notepad satu atau lebih kali.
- Klik contoh Notepad di ListView jendela kontrol dan pilih Tutup proses. Ini menutup contoh khusus dari Notepad yang Anda pilih.
Anda juga dapat memilih Tutup semua proses Tutup semua contoh menjalankan Notepad.
Catatan
Sampel ini menggunakan
Id properti
Proses kelas untuk membedakan antara contoh dari aplikasi. The
Id properti adalah calon yang baik untuk tugas ini karena semua proses
ID unik. Hal yang sama dari
WindowHandle properti, sehingga Anda juga dapat menggunakan
WindowHandle properti
Proses objek untuk membedakan antara contoh dari aplikasi.
Properti lainnya juga dapat digunakan, meskipun mereka kurang
cocok untuk tugas. Sebagai contoh, jika Anda tidak tahu proses ID
proses tertentu atau memiliki pegangan jendela utama, Anda dapat menggunakan
MainWindowTitle properti untuk membantu mengidentifikasi contoh yang tepat. The
MainWindowTitle properti mungkin tidak unik, tetapi dapat membantu Anda untuk mengisolasi
aplikasi yang diinginkan.
Contoh dalam artikel ini menggunakan Windows
aplikasi dan mempekerjakan
CloseMainWindow metode untuk menutup aplikasi.
CloseMainWindow tidak bekerja dengan aplikasi non-Windows. Jika aplikasi
bahwa Anda sedang berusaha untuk menutup tidak memiliki jendela (misalnya, konsol
aplikasi), Anda harus menggunakan
Membunuh metode untuk menutup aplikasi.
REFERENSI
Untuk selengkapnya, lihat Microsoft berikut pengembang
Situs Web Network (MSDN):
ID Artikel: 305602 - Kajian Terakhir: 24 September 2011 - Revisi: 2.0
Berlaku bagi:
- Microsoft Visual Basic 2005
- Microsoft Visual Basic .NET 2003 Standard Edition
- Microsoft Visual Basic .NET 2002 Standard Edition
| kbvs2005swept kbvs2005applies kbhowtomaster kbmt KB305602 KbMtid |
Penerjemahan MesinPENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:
305602
(http://support.microsoft.com/kb/305602/en-us/
)