Форум: "Основная";
Текущий архив: 2007.03.04;
Скачать: [xml.tar.bz2];
ВнизОпределить путь к программе зная ее хендл окна Найти похожие ветки
← →
Dmitry_177 (2007-01-12 22:34) [0]Подскажите пожалуйста, как определить путь к программе зная ее хендл окна?
← →
kaZaNoVa © (2007-01-12 23:38) [1]а зачемм???
← →
Dmitry_177 (2007-01-13 00:26) [2]Понадобилось...
← →
kaZaNoVa © (2007-01-13 00:56) [3]
{uses tlHelp32; }
function GetFilePath(const WinH: THandle): String;
var
SnapshotH: THandle;
PE32: TProcessEntry32;
PrId: Cardinal;
begin
Result := "";
SnapshotH := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if SnapshotH = -1 then Exit;
PE32.dwSize := SizeOf(PE32);
GetWindowThreadProcessID(WinH, PrId);
if Process32First(SnapshotH, PE32) then
repeat
if PE32.th32ProcessID = PrId then begin
Result := PE32.szExeFile;
Break;
end;
until not Process32Next(SnapshotH, PE32);
CloseHandle(SnapshotH)
end;
← →
Dmitry_177 (2007-01-13 01:02) [4]У меня почему-то определяется только как: "имя.exe". Без пути...((( А мне нужен еще и путь к нему...
← →
kaZaNoVa © (2007-01-13 01:04) [5]
GetModuleFileName
← →
Dmitry_177 (2007-01-13 01:15) [6]читал про GetModuleFileName, но я не пойму как определить хэндл модуля, который используется в первом параметре этой функции.. Вставлял хэндл окна, она ничего не передает в буфер...(((
← →
kaZaNoVa © (2007-01-13 01:18) [7]Dmitry_177 (13.01.07 1:15) [6]
PE32.th32ProcessID попробуй ей скормить)))
← →
Almaz © (2007-01-13 01:21) [8]Если не требуется поддержка Win95/98/МЕ, то можно через PSAPI:
function GetModuleFileNameEx(hProcess: THandle; hModule: THandle;
lpFilename: PChar; nSize: Cardinal): Cardinal; stdcall;
external "Psapi.dll" name "GetModuleFileNameExA";
function GetEXENameFromWnd(WndHandle: THandle): String;
var
ProcessID: Cardinal;
ProcessHandle: THandle;
Buffer: array [0..MAX_PATH] of Char;
begin
if GetWindowThreadProcessId(WndHandle, ProcessID) = 0 then
RaiseLastOSError;
ProcessHandle := OpenProcess(PROCESS_QUERY_INFORMATION or
PROCESS_VM_READ, FALSE, ProcessID);
if ProcessHandle = 0 then
RaiseLastOSError;
try
if GetModuleFileNameEx(ProcessHandle, 0, Buffer, MAX_PATH) = 0 then
RaiseLastOSError;
finally
CloseHandle(ProcessHandle);
end;
Result := Buffer;
end;
Удачи.
← →
Dmitry_177 (2007-01-13 01:29) [9]Попробовал так.. не работает...(((
function GetFilePath(const WinH: THandle): String;
var
SnapshotH: THandle;
PE32: TProcessEntry32;
PrId: Cardinal;
AppFileName: TMaxPathString;
begin
Result := "";
SnapshotH := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if SnapshotH = -1 then Exit;
PE32.dwSize := SizeOf(PE32);
GetWindowThreadProcessID(WinH, PrId);
if Process32First(SnapshotH, PE32) then
repeat
if PE32.th32ProcessID = PrId then begin
Result := String(GetModuleFileName(PE32.th32ProcessID, AppFileName, SizeOf(AppFileName)));
Break;
end;
until not Process32Next(SnapshotH, PE32);
CloseHandle(SnapshotH);
end;
← →
Dmitry_177 (2007-01-13 01:30) [10]
type
TMaxPathString = array [0..MAX_PATH - 1] of Char;
← →
Dmitry_177 (2007-01-13 01:33) [11]Almaz, твой пример работает, спасибо )))
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2007.03.04;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.041 c