Выложите рабочий примерчик с TerminateProcess.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Maitris
Постоялец
Постоялец
 
Сообщения: 656
Зарегистрирован: 02.03.2005 (Ср) 21:00
Откуда: Из другой цивилизации.

Выложите рабочий примерчик с TerminateProcess.

Сообщение Maitris » 12.03.2005 (Сб) 14:44

Полный, рабочий. Чтобы выкидывал все процессы к примеру под именем iexplore.exe.
Желательно без всяких там PID`ов и т.д.
Только не отсылайте меня в поиск! Все обыскал, но реально готового примера нету!
----

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 12.03.2005 (Сб) 14:50

уже когда-то выкладывал... но если поиск ни-ни, то...
Вложения
Список запущенных процессов.zip
(2.01 Кб) Скачиваний: 221

Maitris
Постоялец
Постоялец
 
Сообщения: 656
Зарегистрирован: 02.03.2005 (Ср) 21:00
Откуда: Из другой цивилизации.

Сообщение Maitris » 12.03.2005 (Сб) 15:10

Точно рабочий? :) На NT системах тоже идет?
А с комментариями не найдется?
----

Maitris
Постоялец
Постоялец
 
Сообщения: 656
Зарегистрирован: 02.03.2005 (Ср) 21:00
Откуда: Из другой цивилизации.

Сообщение Maitris » 12.03.2005 (Сб) 15:16

Проверил, не работает. У меня xp. Ни один процесс не завершает.
----

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 12.03.2005 (Сб) 15:26

привет, у меня что? у меня xp и всё ок.
слушай, а может ты вошёл в ОС не под админом?
просто я не знаю как себя тогда ведёт программа

Maitris
Постоялец
Постоялец
 
Сообщения: 656
Зарегистрирован: 02.03.2005 (Ср) 21:00
Откуда: Из другой цивилизации.

Сообщение Maitris » 12.03.2005 (Сб) 15:32

Сорри, не так запустил :). Вот.
Но она завершает только простые процессы. А системные нет. Почему?
----

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 12.03.2005 (Сб) 15:43

может сис. процессы защещены таким-то образом - я точно не знаю...
спроси у кого-то по-мудрее..

Maitris
Постоялец
Постоялец
 
Сообщения: 656
Зарегистрирован: 02.03.2005 (Ср) 21:00
Откуда: Из другой цивилизации.

Сообщение Maitris » 12.03.2005 (Сб) 15:48

Хочу чтобы можно было написать :) :

Код: Выделить всё

Private Sub КикниСебя_Click()
TerminateProcess "explorer.exe"
TerminateProcess "winlogon.exe"
Msgbox "Гутбай!.."
End Sub


Ну эт я к примеру...

Так вот, какие декларации нужны для этого?
----

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 12.03.2005 (Сб) 15:51

странно... у меня программа "убивает" explorer
но.. когда завершаю программу, то explorer загружается заново.
чудеса...

Maitris
Постоялец
Постоялец
 
Сообщения: 656
Зарегистрирован: 02.03.2005 (Ср) 21:00
Откуда: Из другой цивилизации.

Сообщение Maitris » 12.03.2005 (Сб) 15:56

У меня тоже.. Это ж Restart Explorer if it crashes. Его то кидает, а вот ВинЛогон не хочет :). Да и вообще, многие процессы не может завершить. Интересно почему...
----

Maitris
Постоялец
Постоялец
 
Сообщения: 656
Зарегистрирован: 02.03.2005 (Ср) 21:00
Откуда: Из другой цивилизации.

Сообщение Maitris » 12.03.2005 (Сб) 16:17

Короче кто знает как по имени завершить системный процесс на всех окошках?
----

GM
programador
programador
 
Сообщения: 1427
Зарегистрирован: 24.06.2003 (Вт) 15:56
Откуда: 194.67.52.100

Сообщение GM » 12.03.2005 (Сб) 17:22

мoжет сис. процессы защещены таким-то образом - я точно не знаю...
спроси у кого-то по-мудрее..

Для завершения процессов такого ранга нужно присвоить себе Debug привелегии, так например делает TaskManager.
Сразу отвечаю на второй вопрос, а как присвоить себе привелегии, а вот так:
Код: Выделить всё
Option Explicit
Private Declare Function LookupPrivilegeValue Lib "advapi32.dll" _
    Alias "LookupPrivilegeValueA" ( _
    ByVal lpSystemName As String, _
    ByVal lpName As String, _
    lpLuid As LUID) As Long

Private Declare Function OpenProcessToken Lib "advapi32.dll" ( _
    ByVal ProcessHandle As Long, _
    ByVal DesiredAccess As Long, _
    ByRef TokenHandle As Long) As Long

Private Declare Function GetLastError Lib "kernel32.dll" () As Long
Private Declare Function GetCurrentProcess Lib "kernel32.dll" () As Long
Private Const MAX_PATH As Long = 260
Private Const SE_DEBUG_NAME As String = "SeDebugPrivilege"

Private Const TOKEN_ADJUST_PRIVILEGES As Long = &H20
Private Const TOKEN_QUERY As Long = &H8
Private Const SE_PRIVILEGE_ENABLED As Long = &H2
Private Type LUID
    LowPart As Long
    HighPart As Long
End Type

Private Type LUID_AND_ATTRIBUTES
    pLuid As LUID
    Attributes As Long
End Type

Private Type TOKEN_PRIVILEGES
    PrivilegeCount As Long
    TheLuid As LUID
    Attributes As Long
End Type
Private Declare Function AdjustTokenPrivileges Lib "advapi32.dll" ( _
    ByVal TokenHandle As Long, _
    ByVal DisableAllPrivileges As Long, _
    ByRef NewState As TOKEN_PRIVILEGES, _
    ByVal BufferLength As Long, _
    ByRef PreviousState As TOKEN_PRIVILEGES, _
    ByRef ReturnLength As Long) As Long


Function LoadPrivilege(ByVal Privilege As String) As Boolean

Dim hToken As Long
Dim SEDebugNameValue As LUID
Dim tkp As TOKEN_PRIVILEGES
Dim hProcessHandle As Long
Dim tkpNewButIgnored As TOKEN_PRIVILEGES
Dim lbuffer As Long

hProcessHandle = GetCurrentProcess()
If GetLastError <> 0 Then
   
    Call MsgBox("Ошибка!")
    Exit Function
End If

OpenProcessToken hProcessHandle, (TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY), hToken
If GetLastError <> 0 Then
    Call MsgBox("Ошибка!")
    Exit Function
End If

LookupPrivilegeValue "", Privilege, SEDebugNameValue
If GetLastError <> 0 Then
    Call MsgBox("Ошибка!")
    Exit Function
End If

With tkp
    .PrivilegeCount = 1
    .TheLuid = SEDebugNameValue
    .Attributes = SE_PRIVILEGE_ENABLED
End With

AdjustTokenPrivileges hToken, False, tkp, Len(tkp), tkpNewButIgnored, lbuffer
If GetLastError <> 0 Then
Call MsgBox("Ошибка!")
   
    Exit Function
End If
   
LoadPrivilege = True

End Function

Private Sub Form_Load()
Call LoadPrivilege(SE_DEBUG_NAME)
End Sub

ЗЫ Не завершай Winlogon, ничего хорошего кроме синего экрана не будет , так что Msgbox "Гутбай!.." ты не увидеш :)
الفيجوال بيسك الرابح

Maitris
Постоялец
Постоялец
 
Сообщения: 656
Зарегистрирован: 02.03.2005 (Ср) 21:00
Откуда: Из другой цивилизации.

Сообщение Maitris » 12.03.2005 (Сб) 21:03

GM Круто, если конечно работает, попробую щас...
----

Maitris
Постоялец
Постоялец
 
Сообщения: 656
Зарегистрирован: 02.03.2005 (Ср) 21:00
Откуда: Из другой цивилизации.

Сообщение Maitris » 12.03.2005 (Сб) 21:05

GMЕсли не в напряг то ответь сразу и на первый вопрос, т.е. как завершить процесс зная его имя и уже имея отладочные привелегии :P
----

Maitris
Постоялец
Постоялец
 
Сообщения: 656
Зарегистрирован: 02.03.2005 (Ср) 21:00
Откуда: Из другой цивилизации.

Сообщение Maitris » 12.03.2005 (Сб) 21:12

А тот код можно передалать так:
Код: Выделить всё

Private Sub Пни_меня_Click()
Msgbox "Goodbye my dear user!"
TerminateProcess "explorer.exe"
TerminateProcess "winlogon.exe"
End Sub
----

Maitris
Постоялец
Постоялец
 
Сообщения: 656
Зарегистрирован: 02.03.2005 (Ср) 21:00
Откуда: Из другой цивилизации.

Сообщение Maitris » 12.03.2005 (Сб) 23:31

GM
Угу, все работает, хе хе, проверил на svchost`e... Дали 50 сек. на упаковку чемоданов :)

Лады, GM, все конечно хорошо, но как это встроить в свою прогу?
Мне интерфейс не нужен, надо завершить конкретные процессы.
Как я понял, просто написать типа TerminateProcess "explorer.exe" нельзя? Надо сначала узнать его id?
Так вот как в твоем коде узнать Id по имени процесса? И потом по этому ID снять процесс?

Может кто-нить прокомментирует этот код? Или есть другой с комментариями у кого-нить?
----

GM
programador
programador
 
Сообщения: 1427
Зарегистрирован: 24.06.2003 (Вт) 15:56
Откуда: 194.67.52.100

Сообщение GM » 13.03.2005 (Вс) 7:46

Так все просто, сначала узнаеш PID процесса, например с помощью
Код: Выделить всё
Const TH32CS_SNAPHEAPLIST = &H1
Const TH32CS_SNAPPROCESS = &H2
Const TH32CS_SNAPTHREAD = &H4
Const TH32CS_SNAPMODULE = &H8
Const TH32CS_SNAPALL = (TH32CS_SNAPHEAPLIST Or TH32CS_SNAPPROCESS Or TH32CS_SNAPTHREAD Or TH32CS_SNAPMODULE)
Const TH32CS_INHERIT = &H80000000
Const MAX_PATH As Integer = 260
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
Private Declare Function CreateToolhelp32Snapshot Lib "Kernel32" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long
Private Declare Function Process32First Lib "Kernel32" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function Process32Next Lib "Kernel32" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Sub CloseHandle Lib "Kernel32" (ByVal hPass As Long)
Private Function GetProcessPID(filename as string) as long
   
    Dim hSnapShot As Long, uProcess As PROCESSENTRY32

    hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0&)

    uProcess.dwSize = Len(uProcess)
 
    r = Process32First(hSnapShot, uProcess)
    'set graphics mode to persistent
    Me.AutoRedraw = True
    Do While r
       if Left$(uProcess.szExeFile, IIf(InStr(1, uProcess.szExeFile, Chr$(0)) > 0, InStr(1, uProcess.szExeFile, Chr$(0)) - 1, 0))= sProcess then
GetProcessbyPID = uprocess.th32ProcessID
exit do
end if

        r = Process32Next(hSnapShot, uProcess)
    Loop
   
    CloseHandle hSnapShot
End Sub

Далее TerminateProcess:
Код: Выделить всё
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
sub main()
dim hProcess
hProcess = OpenProcess(PROCESS_TERMINATE, 0, getprocesspid("svchost.exe"))
call terminatecprocess(hprocess,0)
end sub
الفيجوال بيسك الرابح

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 13.03.2005 (Вс) 8:14

Напоминаю, что объект "Процесс" будет существовать до тех пор, пока существует хоть один handle к нему :) Поэтому после terminateprocess нужно closehandle всё равно.
И не помешала бы проверка - а удалось ли открыть процесс с правом PROCESS_TERMINATE :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

GM
programador
programador
 
Сообщения: 1427
Зарегистрирован: 24.06.2003 (Вт) 15:56
Откуда: 194.67.52.100

Сообщение GM » 13.03.2005 (Вс) 8:22

[quote]
Поэтому после terminateprocess нужно closehandle всё равно.
[quote]
А я то думал не обязательно.
Вот переделанный код:
Код: Выделить всё
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
sub main()
dim hProcess as long
hProcess = OpenProcess(PROCESS_TERMINATE, 0,getprocesspid("svchost.exe"))
if hprocess > 0 then
call terminatecprocess(hprocess,0)
closehandle hprocess
else
msgbox ("Нет доступа :(")
end if
end sub
الفيجوال بيسك الرابح

zHackLeX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 23.10.2003 (Чт) 21:08

Сообщение zHackLeX » 13.03.2005 (Вс) 13:15

Хотите сказать, что вы этим снимите winlogon, который даже таскменеджер не берёт?
There is no knowledge that is not power...

X,C,A,B,C,Z,X,A,B,C,Z....
Многие ли помнят? :)

Maitris
Постоялец
Постоялец
 
Сообщения: 656
Зарегистрирован: 02.03.2005 (Ср) 21:00
Откуда: Из другой цивилизации.

Сообщение Maitris » 13.03.2005 (Вс) 14:29

GM
Thanks. Только вот еще вопрос, какая разница, если удалось - хорошо, а если нет - то какая уже разница? :) Не второй раз же пытаться...
----

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 13.03.2005 (Вс) 14:29

А при чём здесь таскменеджер?
Он не даёт его убивать не потому что не может, а потому что ты этого не хочешь, и он это знает. Единственное возможное последствие убийства winlogоn-а - немедленный BSOD.
Последний раз редактировалось tyomitch 13.03.2005 (Вс) 14:30, всего редактировалось 1 раз.
Изображение

Maitris
Постоялец
Постоялец
 
Сообщения: 656
Зарегистрирован: 02.03.2005 (Ср) 21:00
Откуда: Из другой цивилизации.

Сообщение Maitris » 13.03.2005 (Вс) 14:30

zHackLeX Угу, любой - любой процесс так можно. Проверено 8)
----

Maitris
Постоялец
Постоялец
 
Сообщения: 656
Зарегистрирован: 02.03.2005 (Ср) 21:00
Откуда: Из другой цивилизации.

Сообщение Maitris » 13.03.2005 (Вс) 14:31

tyomitch Вот-вот, я назовусь winlogon.exe и меня уже никто не закроет
----

Maitris
Постоялец
Постоялец
 
Сообщения: 656
Зарегистрирован: 02.03.2005 (Ср) 21:00
Откуда: Из другой цивилизации.

Сообщение Maitris » 13.03.2005 (Вс) 21:55

GM Блин, не стыкуются два куска никак :evil: Вроде все как надо переписал... Чего-то определенно не хватает.
Пишет что PROCESS_TERMINATE переменная не определена.

Переклепал так:

Код: Выделить всё
Option Explicit

Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Const TH32CS_SNAPHEAPLIST = &H1
Const TH32CS_SNAPPROCESS = &H2
Const TH32CS_SNAPTHREAD = &H4
Const TH32CS_SNAPMODULE = &H8
Const TH32CS_SNAPALL = (TH32CS_SNAPHEAPLIST Or TH32CS_SNAPPROCESS Or TH32CS_SNAPTHREAD Or TH32CS_SNAPMODULE)
Const TH32CS_INHERIT = &H80000000
Const MAX_PATH As Integer = 260
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
Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long
Private Declare Function Process32First Lib "kernel32" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function Process32Next Lib "kernel32" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long

Private Function GetProcessPID(filename As String) As Long
   
    Dim hSnapShot As Long, uProcess As PROCESSENTRY32
 
    hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0&)

    uProcess.dwSize = Len(uProcess)
 
    r = Process32First(hSnapShot, uProcess)
    'set graphics mode to persistent
    Me.AutoRedraw = True
    Do While r
       If Left$(uProcess.szExeFile, IIf(InStr(1, uProcess.szExeFile, Chr$(0)) > 0, InStr(1, uProcess.szExeFile, Chr$(0)) - 1, 0)) = sProcess Then
GetProcessbyPID = uProcess.th32ProcessID
Exit Do
End If

        r = Process32Next(hSnapShot, uProcess)
    Loop
   
    CloseHandle hSnapShot


Private Sub Form_Load()
Dim hProcess
hProcess = OpenProcess(PROCESS_TERMINATE, 0, GetProcessPID("svchost.exe"))
Call terminatecprocess(hProcess, 0)
End Sub


Убрал Option Exlicit, стало писать
Private Sub Form_Load() - OpenProcess - "sub or function not defined"...
----

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 13.03.2005 (Вс) 22:12

2 Maitris

Код: Выделить всё
Private Function GetProcessPID(filename As String) As Long


Ну а где здесь End Function?
Забыл? :twisted:

Maitris
Постоялец
Постоялец
 
Сообщения: 656
Зарегистрирован: 02.03.2005 (Ср) 21:00
Откуда: Из другой цивилизации.

Сообщение Maitris » 13.03.2005 (Вс) 22:31

BV
Добавил... То же самое... Ну не доходит блин...
Яж конкретный примерчик просил, который к примеру на Form Load убивает svchost...

А это какая-то для меня кодовая каша :)

Хорошо, если декларации такие:

Код: Выделить всё


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 * 260
End Type
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 Declare Function CreateToolhelpSnapshot Lib "kernel32" Alias "CreateToolhelp32Snapshot" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long
Private Declare Function Process32First Lib "kernel32" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function Process32Next Lib "kernel32" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Sub CloseHandle Lib "kernel32" (ByVal hPass As Long)


то как надо переделать эту строку:

Код: Выделить всё

    Dim hProcess As Long
    hProcess = OpenProcess(.......)
    TerminateProcess hProcess, 0

для того чтобы она выгружала svchost.exe?
----

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 14.03.2005 (Пн) 15:26

Вот тут набросал кое-что... Поправь, если что, и вперёд за мануалом по VB :!:

P.S.
Пример я проверял на правах Администратора.

Код: Выделить всё
'В модуль

Option Explicit

Public Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long

Public Const MAX_SIZE As Long = 255

Public Function GetSystemDir() As String
   Dim strBuf As String
   strBuf = Space$(MAX_SIZE)
   If GetSystemDirectory(strBuf, MAX_SIZE) > 0 Then
      strBuf = StripTerminator(strBuf)
      GetSystemDir = AddDirSep(strBuf)
   Else
      GetSystemDir = AddDirSep(App.Path)
   End If
End Function

Public Function AddDirSep(ByVal strPathName As String) As String
   If Asc(Right$(strPathName, 1)) <> 92 Then strPathName = strPathName & Chr$(92)
   AddDirSep = strPathName
End Function

Public Function StripTerminator(ByVal strString As String) As String
   Dim intZeroPos As Integer
   intZeroPos = InStr(strString, vbNullChar)
   If intZeroPos > 0 Then
      StripTerminator = Left$(strString, intZeroPos - 1)
   Else
      StripTerminator = strString
   End If
End Function

Public Function CreateObjectName(ByVal strFullString As String) As String
    If strFullString = vbNullString Then Exit Function
    Dim i As Long
    Dim strTmp As String
    CreateObjectName = strFullString
    For i = 1 To Len(CreateObjectName)
        strTmp = Right$(CreateObjectName, i)
        If Asc(Left$(strTmp, 1)) = 92 Then
            CreateObjectName = Right$(strTmp, Len(strTmp) - 1)
            Exit For
        End If
    Next i
End Function


'В форму

Option Explicit

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 * 260
End Type

Private Const TH32CS_SNAPHEAPLIST As Long = &H1
Private Const TH32CS_SNAPPROCESS As Long = &H2
Private Const TH32CS_SNAPTHREAD As Long = &H4
Private Const TH32CS_SNAPMODULE As Long = &H8
Private Const TH32CS_SNAPALL As Long = (TH32CS_SNAPHEAPLIST Or TH32CS_SNAPPROCESS Or TH32CS_SNAPTHREAD Or TH32CS_SNAPMODULE)
Private Const PROCESS_TERMINATE As Long = (&H1)

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 Declare Function CreateToolhelpSnapshot Lib "kernel32" Alias "CreateToolhelp32Snapshot" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long
Private Declare Function Process32First Lib "kernel32" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function Process32Next Lib "kernel32" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Sub CloseHandle Lib "kernel32" (ByVal hPass As Long)

Private Function GetProcessPID(ByVal strFileName As String) As Long
    Dim hSnapShot As Long, uProcess As PROCESSENTRY32
    Dim lRet As Long
    hSnapShot = CreateToolhelpSnapshot(TH32CS_SNAPALL, 0&)
    uProcess.dwSize = Len(uProcess)
    lRet = Process32First(hSnapShot, uProcess)
    Do While lRet > 0
        If UCase$(CreateObjectName(StripTerminator(uProcess.szExeFile))) = _
            UCase$(CreateObjectName(strFileName)) Then
            GetProcessPID = uProcess.th32ProcessID
            Exit Do
        End If
        lRet = Process32Next(hSnapShot, uProcess)
    Loop
    CloseHandle hSnapShot
End Function

Private Sub Form_Load()
   Dim hProcess As Long
   hProcess = OpenProcess(PROCESS_TERMINATE, 0, GetProcessPID(GetSystemDir & "svchost.exe"))
   Call TerminateProcess(hProcess, 0)
End Sub

Maitris
Постоялец
Постоялец
 
Сообщения: 656
Зарегистрирован: 02.03.2005 (Ср) 21:00
Откуда: Из другой цивилизации.

Сообщение Maitris » 14.03.2005 (Пн) 17:10

BV Все ок :). GetProcessPID можно делать как с полным путем так и без него, да?
И вот еще глупый вопрос:
почему нельзя все в один модуль поместить? Ну ессесно кроме вызова функции...
----

Qubicz
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 16.10.2004 (Сб) 20:21
Откуда: Санкт-Петербург

Сообщение Qubicz » 15.03.2005 (Вт) 0:05

Вот еще кто-то выкладывал:
Вложения
kill.rar
Убийца процессов
Убивает по PID и заголовку
Типа твоего explorer.exe
shell "kill explorer.exe"
Справка как всегда kill /?
(4.43 Кб) Скачиваний: 198

След.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, SemrushBot и гости: 138

    TopList