Столкнулся со следующей проблемой - в диспетчере задач windows 7 есть возможность просмотреть расположение файла для любого процесса.
- Код: Выделить всё
ar:=nil;
FSnap := JwaTlHelp32.CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
If FSnap = 0 then exit;
i:=0;
SetLength ( ar, 1000 );
if JwaTlHelp32.Process32First(FSnap,de) then
repeat
ar[i]:=de;
inc(i);
until JwaTlHelp32.Process32Next(FSnap,de)=false;
SetLength ( ar, i );
CloseHandle ( FSnap );
K := i;
If K > 0 then
begin
For I:=0 to K-1 do
begin
id:=ar[i].th32ProcessID;
h:= OpenProcess (PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, false, id);
s:='';
if JwaPsApi.GetModuleFileNameEx(h,0,@tmp,Length(tmp))>0 then s:=tmp;
with form1.ListView1.Items.Add do
begin
caption := IntToStr(I+1);
subitems.Add(AnsiToUtf8(ar[I].szExeFile));
subitems.Add(IntToStr(ar[I].th32ProcessID));
subitems.Add(s);
end;
end;
ar:=Nil;
А с помощью данного кода пути выводятся не для всех. Это решается если дописать
- Код: Выделить всё
if s='' then s:=' путь к системной папке \'+ar[I].szExeFile;
Но это не профессионально и может не всегда сработать. Какие у кого мнения по этому вопросу, буду искренне рад узнать.