TerminateProcess() в NT

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Eduard
Бывалый
Бывалый
 
Сообщения: 254
Зарегистрирован: 31.08.2003 (Вс) 17:12
Откуда: Эстония

TerminateProcess() в NT

Сообщение Eduard » 01.07.2004 (Чт) 20:03

Вообщем в Win98 TerminateProcess(...) - все как надо, а в XP не идет, и кстати в API-Guide в параметре у этой функ-ии, там где у него hID было написано:

Windows NT: The handle must have PROCESS_TERMINATE access. For more information, see Process Objects.

Долго я над этим думал, что это за Доступ к PROCESS_TERMINATE . Очевидно из-за этого не работает.

Помогите пожалуйста сделать ProcessTerminate в XP и именно Terminate, или разберитесь с этой функцией т.к. API-Guide пишет, что под NT эта функция тоже идет !

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 01.07.2004 (Чт) 20:29

OpenProcess возвращает его хендл
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 02.07.2004 (Пт) 9:57

Ясен пень, что идет. Другое дело, что сама Microsoft не рекомендует использовать эту функцию в силу того, что при завершении процесса с ее помощью слишком много всего за подопытным процессом не смывается. Нехорошо мусорить, лучше взять банальный PostMessage() и послать главному окну этого процесса WM_QUIT - оно надежнее будет и корректнее...

san*
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 115
Зарегистрирован: 17.06.2004 (Чт) 17:57
Откуда: Киев

Сообщение san* » 02.07.2004 (Пт) 10:07

Объясни толком, что за процесс, кто его создал и т.д. Возможно при создании в SequrityAtributes указали, что доступ к процессу ограничен для уничтожения

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 02.07.2004 (Пт) 10:32

Посмотри в API-Guide пример к ExitWindowEx, там есть пример, как подключать привилегии.
Lasciate ogni speranza, voi ch'entrate.

Eduard
Бывалый
Бывалый
 
Сообщения: 254
Зарегистрирован: 31.08.2003 (Вс) 17:12
Откуда: Эстония

Сообщение Eduard » 02.07.2004 (Пт) 14:41

alibek писал(а):Посмотри в API-Guide пример к ExitWindowEx, там есть пример, как подключать привилегии.

Вот точно, я тоже думаю скорее дело в привилегиях, попробую пока так...

Eduard
Бывалый
Бывалый
 
Сообщения: 254
Зарегистрирован: 31.08.2003 (Вс) 17:12
Откуда: Эстония

Сообщение Eduard » 02.07.2004 (Пт) 16:52

И что, попробывал - все ровно не идет, все привилегии перепробывал.
Народ ну дайте что нибуть, что работает от этого ProcessTerminate() в системе NT, очень нужнооо!

Eduard
Бывалый
Бывалый
 
Сообщения: 254
Зарегистрирован: 31.08.2003 (Вс) 17:12
Откуда: Эстония

Сообщение Eduard » 08.07.2004 (Чт) 19:24

Ну все, наконец-то! Как было сказано в топике http://bbs.vbstreets.ru/viewtopic.php?t=6889, так и сделал!

Теперь значит если кому надо кикать процессы в ХР, то хватайте, проверено:

Код: Выделить всё
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 Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function OpenProcess Lib "Kernel32.dll" (ByVal dwDesiredAccessas As Long, ByVal bInheritHandle As Long, ByVal dwProcId As Long) As Long
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long

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

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

Function GetApp(sAppFile As String, Optional Terminate As Boolean = False) As Boolean
On Error Resume Next
    Dim hSnapShot As Long, uProcess As PROCESSENTRY32
    Dim rProcessFound As Long
    Dim sFileName As String
    Dim lFLenght As Long
    Dim lhProcess As Long
   
    hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0&)
    uProcess.dwSize = Len(uProcess)
    rProcessFound = Process32First(hSnapShot, uProcess)
       
    Do While rProcessFound
        sFileName = Left$(uProcess.szExeFile, IIf(InStr(1, uProcess.szExeFile, Chr$(0)) > 0, _
                            InStr(1, uProcess.szExeFile, Chr$(0)) - 1, 0))
        lFLenght = Len(sFileName)
        If LCase(sFileName) = LCase(Right(sAppFile, lFLenght)) Then
            If Terminate Then
                lhProcess = OpenProcess(PROCESS_TERMINATE, False, uProcess.th32ProcessID)
                TerminateProcess lhProcess, 0&
                CloseHandle lhProcess
            End If
            GetApp = True
        End If
        rProcessFound = Process32Next(hSnapShot, uProcess)
    Loop
   
    CloseHandle hSnapShot
End Function


Использование:

bRet = GetApp("c:\windows\explorer.exe", True)

bRet = True ' Если процесс есть или был запущен
bRet = False ' Процесс не запущен


vbskb_api vbskb_process vbskb_terminate


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

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

Сейчас этот форум просматривают: Yandex-бот и гости: 28

    TopList