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

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

!ПОЛНЫЙ! путь к .EXE через PID или его HANDLE - как? [Win2k]


Страницы:   1 2

Grundic ©   (2004-10-19 20:27:00) 

Есть проблема - надо убивать процессы, запущенные, допустим из C:\DANGEROUS\ и разрешать все другие, окромя тех, чей экзе-файл размером, например, 10000 KB. Или что-то в этом роде.

Вобщем, как получить путь к исходному exe-шнику по его процессу? szExeName (кажется так) не пойдет - он дает только имя приложения, не указывая - откуда оно родом.

ОЧЧЕНЬ надо. Заранее спасибо. (:


WL   (2004-10-20 17:56:00) [21]

> VMcL ©   (20.10.04 17:01) [11]
Тогда вопрос - как?
Нашел, как получить через WMI и Win32_Process, но нужное свойство есть только под Win XP, а надо в 2000...


VMcL   (2004-10-20 17:01:00) [22]

>> WL  (20.10.04 15:08) [10]

Можно.


WL   (2004-10-20 15:08:00) [23]

А никто не подскажет, можно ли получить всю командную строку, т.е. имя exe-шника и параметры запуска?


Grundic   (2004-10-20 11:29:00) [24]

Кому надо - вот процедурка:

procedure GetProcesses(vle:TValueListEditor);
var
hsnapshot: thandle;
procentry: tprocessentry32;
leng:Integer;
s,s1:String;
hProcess:Cardinal;
hMod: HMODULE;
cm: cardinal;
pc:PAnsiChar;
i:Integer;
begin
for i:=vle.RowCount-2 downto 1 do
vle.DeleteRow(i);
hsnapshot:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
procentry.dwSize:=sizeof(PROCESSENTRY32);
if Process32First(hsnapshot,procentry) then
begin
 repeat
  begin
   s:=procentry.szExeFile;

   hProcess:=OpenProcess(PROCESS_QUERY_INFORMATION+PROCESS_VM_READ,FALSE,procentry.th32ProcessID);
   if hProcess<>0 then
    begin
     EnumProcessModules(hProcess, @hMod, 4, cm);
     GetMem(pc,260);
     GetModuleFileNameEx(hProcess,hMod,pc,260);
     s1:=string(pc);
     FreeMem(pc);
     if s1[2]<>':' then s1:=s;
    end
   else
    begin
     s1:=s;
    end;
   CloseHandle(hProcess);
   if FileExists(s1) then
    begin
     leng:=GetFileSize(_lopen(PChar(s1),OF_READ),NIL);
     s1:=s1+' '+IntToStr(leng);
    end;
   VLE.InsertRow(s,s1,True);
  end;
 until not Process32Next(hsnapshot,procentry);
end;
CloseHandle(hsnapshot);
vle.DeleteRow(1);
end;


Grundic   (2004-10-20 11:03:00) [25]

Alex_Petr - сэнкс! :) Уже хоть что-то!..


Alex_Petr   (2004-10-20 00:23:00) [26]

GetModuleFileNameEx


GuAV   (2004-10-20 00:18:00) [27]

VMcL ©   (20.10.04 0:12) [5]
Значит, радиус отличается от ГОСТовского.


:-) Хорошая фраза, надо запомнить


VMcL   (2004-10-20 00:12:00) [28]

>> Grundic  (19.10.04 23:52) [4]

Значит, радиус отличается от ГОСТовского.


Grundic   (2004-10-19 23:52:00) [29]

2 VMcL
Не, не канает - эти ф-ции дают только сухое имя файла, а не полный путь к нему...


VMcL   (2004-10-19 22:59:00) [30]

>> Grundic  (19.10.04 20:27)

http://www.delphimaster.ru/cgi-bin/forum.pl?id=1098156661&n=5:: [1]


Grundic   (2004-10-19 22:08:00) [31]

но ведь она только с оконными приложениями работает или нет?


-=SS=-   (2004-10-19 20:46:00) [32]

GetWindowModuleFileName


Страницы:   1 2

Наверх

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