Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.13;
Скачать: CL | DM;

Вниз

Как узнать полный путь к файлу зная хендл процесса?   Найти похожие ветки 

 
VmDeeP   (2003-07-19 01:32) [0]

Как узнать полный путь к файлу зная хендл процесса?


 
Игорь Шевченко ©   (2003-07-21 13:41) [1]

Для NT/Win2K/WinXP - например, через PEB или через NtQueryInformationProcess, если есть Handle процесса.


 
Крот ©   (2003-07-22 05:46) [2]

Э-э-э, простите, может я чего не так понял, хендл процесса - это HINSTANCE? Тогда, может просто GetModuleFileName?


 
Игорь Шевченко ©   (2003-07-22 12:30) [3]

Крот © (22.07.03 05:46)

Нет, это разные вещи


 
Вова555   (2003-07-22 17:20) [4]

function GetAppFileName (hWnd: THandle) :string;
var dPID: dWord;
hHandle: THandle;
begin
GetWindowThreadProcessId(hWnd, @dPID);
SetLength (Result, MAX_PATH);
hHandle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, True, dPID);
if GetModuleFileNameEx(hHandle,0,PChar(Result),MAX_PATH) > 0
( Result, StrLen (PChar (Result) function GetAppFileName (hWnd: THandle) :string;
var dPID: dWord;
hHandle: THandle;
begin
GetWindowThreadProcessId(hWnd, @dPID);
SetLength (Result, MAX_PATH);
hHandle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, True, dPID);
if GetModuleFileNameEx(hHandle,0,PChar(Result),MAX_PATH) > 0
then SetLength (Result, StrLen (PChar (Result)));
end; //для имени exe... GetModuleFileNameEx для XP-точно пашет.. для 9x - такая GetModuleFileName


 
VmDeep   (2003-07-23 01:17) [5]

Спасибо большое за советы! Но есть способ лудше! Идет во все виндах и за одно хедл иконки можно получить!

function pip(id:Cardinal; var s:string):THandle ;
var

snap,h : THandle;
me32 : TMODULEENTRY32;
begin
snap := 0;
try
snap := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,id);
if snap <> 0 then begin
me32.dwSize := SizeOf(TMODULEENTRY32);
if Module32First(snap, me32) then begin
s:=(me32.szExePath);
h:=ExtractIcon(hInstance,me32.szExePath,0);
if h=0 then h:=LoadImage(0, IDI_WINLOGO, IMAGE_ICON, LR_DEFAULTSIZE,
LR_DEFAULTSIZE, LR_DEFAULTSIZE or LR_DEFAULTCOLOR or LR_SHARED); Result:=h;
while Module32Next(snap, me32) do

( snap) Спасибо большое за советы! Но есть способ лудше! Идет во все виндах и за одно хедл иконки можно получить!

function pip(id:Cardinal; var s:string):THandle ;
var

snap,h : THandle;
me32 : TMODULEENTRY32;
begin
snap := 0;
try
snap := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,id);
if snap <> 0 then begin
me32.dwSize := SizeOf(TMODULEENTRY32);
if Module32First(snap, me32) then begin
s:=(me32.szExePath);
h:=ExtractIcon(hInstance,me32.szExePath,0);
if h=0 then h:=LoadImage(0, IDI_WINLOGO, IMAGE_ICON, LR_DEFAULTSIZE,
LR_DEFAULTSIZE, LR_DEFAULTSIZE or LR_DEFAULTCOLOR or LR_SHARED); Result:=h;
while Module32Next(snap, me32) do

end;
end;
finally
CloseHandle(snap);
end;
end;


 
Игорь Шевченко ©   (2003-07-23 09:55) [6]

VmDeep (23.07.03 01:17)

Приснится же такое...


 
dokdok   (2003-07-24 21:43) [7]

Скажу честно, как не крутил кусок, представленный Вова555, сколь не подставлял хендлы окон, но путного не добился ни под ХР,ни под 2000...
Мне кажется не все так просто... Или туповат крестьянин...

PS А за pip и браться страшно, хендлы иконок...


 
Vmdeep   (2003-07-25 02:27) [8]

Игорь Шевченко © (23.07.03 09:55)VmDeep (23.07.03 01:17)
Приснится же такое...//
Не приснилось а с неба упало!!! :)

dokdok (24.07.03 21:43)Скажу честно, как не крутил кусок, представленный Вова555, сколь не подставлял хендлы окон, но путного не добился ни под ХР,ни под 2000...
Мне кажется не все так просто... Или туповат крестьянин...
//
Нет ты не туповатый крестьянин код действительно не самый....!!!


PS А за pip и браться страшно, хендлы иконок...//
Ну а это ты зря про иконки у любого обьекта в виндах хендл есть так чта.... а pip есть вырезка из моей проги и все работает если есть желание могу выслать мылом!


 
dokdok   (2003-07-25 21:47) [9]

Мне-то интересно определить FileName из PIDа, а про иконки в курсах, похожий код был примерно год назад


 
dokdok   (2003-07-25 22:15) [10]

О! И недавно просмотрел в форуме...
http://delphibase.endimus.com/?action=viewfunc&topic=sysparams&id=10003


 
Vmdeep   (2003-07-25 23:21) [11]

dokdok пробовал я и этот код и др. всеравно путь не тот что должн быть а в моем приере переменная S и есть полный путь! s:=(me32.szExePath);


 
Игорь ©   (2003-07-26 02:48) [12]

//dokdok (25.07.03 22:15)
//О! И недавно просмотрел в форуме...
// http://delphibase.endimus.com/?action=viewfunc&topic=sysparams&id=10003

Не это не совсем то


 
PVOzerski ©   (2003-07-26 11:58) [13]

2VmDeep (23.07.03 01:17)
Сдается мне, в NT4 и более ранних работать не будет.


 
paul_shmakov ©   (2003-07-28 20:35) [14]

если только под nt/2k/xp, то можно задействовать функции исключительно kernel32.dll.
схема такая:
1. hProc = OpenProcess(PROCESS_CREATE_THREAD or PROCESS_QUERY_INFORMATION or PROCESS_VM_OPERATION or PROCESS_VM_WRITE or PROCESS_VM_READ, false, pid);
2. hThread = CreateRemoteThread(hProc, ... GetProcAddress(GetModuleHandle("kernel32.dll"),"GetCommandLineA") ...);
3. WaitForSingleObject(hThread, INFINITE)
4. GetExitCodeThread(hThread, @addr);
5. CloseHandle(hThread)
6. ReadProcessMemory(hProc, addr, buf, ...)
7. CloseHandle(hProc)

после этого в buf имеем командную строку нужного процесса, в которой и путь к файлу есть.



Страницы: 1 вся ветка

Текущий архив: 2003.10.13;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.016 c
14-40578
Viktor Kushnir
2003-09-23 07:36
2003.10.13
Delphi будещего


1-40371
dataMaster
2003-10-03 10:19
2003.10.13
Как в ListView показать нужный Item первым


4-40746
arous
2003-08-05 00:12
2003.10.13
Сеансы WinXP


6-40564
mihail
2003-08-12 22:00
2003.10.13
Кто-нибудь работал с радио-станциями через web ?


4-40748
jav
2003-08-04 17:52
2003.10.13
Получение кода возврата процесса из консольного приложения