Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> GetModuleFileNameEx 
V
    Опции темы
Ak47black
  Дата 15.5.2007, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: нет
Всего: 0



Здраствуйте.
Чета невыходит у меня определить путь запушенного окна что-бы потом иконку извлеч, вот код 
Код

var
  Wnd : hWnd;
  buff: array [0..127] of Char;
  lpFilename: string;
begin
  ActiveAppList.Clear;
  Wnd := GetWindow(Handle, gw_HWndFirst);
  while Wnd <> 0 do
  begin {Íå ïîêàçûâàåì:}
    if (Wnd <> Application.Handle) and IsWindowVisible(Wnd) and (GetWindow(Wnd, gw_Owner) = 0) and (GetWindowText(Wnd, buff, sizeof(buff)) <> 0) then
    begin
      GetWindowText(Wnd, buff, sizeof(buff));

      GetModuleFileNameEx(Wnd, 0, PChar(lpFilename), MAX_PATH); //Тут ошибка
      with ActiveAppList.Items.Add do
      begin
        Caption:= StrPas(buff);
      end;
    end;
    Wnd := GetWindow(Wnd, gw_hWndNext);
  end;
  ActiveAppList.ItemIndex := 0;
end;

Помогите исправить код.

Добавлено через 11 минут и 32 секунды
Нашол грубую ошибку
еше надо
Код

      SetLength(lpFilename, MAX_PATH);

Но всеровно возврашает хлам.

Это сообщение отредактировал(а) Ak47black - 15.5.2007, 19:10
PM MAIL   Вверх
Ak47black
Дата 15.5.2007, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: нет
Всего: 0



Все решил
Код

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;

PM MAIL   Вверх
MetalFan
Дата 15.5.2007, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 16
Всего: 128



Ak47black, а CloseHandle пушкин будет вызывать?
Цитата(MSDN)
When you are finished with the handle, be sure to close it using the CloseHandle function.



--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Gwire
Дата 7.6.2012, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 216
Регистрация: 7.8.2007
Где: Николаев

Репутация: нет
Всего: 4



Что это - "GetModuleFileNameEx"?
Сначала я подумал что может быть я использую старую версии Delphi (D7).  
И в ней еще не реализована эта функция. (По аналогии с "GetConsoleWindow")
Но по дате создания темы могу предположить что версия D7, в принципе, не такая уж и старая была, на тот момент.

И я не нашел ее в kernel32.dll. "GetModuleFileName" имеется а с "Ex" нет.

На MSDN нашел описание этой функции GetModuleFileNameEx
Там явно не описано в какой ddl она лежит но по имени psapi.h предположил что это psapi.dll.
И действительно есть такая dll и в ней есть "GetModuleFileNameExA".
Написал следующее:
Код

function GetModuleFileNameEx(hProcess: THandle; hModule: THandle;
  lpFilename: PChar; nSize: Cardinal): Cardinal; external 'psapi.dll' name 'GetModuleFileNameExA';

Но приведенный код:
Цитата(Ak47black @  15.5.2007,  19:34 Найти цитируемый пост)
Все решил

Выдает ошибку: "Access violation at address 76AFDBEF in module 'KERNELBASE.dll'. Write of address 004EFF99"

Вопрос к тем кто использует эту функцию: А как Вы реализуете подключение к функции "GetModuleFileNameEx"?

PM MAIL   Вверх
Чучмек
Дата 7.6.2012, 11:55 (ссылка) |  (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

Репутация: 7
Всего: 41



Ты функцию неправильно объявил, все WinAPI stdcall 
Код

function GetModuleFileNameEx(hProcess: THandle; hModule: THandle;
  lpFilename: PChar; nSize: Cardinal): Cardinal;stdcall external 'psapi.dll' name 'GetModuleFileNameExA';





--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
Gwire
Дата 7.6.2012, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 216
Регистрация: 7.8.2007
Где: Николаев

Репутация: нет
Всего: 4



Упс. Вот это да. Такого я не ожидал.
smile Да мой промах. Ошибки больше нет.
Но... 
Цитата(Ak47black @  15.5.2007,  19:03 Найти цитируемый пост)
Но всеровно возврашает хлам.

А именно знак вопроса "?".
Ну да ладно - это уже результат. =)
--------
Сделал Rebuild - функционирует корректно.
Спасибо


Это сообщение отредактировал(а) Gwire - 7.6.2012, 12:09
PM MAIL   Вверх
Чучмек
Дата 7.6.2012, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

Репутация: 7
Всего: 41



Цитата(Gwire @  7.6.2012,  12:04 Найти цитируемый пост)
А именно знак вопроса "?".

form1.Caption:= GetAppFileName(form1.Handle);


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0773 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.