Как закрыть программу из Visual basic?

3 ноября 2014 г. Просмотров: 1106
Гибкий и мощный язык программирования Visual Basic .NET, являясь одним из специально созданных средств разработки приложений для платформы Microsoft .NET, позволяет полностью использовать все ее возможности. В частности, компоненты пространства имен System.Diagnostics позволяют осуществлять взаимодействие с процессами, журналами событий и счетчиками производительности. Например, можно закрыть программу из Visual Basic, используя класс Process.

Вам понадобится

  • - Microsoft Visual Studio.

Инструкция

  • Импортируйте пространства имен System, System.Diagnostics и System.Threading. В начало модуля добавьте следующие строки кода:Imports SystemImports System.DiagnosticsImports System.ThreadingЭто нужно просто для удобства использования компонентов, относящихся к данным пространствам имен.
  • Получите данные процесса, который необходимо закрыть. Используйте объект класса System.Diagnostics.Process. Объявите переменную данного класса:Dim oProc As Process Затем используйте какой-либо метод для нахождения необходимого процесса.
  • Если программа, которую в дальнейшем необходимо будет закрывать, запускается разрабатываемым приложением, то просто сохраните объект, возвращаемый методом Start при запуске:oProc = Process.Start("app.exe")
  • Если необходимо закрыть процесс с известным идентификатором, используйте статический метод GetProcessById класса Process для получения соответствующего объекта:oProc = Process.GetProcessById(nID)Здесь nID – числовой идентификатор процесса.
  • Если известны только некоторые характеристики целевого процесса, произведите его поиск. Получите список процессов, запущенных на локальной машине, в виде массива объектов класса Process. Используйте методы GetProcesses (возвращает все процессы) или GetProcessesByName (только процессы с заданным именем):Dim aoAllProcesses As Process() = Process.GetProcesses()Dim aoProcsByName As Process() = Process.GetProcessesByName("app.exe")Перечислите объекты массива при помощи цикла:Dim oProc As ProcessFor Each oProc In aoAllProcesses' действия над oProcNextВ цикле анализируйте свойства MainModule, MainWindowTitle, ProcessName, и т.д. для нахождения нужного объекта.
  • Попытайтесь завершить программу при помощи отсылки сообщения закрытия ее главному окну. Вызовите метод CloseMainWindow объекта, соответствующего целевому процессу. При необходимости произведите ожидание завершения приложения путем вызова WaitForExit, например:oProc.CloseMainWindow()oProc.WaitForExit()Данный метод не гарантирует завершения программы, поскольку сообщение закрытия окна часто обрабатывается и может быть проигнорировано.
  • При необходимости гарантированного завершения программы после вызова CloseMainWindow осуществите ожидание в течение небольшого промежутка времени. Используйте метод Sleep класса Thread. Затем проверьте состояние процесса, проанализировав свойство HasExited и, если он не завершен, вызовите метод Kill:Thread.Sleep(6000)oProc.Refresh()If not oProc.HasExited Then oProc.Kill()End IfПри желании можно осуществлять опрос состояния процесса в цикле, выдавая периодические запросы пользователю о необходимости завершения приложения без сохранения данных. И только в случае согласия вызвать Kill.
  • Освободите системные ресурсы после завершения программы при помощи метода Close:oProc.Close()
  • Для того чтобы избежать непредвиденных ошибок во время исполнения приложения, поместите весь алгоритм закрытия программы в блок Try-Catch-End Try. При необходимости реализуйте полноценную обработку исключений с выводом диагностических сообщений.
  • Оцените статью!