Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2003.10.13;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.008 c
1-40401
Beglec
2003-10-01 01:03
2003.10.13
Кто нибуть пробывал рабоать с архиваторами (типа RAR)


14-40633
pasha_golub
2003-09-24 16:33
2003.10.13
Что такое execl?


11-40327
D@OLPHIN
2003-01-30 20:45
2003.10.13
Где найти Delphi 6


4-40717
k@rt
2003-08-10 02:40
2003.10.13
StatusBar


1-40450
Duncan
2003-10-02 17:20
2003.10.13
контроль версий





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский