Форум: "WinAPI";
Текущий архив: 2006.12.31;
Скачать: [xml.tar.bz2];
ВнизПо процессу определить путь к файлу Найти похожие ветки
← →
Alex81 (2006-08-18 18:02) [0]Подскажите как по запущенному процессу получить путь к файлу создавшему его ????
← →
Чапаев © (2006-08-18 18:44) [1]Что есть "запущенный процесс"?
← →
Alex81 (2006-08-18 19:20) [2]
> Что есть "запущенный процесс"?
Запускаем программу. Она появляется в процессах. Как по этому процессу определить путь.
← →
Чапаев © (2006-08-18 21:46) [3]Эх и формулировочки у тебя... %-)
Смотри модуль PSAPI, функцию EnumProcessModules().
← →
begin...end © (2006-08-18 21:49) [4]GetModuleFileNameEx
← →
Alex81 (2006-08-19 10:25) [5]Спасибо за ответ, еще бы сказали в каком модуле это функция лежит и в какой DLL. Лучше если б еще маленький примерчик, заранее благодарен.
← →
Handle © (2006-08-19 10:26) [6]
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 13:47) [7]Большое спасибо Handle ©. :-)))
← →
n0name (2006-08-22 11:01) [8]
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;
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2006.12.31;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.042 c