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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.06.2013, 15:30   #1
bakanaev
Форумчанин
 
Регистрация: 27.03.2012
Сообщений: 438
По умолчанию Как получить *.EXE (имя файла) зная HWND окна

Система Windows 7.
Имеется HWND окна, как теперь узнать имя файла?

В Win XP работала вот эта функция
Код:
function ProcessFileName(PID: Dword): String;
var
  handle: THandle;
begin
  Result:='';
  handle:=OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ,False,PID);
  ShowMessage(IntToStr(handle));
  if Handle <> 0 Then
  begin
     try
      SetLength(Result,MAX_PATH);
      if GetModuleFileNameEx(Handle,0,PChar(Result),MAX_PATH) > 0 then
        SetLength(Result,StrLen(PChar(Result)))
      else
          Result:='';
      if GetModuleBaseNameA(Handle,0,PAnsiChar(Result),MAX_PATH) > 0 then
         SetLength(Result,StrLen(PChar(Result)))
      else
          Result:='';
     finally
       CloseHandle(Handle);
     end;
  end;

end;
Но как я понял начиная с Win Vista SP1 функция OpenProcess не отдает хендл процесса, т.к не хватает прав
bakanaev вне форума Ответить с цитированием
Старый 04.06.2013, 15:35   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

от админа придется запускать приложение тогда.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 04.06.2013, 16:12   #3
bakanaev
Форумчанин
 
Регистрация: 27.03.2012
Сообщений: 438
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
от админа придется запускать приложение тогда.
Можно и от админа, код приведенный выше не дает результата даже от админа
bakanaev вне форума Ответить с цитированием
Старый 04.06.2013, 17:27   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Цитата:
Можно и от админа, код приведенный выше не дает результата даже от админа
Ну и правильно. В чем прикол дергать сначала GetModuleFileNameEx а потом GetModuleFileNameA? Учитывая, что последняя - это упрощенная первая.

И да, есть GetProcessImageFileName, она горааздо удобнее.

Цитата:
Но как я понял начиная с Win Vista SP1 функция OpenProcess не отдает хендл процесса, т.к не хватает прав
Опять же бред. Все нормально открывает и работает.
Надо или не надо права для программы, решает не система, решете только вы сами, поставив requareAdministrator в манифесте проекта.
Система может вам дать пинка, через GetLastError сказав "Отказано в доступе".

Последний раз редактировалось Человек_Борща; 04.06.2013 в 17:30.
Человек_Борща вне форума Ответить с цитированием
Старый 04.06.2013, 18:38   #5
Dik0n
 
Регистрация: 26.11.2012
Сообщений: 6
По умолчанию

Так-же, привилегию отладчика не забываем получить - SeDebugPrivilege

Последний раз редактировалось Dik0n; 04.06.2013 в 18:42.
Dik0n вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
получить HWND wpf окна D][mon WPF, UWP, WinRT, XAML 2 19.04.2012 16:33
Как получить входящую/исходящую скороть сети/подключения? Зная его имя. TwiX Работа с сетью в Delphi 10 01.04.2010 19:17
Как найти путь к документу зная hWnd Maladoj Общие вопросы .NET 1 12.06.2009 20:26
Как получить handle главного окна, зная имя приложения? Altera Win Api 8 22.12.2008 18:52
Создание кнопки зная HWND окна(рабочий стол) WOLFak Компоненты Delphi 1 07.04.2008 07:45