Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.22;
Скачать: 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 вся ветка

Текущий архив: 2004.08.22;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.034 c
11-1079105829
McSimm
2004-03-12 18:37
2004.08.22
Внимание! Сайт переезжает на новый хостинг.


1-1092046600
mikey
2004-08-09 14:16
2004.08.22
Добрый день. Спомощью этого кода я обрезаю строки до


8-1086513698
ЫШО
2004-06-06 13:21
2004.08.22
StretchDraw


1-1091605973
Молодой
2004-08-04 11:52
2004.08.22
Почему UpperCase не работает с кирилицой и чем её модно заменить?


3-1091118297
cherrex
2004-07-29 20:24
2004.08.22
IBDataSet