![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
FilePathFromHandle? [D1, D2, D3, D4, D5, D6, Win95/98, WinME, NT4, Win2k, WinXP]
n\a © (2002-05-17 01:24:00)subj. я использую TProcessEntry32это не очень удобно... есть какая нить функция APIчтобы определить по handle путь к программе?
n\a (2002-05-18 06:07:00) [1]действительно "слегонца корява" =) а ты вопрос до конца прочитал?
> я использую TProcessEntry32 это не очень удобно...
_Toltec (2002-05-17 02:16:00) [2]Может слегонца корява, но зато работает
type
TWinParams = record
wpExeName: String; имя файла
wpPath: String; путь
wpProcessId: Cardinal; pid
end;
uses tlhelp32;
function ExeFileByWindowHwnd(wHandle: HWND): TWinParams;
const
hProcessSnap: THandle = 0;
bRet: Boolean = False;
var
pe32: PROCESSENTRY32;
me32: MODULEENTRY32;
wProcessID : DWORD;
begin
GetWindowThreadProcessId(wHandle, @wProcessID);
Result.wpProcessId:= wProcessID;
Result.wpExeName:= "";
Result.wpPath:= "";
hProcessSnap := CreateToolhelp32Snapshot(TH32CS_SNAPALL, wProcessID);
try
if hProcessSnap = HWND( - 1) then exit;
pe32.dwSize := sizeof(PROCESSENTRY32);
me32.dwSize := sizeof(MODULEENTRY32);
if (Process32First(hProcessSnap, pe32)) then
repeat
if pe32.th32ProcessID = wProcessID then
begin
Result.wpExeName:= StrPas(PChar(@pe32.szExeFile));
if (Module32First(hProcessSnap, me32)) then
repeat
Result.wpPath:= StrPas(PChar(@me32.szExePath));
until (Result.wpPath<>"") or (not Module32Next(hProcessSnap, me32));
end;
until (Result.wpExeName<>"") or (not Process32Next(hProcessSnap, pe32));
finally
CloseHandle(hProcessSnap);
end;
end;