Как, зная Handle окна программы, определить имя EXE?

Материал из DRKB

Как, зная Handle окна программы, определить имя EXE?[править | править код]

function ExeNameByHandle(aWinHandle:HWND):string;

// Для начала определяешь какому процессу принадлежит окно:
var pProcID: ^DWORD;
begin
  GetMem(pProcID, SizeOf(DWORD));
  GetWindowThreadProcessId(aWinHandle, pProcID);
  Result := GetExeNameByProcID(pProcID^);
  FreeMem(pProcID);
end;

// а после этого используешь TProcessEntry32 примерно так:
function GetExeNameByProcID(ProcID: DWord): string;
var
  ContinueLoop: BOOL;
  FSnapshotHandle: THandle;
  FProcessEntry32: TProcessEntry32;
begin
  FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
  ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
  Result := '';
  while (Integer(ContinueLoop) <> 0) and (Result = '') do
  begin
    if FProcessEntry32.th32ProcessID = ProcID then
      Result := FProcessEntry32.szExeFile;
    ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
  end;
  CloseHandle(FSnapshotHandle);
end;

// Не забудь в uses добавить Tlhelp32



Код исправлен Мыш


Source: Взято из http://forum.sources.ru
ID: 02111