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

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
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 Кб) Скачиваний: 199

kirrun
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 06.04.2005 (Ср) 15:41
Откуда: Питер

Сообщение kirrun » 17.04.2005 (Вс) 14:32

Maitris

Дык если тебе нужно такое угрожающее сообщение, которое дает время упаковать чемоданы, то его можно вызвать гораздо проще, ничего не убивая...
"Единственный безопасный компьютер - это тот, который выключен из электросети, закрыт в сейфе, который зарыт 20 футов под землей в засекреченной местности. И то я не уверен относительно его безопасности."
(Деннис Хьюджес, ФБР)

Alexander N. Samarin
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 397
Зарегистрирован: 05.03.2005 (Сб) 20:59
Откуда: Интернат 18 (СУНЦ МГУ), комната 214А, кровать посередине

Сообщение Alexander N. Samarin » 17.04.2005 (Вс) 17:20

Не понял!
На это не смотрите! Это не подпись!!!!!!

kirrun
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 06.04.2005 (Ср) 15:41
Откуда: Питер

Сообщение kirrun » 17.04.2005 (Вс) 19:11

Alexander N. Samarin писал(а):Не понял!


Поясняю: человек хочет завершить svchost по-видимому чтобы убить комп. То есть вылезет сообщение, которое дает 60сек на сборы и перезагружает компьютер.

Вот я и говорю, что это сообщение можно вытащить вполне официально, ничего не убивая
"Единственный безопасный компьютер - это тот, который выключен из электросети, закрыт в сейфе, который зарыт 20 футов под землей в засекреченной местности. И то я не уверен относительно его безопасности."
(Деннис Хьюджес, ФБР)

Alexander N. Samarin
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 397
Зарегистрирован: 05.03.2005 (Сб) 20:59
Откуда: Интернат 18 (СУНЦ МГУ), комната 214А, кровать посередине

Сообщение Alexander N. Samarin » 17.04.2005 (Вс) 19:43

kirrun писал(а):Вот я и говорю, что это сообщение можно вытащить вполне официально, ничего не убивая

А как и откуда?
PS:: Люблю делать мелкие гадости :D
На это не смотрите! Это не подпись!!!!!!

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 17.04.2005 (Вс) 19:51

Пуск>Выполнить>shutdown -t
Моду создают модоки, а распространяют модозвоны.

kirrun
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 06.04.2005 (Ср) 15:41
Откуда: Питер

Сообщение kirrun » 17.04.2005 (Вс) 20:11

hCORe писал(а):Пуск>Выполнить>shutdown -t


Неа.. не совсем так...
"Единственный безопасный компьютер - это тот, который выключен из электросети, закрыт в сейфе, который зарыт 20 футов под землей в засекреченной местности. И то я не уверен относительно его безопасности."
(Деннис Хьюджес, ФБР)

kirrun
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 06.04.2005 (Ср) 15:41
Откуда: Питер

Сообщение kirrun » 17.04.2005 (Вс) 20:22

Alexander N. Samarin писал(а):
kirrun писал(а):Вот я и говорю, что это сообщение можно вытащить вполне официально, ничего не убивая

А как и откуда?
PS:: Люблю делать мелкие гадости :D


Короче, открой коммандную строку и напиши shutdown -? Там все понятно написано.
Вот самое важное вкратце:
shutdown [-s -r -l] -t (время) -c ("Коммент")

-s SHUTDOWN
-r REBOOT
-l LOG OFF

-t ВРЕМЯ В СЕКУНДАХ ДО ЗАВЕРШЕНИЯ (можно не указывать, тада будет дефолтное: 30сек. По-этому рекомендуется писать -t 00)

-c КОММЕНТ К ЗАВЕРШЕНИЮ (не забудь кавычки)

'ВНИМАНИЕ!!! Если пишешь -l, -t работать не будет!!! (вылетит сразу)

Да, чуть не забыл! shutdown -i вылезет графический интерфейс.

Чтобы принудительно завершать приложения используй -f

З.Ы. Для отмены завершения shutdown -a
"Единственный безопасный компьютер - это тот, который выключен из электросети, закрыт в сейфе, который зарыт 20 футов под землей в засекреченной местности. И то я не уверен относительно его безопасности."
(Деннис Хьюджес, ФБР)

kirrun
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 06.04.2005 (Ср) 15:41
Откуда: Питер

Сообщение kirrun » 17.04.2005 (Вс) 20:25

Совсем забыл!!!!

Работает только на ХРене!!!

Но можно скопировать и на другие NT (я пробовал только на 2k. Только не работал коммент в интерфейсе.)

З.Ы. Оч удобно вытаскивать ярлыки для завершения, ребута и логофа на рабочий стол =)
"Единственный безопасный компьютер - это тот, который выключен из электросети, закрыт в сейфе, который зарыт 20 футов под землей в засекреченной местности. И то я не уверен относительно его безопасности."
(Деннис Хьюджес, ФБР)

HotKitten
Дятил
Дятил
Аватара пользователя
 
Сообщения: 400
Зарегистрирован: 24.01.2005 (Пн) 21:48
Откуда: из дома

Сообщение HotKitten » 17.04.2005 (Вс) 21:32

kirrun писал(а):Maitris

Дык если тебе нужно такое угрожающее сообщение, которое дает время упаковать чемоданы, то его можно вызвать гораздо проще, ничего не убивая...

а если соблюдать очерёдность отрубания системных процессов, то мона отрубить все, кроме system и crss.exe, даже winlogon
Изображение

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

Сообщение Maitris » 18.04.2005 (Пн) 0:21

Зацените фишку:
оказывается что если прога завершает больше 2-ух процессов при помощи TerminateProcess то она определяется DrWeb как вирус, один из стандартных троянов.
если более 3-ех то Kaspersky :D

Ой, маленькая поправочка: более 2-3-ех процессов в одной процедуре 8)
----

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

Сообщение GM » 18.04.2005 (Пн) 7:05

Насчет сообщения, то вызвать его можна вот так
InitiateSystemShutdown, а убрать AbortSystemShutdown
الفيجوال بيسك الرابح

kirrun
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 06.04.2005 (Ср) 15:41
Откуда: Питер

Сообщение kirrun » 18.04.2005 (Пн) 14:16

Maitris писал(а):Зацените фишку:
оказывается что если прога завершает больше 2-ух процессов при помощи TerminateProcess то она определяется DrWeb как вирус, один из стандартных троянов.
если более 3-ех то Kaspersky :D

Ой, маленькая поправочка: более 2-3-ех процессов в одной процедуре 8)


Значит есть и выход: делать в несколько процедур =)
"Единственный безопасный компьютер - это тот, который выключен из электросети, закрыт в сейфе, который зарыт 20 футов под землей в засекреченной местности. И то я не уверен относительно его безопасности."
(Деннис Хьюджес, ФБР)

След.

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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 34

    TopList