|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Получение информации о выполняемых процессах
Здравствуйте. Делаю программу в Delphi XE2, которая выдаёт информацию о выполняющихся в данный момент процессах.
На форму добавил мемо-поле "Info" (в которое грузится информация) и кнопку "Button4", в которой разместил код с API-функцией. На одном из компьютеров я запустил проект (нажал Run) через Delphi 7, он работал правильно (показал 23 процесса), но у меня и на других компьютерах скомпилированный XE2 exe-файл показывает, что выполняется 1 процесс (его имя не показывает). Почему так, подскажите, пожалуйста? Может это Delphi XE2 виноват? Код:
procedure TForm1.Button4Click(Sender: TObject); var SH:Cardinal; Num,I:Integer; PPE:TProcessEntry32; Full_Path:string; begin Num:=0; SH:=CreateToolHelp32SnapShot(Th32cs_SnapAll, 0); Process32First(SH,PPE); Full_Path:=PPE.szExeFile; Info.Text:=(Full_path); Num:=Num+1; while Process32Next(SH, PPE) do begin Full_Path:=PPE.szExeFile; Info.Lines.Add(Full_path); Num:=Num+1; end; CloseHandle(SH); Info.Lines.Add('Число процессов: '+IntToStr(Num)); end; |
#2
|
||||
|
||||
Цитата:
А если так Код:
uses TlHelp32,Psapi; procedure TForm1.Button4Click(Sender: TObject); var PIDArray: array [0..1023] of DWORD; ModuleName: array [0..300] of char; cb: DWORD; i, ProcCount: integer; hMod: HMODULE; hProcess: THandle; begin Info.Clear; EnumProcesses(@PIDArray, SizeOf(PIDArray), cb); ProcCount:= cb div SizeOf(DWORD); for i := 0 to ProcCount-1 do begin hProcess:= OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, PIDArray[i]); if (hProcess <> 0) then begin EnumProcessModules(hProcess, @hMod, SizeOf(hMod), cb); GetModuleFilenameEx(hProcess, hMod, ModuleName, SizeOf(ModuleName)); Info.Lines.Add(ModuleName); CloseHandle(hProcess); end; end; end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
Flashton (17.10.2013)
|
#3
|
|||
|
|||
Спасибо, сегодня попробую этот код в XE2. Меня просто спросили почему так, я после этого и сам задумался, почему XE2 так "криво" работает с этой функцией, если в 7 delphi всё нормально?
Спасибо. Меня просто спросили почему так, я после этого и сам задумался, почему XE2 так "криво" работает с этой функцией? Последний раз редактировалось M.A.D.M.A.N., 17.10.2013 в 13:03. |
#4
|
|||
|
|||
Спасибо всем ответившим
Разобрался: проблема в том, что я не инициализировал размер структуры, нужно было добавить код PPE.dwSize:=sizeof(PPE); |