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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.02.2014, 11:15   #11
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

Вот именно, что и возвращает именно индекс ресурса, а не его имя!
Ваша реализация на С++ в Delphi:
Код:
var
  iriName:stringl
...
        if (HiWord(Cardinal(lpszName))<>0) then
          iriName:=lpszName
        else
          iriName:=Format('#%d',[LOWORD(lpszName)]);
Выдает тот же индекс числовой, НЕ ИМЯ!
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 14.02.2014, 12:40   #12
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

В D7 в демках есть проект c исходниками resxplor, он вынимает имена иконок
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 14.02.2014, 13:16   #13
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

В том то и дело, что нужно понять как это делается на чистом АПИ. А в этих исходниках черт пойми что понаписано. Нестандарт. Или же я не прав?
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 14.02.2014, 14:35   #14
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от 3D Hunter Посмотреть сообщение
В том то и дело, что нужно понять как это делается на чистом АПИ.

Код:
if (IS_INTRESOURCE(lpName))
   LPCTSTR name = itoa((int) lpName);
else
   LPCTSTR name = lpName;
waleri вне форума Ответить с цитированием
Старый 14.02.2014, 14:49   #15
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Да это чистое АПИ как раз игнорит имена иконок. Ребята из борланд просто в ресурсе по смещениям шарились для поиска имени
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 14.02.2014, 14:50   #16
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

waleri, я отписался в посте #11 про этот код. Это проверено. Старшее слово всегда равно нулю, поэтому всегда возвращается идентификатор ресурса вместо его строкового имени.
Тогда поясните и ткните в точку моей тупости. Бьюсь 4й день, идеи кончились. Посмотрел в сэмплах РезЭксплор пример... но хочется реализовать на чистом WinAPI, чтобы быть независимым от констант и РЕ-хэдеров. Это стало почти возможным, как видно.
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 14.02.2014, 15:45   #17
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

нарыл в нете такой модуль:<<линк>>
Интересует функция
Код:
function GetNameIcon(update: dword; ind: Integer) : WideString; stdcall;
Но она не выдает ожидаемого результата... Кто-нибудь сталкивался с этим модулем? Что передавать в Update? Хендл открытого файла с помощью LoadLibrary()?
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 14.02.2014, 15:53   #18
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Откройте все же список с *иконами* в res hacker и посмотрим какие он там имена увидит - на скриншоте reshacker у вас НЕ иконы.
waleri вне форума Ответить с цитированием
Старый 14.02.2014, 16:08   #19
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

Да иконки то я извлекаю успешно. Код выложил выше. Я понимаю что это не иконки. И почему-то РезХакер определил имена ресурсов иконок в секцию GROUP_ICON в дереве на скрине. Понимаю что имена ресурсов (если они есть) лежат в другой области. Есть предположение, что нужно стучаться к заголовочным структурам ресурсов на этапе вызова FindResource и LoadResource, а именно <<<тут>>>
Как я понял, метод FindResource возвращает указатель из NT_HEADER'а на указатель к ресурсу, оперируя внутренними заголовочными структурами и сдвигами по ним. LoadResource возвращает указатель непосредственно на заголовочную структуру ресурса. А LockResource возвращает указатель на данные самого битового образа в случае RT_ICON.
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 14.02.2014, 16:24   #20
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Т.е. у вас есть вызов EnumResourceName с типом ресурсов RT_ICON_GROUP и там *нет* имен, я правильно понял?
Скиньте-ка файл *из* которого пытаетесь вытащить ресурсы, а то мне стало интересно.
waleri вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получить имена физических дисков. Ant-kul C# (си шарп) 2 16.12.2012 15:08
Получить имена всех листов в книге Temnota Microsoft Office Excel 6 26.12.2009 07:36
Получить список ресурсов и сохранить их отдельно Alex Cones Общие вопросы Delphi 16 14.11.2009 13:45
Получить HWND рабочего стола без иконок Son Win Api 4 24.06.2009 15:57
Получить доменные имена lamerx Работа с сетью в Delphi 1 10.10.2008 16:57