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

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

По процессу определить путь к файлу [D7, WinXP]


Alex81 ©   (2006-08-18 18:02:00) 

Подскажите как по запущенному процессу получить путь к файлу создавшему его ????


n0name   (2006-08-22 11:01:00) [1]


function NtQueryInformationProcess(hProcess: THandle; ProcessInfoClass: Integer; ProcessInfoBuffer: Pointer;
ProcessInfoBufferLength: Cardinal; BytesReturned: PCardinal): integer; stdcall; external 'ntdll.dll';

function GetEXEName(pID: DWORD): PWChar;
label err;
var
pbi: array [0..5] of DWORD;
hProc: THandle;
pProcParams: DWORD;
wCmdLen: WORD;
pCmdLine: DWORD;
br: DWORD;
begin
result := nil;
hProc := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, false, pID);
if NtQueryInformationProcess(hProc, 0, @pbi, $18, nil) <> 0 then goto err;
if not ReadProcessMemory(hProc, Pointer(pbi[1] + $10), @pProcParams, 4, br) then goto err;
if not ReadProcessMemory(hProc, Pointer(pProcParams + $38), @wCmdLen, 2, br) then goto err;
if not ReadProcessMemory(hProc, Pointer(pProcParams + $3C), @pCmdLine, 4, br) then goto err;
result := GetMemory(wCmdLen);
if result = nil then goto err;
if not ReadProcessMemory(hProc, Pointer(pCmdLine), result, wCmdLen, br) then
 begin
  FreeMemory(result);
  result := nil;
 end;
err:
CloseHandle(hProc);
end;


Alex81   (2006-08-19 13:47:00) [2]

Большое спасибо Handle ©. :-)))


Handle   (2006-08-19 10:26:00) [3]

uses
 TLHelp32, PsAPI;

procedure TForm1.Button1Click(Sender: TObject);
var
 bContinue:       BOOL;
 aSnapshotHandle: THandle;
 aProcessEntry32: TProcessEntry32;
 PrHandle:        THandle;
 ExePath:       array[0..MAX_PATH] of Char;
begin
 aSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
 aProcessEntry32.dwSize := SizeOf(aProcessEntry32);
 bContinue := Process32First(aSnapshotHandle, aProcessEntry32);
 while Integer(bContinue) <> 0 do
 begin
   if aProcessEntry32.szExeFile = 'notepad.exe' then
   begin
     PrHandle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, aProcessEntry32.th32ProcessID);
     GetModuleFileNameEx(PrHandle, 0, ExePath, SizeOf(ExePath));
     Caption := ExePath;
   end;
   bContinue := Process32Next(aSnapshotHandle, aProcessEntry32);
 end;
 CloseHandle(aSnapshotHandle);
end;


Alex81   (2006-08-19 10:25:00) [4]

Спасибо за ответ, еще бы сказали в каком модуле это функция лежит и в какой DLL. Лучше если б еще маленький примерчик, заранее благодарен.


begin...end   (2006-08-18 21:49:00) [5]

GetModuleFileNameEx


Чапаев   (2006-08-18 21:46:00) [6]

Эх и формулировочки у тебя... %-)

Смотри модуль PSAPI, функцию EnumProcessModules().


Alex81   (2006-08-18 19:20:00) [7]


> Что есть "запущенный процесс"?

Запускаем программу. Она появляется в процессах. Как по этому процессу определить путь.


Чапаев   (2006-08-18 18:44:00) [8]

Что есть "запущенный процесс"?


Наверх

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