Форум: "WinAPI";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];
ВнизПуть к программе Найти похожие ветки
← →
_Stalker_ (2004-07-11 01:39) [0]Как по хэндлу окна, узнать путь к проге
← →
Ertong © (2004-07-11 13:10) [1]
var
FileName:array[0..MAX_PATH] of char;
PrID,HPr:cardinal;
begin
GetWindowThreadProcessId( Хэндл окна ,PrID);
HPr:=OpenProcess(0,false,PrID);
GetModuleFileName(hPr,FileName,sizeOf(a));
CloseHandle(HPr);
← →
_Stalker_ (2004-07-12 15:09) [2]Выдаёт ошибку несоответствия типов :(
PrID-точно cardinal ?
← →
VMcL © (2004-07-12 15:29) [3]1. Не GetModuleFileName, а GetModuleFileNameEx (NT only) - uses PsAPI.
2. Для Win9x - uses TlHelp32.
← →
_Stalker_ (2004-07-12 16:19) [4]Выскакивает ошибка Access Violation, народ, поделитесь пожалуста работающими исходниками, очень надо :(
← →
Ertong © (2004-07-12 23:32) [5]Хм...
-cut-
function GetWindowThreadProcessId(hWnd: HWND; lpdwProcessId: Pointer): DWORD; external user32 name "GetWindowThreadProcessId";
-cut-
А тебя какой Дельфи? У меня 7.
Интересно то, что у меня работает по-всякому:
GetWindowThreadProcessId( Handle ,PrID);
GetWindowThreadProcessId( Handle ,@PrID);
PrID:=GetWindowThreadProcessId( Handle ,nil);
Да, кстати, очепятка:
GetModuleFileName(hPr,FileName,sizeOf(FileName));
Есть на свете чудеса :)
← →
DVM © (2004-07-12 23:35) [6]function _GetProcessFileNameByWindowHandle(Wnd: HWND): string;
var
hProcess: THandle;
PID: Cardinal;
FileName: array [1..MAX_PATH] of char;
PE: TProcessEntry32;
Snap: Cardinal;
OsVerInfo: TOSVersionInfo;
begin
Result := "";
GetWindowThreadProcessId(Wnd, @PID);
hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, false, PID);
OsVerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
if GetVersionEx(osVerInfo) then
begin
if OsVerInfo.dwPlatformId = VER_PLATFORM_WIN32_NT then
begin
ZeroMemory(@Filename[1], SizeOf(Filename));
GetModuleFileNameEx(hProcess, 0, @Filename[1], SizeOf(Filename));
Result := FileName;
end
else
begin
Snap := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
if Snap <> -1 then
begin
PE.dwSize:=SizeOf(PE);
if Process32First(Snap, PE) then
repeat
if PE.th32ProcessID = PID then Result := PE.szExeFile;
until not Process32Next(Snap, PE);
end;
end;
end;
CloseHandle(hProcess);
end;
← →
Ertong © (2004-07-13 00:09) [7]
> [6] DVM © (12.07.04 23:35)
Может я чего не понимаю, но зачем спользовать GetModuleFileNameEx и проверять на какой системе сидиш, если можно просто использовать GetModuleFileName?
← →
_Stalker_ (2004-07-13 02:07) [8]
> Ertong ©
У меня Delphi 5
Всем огромное спасибо за помощь, особенно DVM, за работающий исходник.
← →
VMcL © (2004-07-13 11:49) [9]>>Ertong © (13.07.04 00:09) [7]
Потому что GetModuleFileName() не умеет работать с другими процессами. А проверять, какая ОС, нужно потому, что в Win9x нет GetModuleFileNameEx().
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.037 c