В настоящее время вы работаете в автономном режиме; ожидается повторное подключение к Интернету

Способы использования Visual Basic .NET или Visual Basic 2005 для закрытия другого приложения

ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.

Эта статья на английском языке:305602
Версии Microsoft Visual C++ .NET в данной статье содержатся в разделе307395.
Версия данной статьи для Microsoft Visual C# .NET:305603.
Версия данной статьи для Microsoft Visual Basic 6.0:176391.


Содержание


Аннотация
В данной статье описывается, как закрыть приложение из приложения. Также описывается способ закрытия определенным экземпляром другого приложения, например «Блокнот», если запущено несколько экземпляров приложения.

back to the top

Обсуждение логики программирования

Объявление переменных

Несколько переменных должны быть определены. Так как эти переменные используются в нескольких методов, они должны быть определены вне любой процедуры, таким образом, чтобы они оставались в области. надписьюпроцедурапеременная содержит ссылку на объект отдельных процессов ипроцессы— Это массив, содержащий обработки объектов, возвращенныхGetProcessByNameметод:
Private proc As ProcessPrivate processes() As ProcessPrivate procName As String = "notepad"				

Получить список экземпляров приложения

Следующий код содержит функцию (buildListв этом примере), вызывается каждый раз при создании нового экземпляра программы «Блокнот». В этом примере хранит сведения о процессе вListViewэлемент управления, код для заполненияListViewэлемент управления включается только для совместимости с полный пример. Наиболее важной частью этого кода является вызов методаGetProcessByNameметодПроцессКласс:. Этот метод возвращает массивПроцессобъекты, которые может быть выполнен по сравнению с помощьюДополнительные...Каждыйблок, как показано ниже:
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				

Закрыть специальный экземпляр приложения

Если работает несколько экземпляров приложения, и вы хотите закрыть один экземпляр, вы должны различие между этими процессами. Следующий пример используетID:СвойствоПроцессобъект, который сообщить процессов друг от друга. надписьюID:свойства и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				

Закройте все экземпляры приложения

Закрытие всех экземпляров определенного приложения достаточно прост. Может пройти, возвращаемый массив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				
back to the top

Создание проекта

  1. Запуск нового приложения Windows Visual Basic в Visual Studio .NET или Visual Studio 2005.
  2. Щелкните правой кнопкой мыши форму по умолчанию Form1.vb и выберите пунктПерейти к коду.
  3. Замените код в окно кода следующим:
    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 SubEnd Class					
    Примечание.Необходимо изменить код в Visual Basic 2005. По умолчанию Visual Basic создает два файла для проекта Windows Forms, созданный проект. Если форма называется Form1, двух файлов, которые представляют собой формы с именем Form1.vb и Form1.Designer.vb. Напишите код в файл Form1.vb. В конструкторе Windows Forms записывает код в файле Form1.Designer.vb. В конструкторе Windows Forms использует ключевое слово partial разделить на два отдельных файла реализации класса Form1. Это предотвращает коду, сгенерированному конструктором с перемежаются текстового блока кода.

    Для получения дополнительных сведений о новых улучшений языка Visual Basic 2005 посетите следующий веб-узел Microsoft Developer Network (MSDN):Дополнительные сведения о разделяемых классов Windows Forms Designer, посетите веб-узлу MSDN:Примечание.Рекомендуется, можно свернуть область под названиемКод автоматически созданный конструктором форм Windows.
  4. Запустите приложение.
  5. затем –Запустить «Блокнот».один или несколько раз.
  6. Выберите экземпляр «Блокнот» вListViewокно элемента управления, а затем выберитеЗакрытие процесса. При этом закрываются отдельный экземпляр блокнота, который выбран. Можно также выбратьЗакройте все процессыЧтобы закрыть все работающие экземпляры Блокнота.

Примечания

В этом примере используетсяID:СвойствоПроцесскласс для различия экземпляров приложения. надписьюID:свойство является хорошим кандидатом на эту задачу, поскольку все процесса идентификаторы должны быть уникальными. То же самое верно дляWindowHandleсвойство, поэтому можно также использоватьWindowHandleСвойствоПроцессобъект, чтобы различать экземпляры приложения.

Также можно использовать другие свойства, несмотря на то, что они менее подходят к задаче. Например, если вы не узнать идентификатор процесса для определенного процесса или дескриптор главного окна, можно использоватьMainWindowTitleсвойство для определения соответствующих экземпляров. надписьюMainWindowTitleсвойство не может быть уникальным, но он может помочь выделить необходимое приложение.

В примере в этой статье используются Windows приложение и используетCloseMainWindowметод, чтобы закрыть приложение.CloseMainWindowне работает с приложением, отличных от Windows. Если приложение, которое вы пытаетесь Закрытие окна (например, консольное приложение) не имеет, то следует использоватьУдалитьметод, чтобы закрыть приложение.

back to the top

Ссылки

Дополнительные сведения см. на веб-узле MSDN (Microsoft Developer Network) по следующему адресу::back to the top

Внимание! Эта статья переведена автоматически

Свойства

Номер статьи: 305602 — последний просмотр: 11/22/2010 07:37:00 — редакция: 2.0

Microsoft Visual Basic 2005, Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual Basic .NET 2002 Standard Edition

  • kbvs2005swept kbvs2005applies kbhowtomaster kbmt KB305602 KbMtru
Отзывы и предложения