Форум: "Система";
Текущий архив: 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