Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
1-1092067355
sdw_syscoder
2004-08-09 20:02
2004.08.22
Как запустить программу с высоким приоритетом?


14-1091625245
Кириешки
2004-08-04 17:14
2004.08.22
Как размагнитить монитор?


14-1091292086
Knight
2004-07-31 20:41
2004.08.22
Люди... напишите полезные утилиты в пределах 5 метров...


3-1091032153
Wolfram
2004-07-28 20:29
2004.08.22
Проблема с like при переходе с парадокса на аксес


1-1091713019
DimonNew
2004-08-05 17:36
2004.08.22
ListBox &amp; Multiselect





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский