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

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


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


Ответы (7)


arrow_upward
7
arrow_downward

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

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

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

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

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

person swatkat    schedule 04.09.2009

arrow_upward
5
arrow_downward

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

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

arrow_upward
3
arrow_downward

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

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

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

person Preet Sangha    schedule 04.09.2009

arrow_upward
2
arrow_downward

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

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

taskkill/?
person raven    schedule 04.09.2009

arrow_upward
1
arrow_downward

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

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

person MarkJ    schedule 04.09.2009

arrow_upward
0
arrow_downward

Вот мой код в 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

arrow_upward
0
arrow_downward

Это делается внутренними способами 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