Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.12.2008, 14:29   #1
VVM
Форумчанин
 
Аватар для VVM
 
Регистрация: 06.06.2007
Сообщений: 282
По умолчанию Как определить путь чужого приложения?

Есть чужое приложение. Знаем его handle. А нужно узнать его путь на жестком диске. При этом желательно не перерывать поиском весь жесткий диск =)
Задача в том, чтобы сохранять DeskTop со всеми открытыми приложениями. А потом его открывать - при этом все приложения запускаются, которые были запущены в момент сохранения.

Заранее спасибо.
Не важно, как часто вы падаете. Важно, как часто вы поднимаетесь. Винс Ломбарди.

Последний раз редактировалось VVM; 02.12.2008 в 18:12.
VVM вне форума Ответить с цитированием
Старый 02.12.2008, 18:15   #2
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию Получить имя файла программы через хэндл окна

Код:
function GetModuleFileNameExW(hProcess:THandle; hModule:HMODULE; lpFilename:PWideChar; nSize:DWORD):DWORD; stdcall; external 'PSAPI.DLL'

function WindowGetEXE(wnd:HWND):string;
var
 wt:array[0..MAX_PATH-1] of WChar;
 prc:THandle;
 prcID:cardinal;
begin
 result:='';
 if GetWindowThreadProcessID(wnd,prcID)<>0 then
 begin
  prc:=OpenProcess(PROCESS_ALL_ACCESS,false,prcID);
  if prc<>0 then
   if GetModuleFileNameExW(prc,0,wt,MAX_PATH*2)<>0 then result:=wt;
  CloseHandle(prc);
 end
end;

Последний раз редактировалось rpy3uH; 02.12.2008 в 18:18.
rpy3uH вне форума Ответить с цитированием
Старый 02.12.2008, 18:19   #3
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Цитата:
Сообщение от VVM Посмотреть сообщение
Есть чужое приложение. Знаем его handle. А нужно узнать его путь на жестком диске. При этом желательно не перерывать поиском весь жесткий диск =)
Задача в том, чтобы сохранять DeskTop со всеми открытыми приложениями. А потом его открывать - при этом все приложения запускаются, которые были запущены в момент сохранения.

Заранее спасибо.
Можно сделать так:
Код:
Uses
   Psapi;
function GetAppFileName (hWnd: THandle) :string;
var dPID: dWord;
    hHandle: THandle;
begin
  GetWindowThreadProcessId(hWnd, @dPID);
  SetLength (Result, MAX_PATH);
  hHandle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, True, dPID);
  if GetModuleFileNameEx(hHandle, 0, PChar (Result), MAX_PATH) > 0
    then SetLength (Result, StrLen (PChar (Result)));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.text:= GetAppFileName(application.Handle);
end;
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Старый 02.12.2008, 18:22   #4
VVM
Форумчанин
 
Аватар для VVM
 
Регистрация: 06.06.2007
Сообщений: 282
По умолчанию

Спасибо большое! Разобрался. Все работает =)
Не важно, как часто вы падаете. Важно, как часто вы поднимаетесь. Винс Ломбарди.
VVM вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить путь к файлу Manya Общие вопросы Delphi 5 22.05.2012 16:12
Как определить класс стороннего приложения. Son Win Api 6 25.11.2008 11:52
Как определить координаты иконки приложения в system tray? SkAndrew Общие вопросы Delphi 5 18.08.2008 16:52
Как получить путь к БД XPAiN БД в Delphi 2 08.11.2007 08:51
Как вытащить путь к файлу UnD)eaD)Snake Общие вопросы Delphi 13 20.08.2007 22:09