Вниз
Скачать: CL | DM;

Путь к программе   Найти похожие ветки 

← →
_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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.024 c
3-1090920985
ONIK
2004-07-27 13:36
2004.08.22
Help!!! Динамическое создание БД ??????


14-1091652820
Soft
2004-08-05 00:53
2004.08.22
Нам не страшен рыжий Чубайс, или рабочий ВД второго рода.


4-1089200295
Profffff
2004-07-07 15:38
2004.08.22
Трабл с CreateThread ..... Plz, help!


3-1090749396
a3a3ello
2004-07-25 13:56
2004.08.22
InterBase -> Firebird


3-1091195736
Koala
2004-07-30 17:55
2004.08.22
Активные подключения




   Наверх