Завершить процесс из диспетчера задач с помощью кода VB 6

Мне нужно примерно убить приложение, чтобы я мог получить фантомного подписчика этого приложения в моей базе данных (это не может быть получено путем закрытия приложения). Вручную, если мы убьем приложение из диспетчера задач, фантомный подписчик будет существовать. Теперь мне нужно сделать это автоматически в коде VB 6. Помощь! Спасибо.


person oliverwood    schedule 04.09.2009    source источник


Ответы (7)


Есть два пути:

  1. Отправьте WM_CLOSE целевому приложению, если у него есть окно (скрытое / видимое). «Завершить задачу» диспетчера задач использует этот метод. Большинство приложений обрабатывают WM_CLOSE и корректно завершают работу.

  2. Используйте TerminateProcess API для принудительного уничтожения - «Конечный процесс» диспетчера задач использует этот метод. Этот API насильно убивает процесс.

Пример можно найти здесь:

VB Helper: HowTo: немедленно завершить процесс

person swatkat    schedule 04.09.2009

Используйте vb6.0 TaskKill

Private Sub Command1_Click()
Shell "taskkill.exe /f /t /im Application.exe"
End Sub
person Asitha Yomal    schedule 17.05.2016

Вызовите ShellExecute с помощью команды TaskKill.

TASKKILL [/ S система [/ U имя пользователя [/ P [пароль]]]] {[/ FI фильтр] [/ PID processid | / IM imagename]} [/ T] [/ F]

Описание: этот инструмент используется для завершения задач по идентификатору процесса (PID) или имени образа.

person Preet Sangha    schedule 04.09.2009

Shell "taskkill.exe /f /t /im processname.exe"

Это заставляет (/f) завершить процесс с именем образа (/im) для processname.exe и всех дочерних процессов, которые были запущены им (/t). Возможно, вам не понадобятся все эти переключатели. Для получения дополнительной информации см. Справку по команде taskkill (введите в командной строке следующее):

taskkill/?
person raven    schedule 04.09.2009

Превосходный архив кода VB6 Карла Петерсона содержит высококачественный образец кода и полные пояснения с использованием как WM_CLOSE, так и TerminateProcess. Никаких заменителей не принимаю!

Одна ошибка, которую вы можете увидеть в большом количестве кода, заключается в том, что отправки WM_CLOSE на единственный дескриптор окна, который у вас есть, недостаточно - большинство приложений содержат множество окон. Ответ, реализованный в коде Карла: найдите все окна верхнего уровня, принадлежащие этому приложению, и отправьте сообщение каждому.

person MarkJ    schedule 04.09.2009

Вот мой код в vb6, чтобы убить процесс по имени

Меня устраивает

 Private Sub TerminateProcess(ProcessName As String)
        Dim Process As Object
        For Each Process In GetObject("winmgmts:").ExecQuery("Select Name from Win32_Process Where Name = '" & ProcessName & "'")
            Process.Terminate
        Next
End Sub
person Bùi Duy Phú    schedule 16.07.2019

Это делается внутренними способами VB6 ...

Private Declare Function GetCurrentProcessId Lib "kernel32" () As Long
Public Sub KillProcess(ByVal processName As String)
       Set oWMI = GetObject("winmgmts:")
       Set oServices = oWMI.InstancesOf("win32_process")
       For Each oService In oServices
           servicename = LCase(Trim(CStr(oService.Name) & ""))
           If InStr(1, servicename, LCase(processName), vbTextCompare) > 0 Then
              oService.Terminate
           End If
       Next
End Sub

... и просто используйте его следующим образом:

killProcess("notepad.exe")

Второй вариант: [от SHELL внешними способами ...]

Shell "taskkill.exe /f /t /im notepad.exe"
person PYK    schedule 04.05.2020