![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
!ПОЛНЫЙ! путь к .EXE через PID или его HANDLE - как? [Win2k]
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