![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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); |