vb6.0 как узнать жив ли процесс с таким то PID

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
student-uni
Бывалый
Бывалый
 
Сообщения: 242
Зарегистрирован: 01.10.2005 (Сб) 18:54

vb6.0 как узнать жив ли процесс с таким то PID

Сообщение student-uni » 14.02.2006 (Вт) 11:18

есть ли в Visual Basic 6.0 способ чтобы проверить жив ли процесс с известным PID ?

В VB.NET ето GetProcesses
Получаем все процессы
и в цикле смотрим своиства ID и ProcessName каждого
А в вб 6.0 ?

Спасибо

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

Сообщение GSerg » 14.02.2006 (Вт) 11:23

А в VB6 это Private Declare Function EnumProcesses Lib "psapi.dll" (ByRef lpidProcess As Long, ByVal cb As Long, ByRef cbNeeded As Long) As Long
Либо CreateToolhelp32Snapshot для совместимости с 9x.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

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

Сообщение tyomitch » 14.02.2006 (Вт) 14:32

А почему бы не OpenProcess(SYNCHRONIZE)?
И перебора не надо.
Изображение

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 14.02.2006 (Вт) 21:55

Вероятно, можно настроить ACL так, что процесс вообще нельзя открыть с помощью OpenProcess?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

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

Сообщение tyomitch » 14.02.2006 (Вт) 22:41

И в чём разница между таким процессом и мёртвым? ;-)
Изображение

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 14.02.2006 (Вт) 23:14

Окна, работа с файлами? Короче все признаки жизни, бьющей ключом, разве не так?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

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

Сообщение tyomitch » 14.02.2006 (Вт) 23:28

Хорошо, давай без лишних сущностей: пусть неоткрываемый процесс будет без окон и без дверей.
В чём будет разница тогда? Только что файл *.exe заблокирован? Окей, две проверки: всё лучше, чем перебор.
Изображение

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 14.02.2006 (Вт) 23:43

В чём будет разница тогда? Только что файл *.exe заблокирован?

ну он может не только exe-файл блокировать. Ведь есть же куча прог, которые работают в невидимо режиме. Скажем, логгер.
Кстати, а TM такую программу тоже не сможет закрыть, получается?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

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

Сообщение tyomitch » 15.02.2006 (Ср) 0:09

ANDLL писал(а):Кстати, а TM такую программу тоже не сможет закрыть, получается?

Я думаю, он её такую даже не увидит ;-)
Ведь имя образа он считывает из АП процесса, а если доступ к нему перекрыт -- что ж он, пустую строку нарисует?
Изображение

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 15.02.2006 (Ср) 0:21

Почему бы не нарисовать хотя бы что-то вроде 'Unnamed process'?

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 15.02.2006 (Ср) 9:24

2 tyomitch
Хорошо, давай без лишних сущностей: пусть неоткрываемый процесс будет без окон и без дверей.
В чём будет разница тогда? Только что файл *.exe заблокирован? Окей, две проверки: всё лучше, чем перебор.

А если привилегий не хватает чтоб процесс открыть или, что похлеще, процесс перехватывает ZwOpenProcess?...
Придется привилегии добавлять. А с перехватом ZwOpenProcess вообще хлопот не оберешься.
ИМХО, лучше SnapShot. Не большая потеря в скорости, но надежнее...
А я все практикую лечение травами...

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

Сообщение tyomitch » 15.02.2006 (Ср) 13:42

Давайте лучше спросим у student-uni, беспредельничает его процесс или нет. Если нет, то нафига всё это воротить?
Изображение

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 15.02.2006 (Ср) 13:51

2 tyomitch
Тоже верно... :wink:
Но я вот тут подумал, а если ему нужен общий случай?
student-uni
Итак, мы ждем... :lol:
А я все практикую лечение травами...

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

Сообщение GSerg » 15.02.2006 (Ср) 13:52

Я думаю, что всё-таки OpenProcess рулит...

Если процесс есть, будет либо success, либо lastdllerror будет 5
Если процесса нет, будет lastdllerror = 87...

Код: Выделить всё
Private Function ProcessExists(ByVal pID As Long) As Boolean
  Dim h As Long
 
  h = OpenProcess(SYNCHRONIZE, 0, pID)
 
  If h = 0 Then
    ProcessExists = Err.LastDllError = 5
  Else
    CloseHandle h
    ProcessExists = True
  End If
End Function
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


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

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

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

    TopList