Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.27;
Скачать: CL | DM;

Вниз

Избитая тема с процессами   Найти похожие ветки 

 
Hirara ©   (2002-12-08 21:38) [0]

Код :
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;

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


 
Oleg_Gashev ©   (2002-12-08 22:11) [1]

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


 
DarkGreen ©   (2002-12-09 14:04) [2]

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


 
Hirara ©   (2002-12-09 15:45) [3]


> 2DarkGreen

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


 
Hirara ©   (2002-12-09 21:30) [4]

up


 
Almaz ©   (2002-12-10 02:48) [5]


> 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-10 11:20) [6]


> Almaz

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


 
Hirara ©   (2002-12-10 12:42) [7]


> Almaz

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


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


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


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

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


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

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

Удачи.



Страницы: 1 вся ветка

Текущий архив: 2003.01.27;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.029 c
3-86719
b_baranov
2003-01-06 19:25
2003.01.27
FIBDataSet, run-time формирование SQL- запроса


3-86648
Natangelina
2003-01-07 01:24
2003.01.27
Вставка строки в бд


3-86726
TTCustomDelphiMaster
2003-01-08 22:07
2003.01.27
Подсчет суммы в выделенных строках DBGrid


3-86709
Соловьев
2003-01-09 12:23
2003.01.27
BatchMove не работает с вычисляемым полем!


14-87053
Лёха2003
2003-01-05 14:51
2003.01.27
Создание ядра ОС