Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Избитая тема с процессами


Hirara ©   (2002-12-08 21:38:00) 

Код :
Var A : Array [0..100] of DWORD;
Count,CountMod : DWORD;
I : Integer;
ProcHand : THandle;
ModHand : HMODULE;
ModName : Array [0..255] of char;
begin
EnumProcesses(@A,SizeOf(A),Count);
Count:=Count div SizeOf(DWORD);
StringGrid1.RowCount:=Count;
For I:=0 to Count-1 do
Begin
ProcHand:=OpenProcess(Process_Query_Information or Process_vm_Read,False,A[i]);
EnumProcessModules(ProcHand,@ModHand,1,CountMod);
StringGrid1.Cells[0,i]:= IntToStr(A[i]);
StringGrid1.Cells[1,i]:= IntToStr(ProcHand);
{ If} GetModuleFileNameEx(ProcHand,ModHand,ModName,SizeOf(ModName));//>0 //then
StringGrid1.Cells[2,i]:=ModName;

End;
end;

Вместо модуля процесса пишет знак вопроса, в чом неправильно?


Almaz   (2002-12-11 00:20:00) [1]


> Hirara © (10.12.02 12:42)
> еще вопрос:
> id=0 and Handle=0 что за процесс?

Idle (Бездействие системы)


> там еще много типа того процессов, где нули есть, так вот
> в них путь не определяет.........

Если Handle = 0, а ID <> 0 то скорее всего, вашему процессу просто не хватает привелегий, чтобы получить доступ к этим процессам. Для начала, просто запустите TaskManager - и посмотрите там на процессы с этими ID-ами. Если там имя файла корректно определяется, то тогда попробуйте в своей программе установить Debug привелегии (см. описание OpenProcessToken - LookupPrivilegeValue, AdjustTokenPrivileges)

Удачи.


Hirara   (2002-12-10 12:42:00) [2]


> Almaz

еще вопрос:
id=0 and Handle=0 что за процесс?
id = 4 and Handle = 1908 что за процесс?
id = 596 and Handle = 0 что за процесс?


там еще много типа того процессов, где нули есть, так вот в них путь не определяет.........


Hirara   (2002-12-10 11:20:00) [3]


> Almaz

Спасибо, все круто ))
Только путь иногда коряво определяется, типа там диск не пишет какой


Almaz   (2002-12-10 02:48:00) [4]


> Hirara © (08.12.02 21:38)
> Код :
>Var
> ModHand : HMODULE;
> ...
> EnumProcessModules(ProcHand,@ModHand, sizeof(ModHand),CountMod);
> ...
> end;
> Вместо модуля процесса пишет знак вопроса, в чом неправильно?

Ошибка в том, что третьим параметром необходимо указывать размер массива ссылок в байтах! А размер ModHand не 1 байт как у вас, а 4 ;)
Но тем не менее для первых двух процессов в списке вы все равно получите "?" (Про XP не знаю, но на WinNT/2000 это так). Дело в том, что первый процесс в данном случае - это Idle (Бездействие системы), а второй - System. Для них имена модулей не определены, но вы можете ввести их самостоятельно :)
Что-то вроде:
case A[i] of //PID
0: ModName := "Бездействие системы";
8: ModName := "System";
else
...


Удачи.


Hirara   (2002-12-09 21:30:00) [5]

up


Hirara   (2002-12-09 15:45:00) [6]


> 2DarkGreen

Все равно не работает, вместо пути пишет ? , Может из за того что у меня XP ?


DarkGreen   (2002-12-09 14:04:00) [7]

GetModuleFileNameEx(ProcHand,ModHand,@ModName[0],SizeOf(ModName));


Oleg_Gashev   (2002-12-08 22:11:00) [8]

http://firststeps.ru/mfc/winapi/r.php?32


Наверх

Титульная страница Поиск, карта сайта Написать письмо