Страница: 1 |
КАК снять ПРОЦЕСС, зная ТОЛЬКО путь к EXE_шнику? т.е. есть запущенная про-га (например Spider Guard от DrWeb или internat.exe) и хочется его снять...
Private Const MAX_PATH = 260 Private Function KillApp(myName As String) As Boolean Const TH32CS_SNAPPROCESS As Long = 2& uProcess.dwSize = Len(uProcess) Do While rProcessFound Private Sub Command1_Click() Работает! aka спасибо! Это просто та - для разнообразия: Тут на сайте, в библиотеке кодов был код по получению полного имени файла через его hwnd в процессе. Попробуй отсеивать процесс и сравнивать Страница: 1 |
Вопрос: Снять процесс, зная ТОЛЬКО путь к exe_шнику?
Добавлено: 22.12.02 06:33
Автор вопроса: Justas | Web-сайт:
Поиск окна (FindWindow) в этом случае непомогает, т.к. нету у него кэпшена. Вывожу список всех процессов (CreateToolhelpSnapshot, ProcessFirst, ProcessNext) и получаю путь к EXE_шнику и ещё много чего. В том числе и th32ProcessID.
Вопрос: КАК снять процесс вместе со всеми его нитями зная ТОЛЬКО путь к EXE_шнику или th32ProcessID?
Может у кого ни будь есть функция готовая, которая бы принимала в качестве аргумента путь к про-ге и снимала бы процесс?
Ответы
Всего ответов: 4
Номер ответа: 1
Автор ответа:
Ян
ICQ: 816105
Вопросов: 38
Ответов: 198
Web-сайт:
Профиль | | #1
Добавлено: 22.12.02 16:00
Недавна у меня тоже была такая проблема... Короче, перебирай манипуляторы всех окон верхнего уровня в системе (можешь и все от 0 до 10000, но долго будет) . Узнавай какому приложению принадлежит каждое окно. А далее, зная манипулятор окна, находи манипулятор процесса и убивай этот процесс. Вообщем-то ничего сложного.
Номер ответа: 2
Автор ответа:
aka
Вопросов: 2
Ответов: 60
Web-сайт:
Профиль | | #2
Добавлено: 23.12.02 01:57
Private Declare Function ProcessFirst Lib "kernel32" _
Alias "Process32First" (ByVal hSnapshot As Long, uProcess _
As PROCESSENTRY32) As Long
Private Declare Function ProcessNext Lib "kernel32" _
Alias "Process32Next" (ByVal hSnapshot As Long, uProcess As _
PROCESSENTRY32) As Long
Private Declare Function CreateToolhelpSnapshot Lib "kernel32" _
Alias "CreateToolhelp32Snapshot" (ByVal lFlags As Long, _
lProcessID As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject _
As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal _
dwDesiredAccess As Long, ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long
Private Declare Function TerminateProcess Lib "kernel32" _
(ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Type PROCESSENTRY32
dwSize As Long
cntUsage As Long
th32ProcessID As Long
th32DefaultHeapID As Long
th32ModuleID As Long
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
dwFlags As Long
szexeFile As String * MAX_PATH
End Type
Const PROCESS_ALL_ACCESS = 0
Dim uProcess As PROCESSENTRY32
Dim rProcessFound As Long
Dim hSnapshot As Long
Dim szExename As String
Dim exitCode As Long
Dim myProcess As Long
Dim AppKill As Boolean
Dim appCount As Integer
Dim i As Integer
On Local Error GoTo Finish
appCount = 0
hSnapshot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0&
rProcessFound = ProcessFirst(hSnapshot, uProcess)
i = InStr(1, uProcess.szexeFile, Chr(0))
szExename = LCase$(Left$(uProcess.szexeFile, i - 1))
If Right$(szExename, Len(myName)) = LCase$(myName) Then
KillApp = True
appCount = appCount + 1
myProcess = OpenProcess(PROCESS_ALL_ACCESS, False, uProcess.th32ProcessID)
AppKill = TerminateProcess(myProcess, exitCode)
Call CloseHandle(myProcess)
End If
rProcessFound = ProcessNext(hSnapshot, uProcess)
Loop
Call CloseHandle(hSnapshot)
Finish:
End Function
Call KillApp("C:\Windows\notepad.exe")
End Sub
Номер ответа: 3
Автор ответа:
Justas
ICQ: 259418212
Вопросов: 24
Ответов: 325
Web-сайт:
Профиль | | #3
Добавлено: 23.12.02 05:12
Номер ответа: 4
Автор ответа:
CaS
ICQ: 165551179
Вопросов: 10
Ответов: 124
Web-сайт:
Профиль | | #4
Добавлено: 23.12.02 15:07