правильно ли я перегоняю ресурсы из экзешника в экзешник (иконку)?

Тема в разделе "WASM.BEGINNERS", создана пользователем amvoz, 1 фев 2012.

  1. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    Друзья! Короче, куча функций в экзешнике, все завершаются без ошибок, а ничё не перегоняется, не знаю даже, с чего начать.

    В общем, так, имеется два простых-простых экзешника ra_0.exe и ra_1.exe, в каждом мз котором ресурсов по ОДНОЙ иконке, вот так выглядит картина, если получать список любого, например ra_0.exe:

    Код (Text):
    1. Имя типа в виде числа 3
    2. Имя ресурса в виде числа 1
    3. Имя языка в виде числа 409
    4.  
    5. Имя типа в виде числа 14
    6. Имя ресурса строчное MAIN
    7. Имя языка в виде числа 409
    ...То есть как я ни надеялся, что будет ОДИН ресурс (иконка), получается почему-то два (почему, спрашивается? Ну да чёрт с ними, может, так надо). Ну вот, начать с того, что я перегоняя иконку из ra_0.exe в ra_1.exe, я перегоняю ОБА ресурса, а может надо один? Например первый или второй, чёрт его знает.

    (Опять же сразу вопрос, ну он может не важен, ну чтобы тему отдеьную не кропать- а язык-то ту при чём? Я вообще сперва считал что ресь идёт о языке программирования, а оказывается что это английский язык или какой там. Короче, 409 означает, что иконка нарисована у меня на английском языке, вот как!)
     
  2. Sunzer

    Sunzer Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    256
    А вопрос в чем? Почему в файле два RT_ICON?

    Потому что в нем два RT_ICON :)

    К примеру для RT_STRING, программа загружает строки с нужным языком, исходя из текущего языка системы. Применительно к RT_ICON допустим 409 флаг америки, 419 флаг России.
     
  3. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    Ну, во-первых, это неправда. В файле один RT_ICON И один RT_GROUP_ICON
    Код (Text):
    1. Имя типа в виде числа 3
    Код (Text):
    1. #define RT_ICON MAKEINTRESOURCE(3)
    +++++++++++++++++++++++++
    Код (Text):
    1. Имя типа в виде числа 14
    Код (Text):
    1. #define RT_GROUP_ICON MAKEINTRESOURCE(14)
    +++++++++++++++++++++++++
    А вопрос заключается, дабы перегнать иконку, ну чтобы видно было иконку, чтобы я смотрел на файл ra_1.exe и видел там ту же иконку, что и на файле ra_0.exe, надо два ресурса перегонять или один, и если один, то какой именно?
     
  4. Sunzer

    Sunzer Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    256
    Вам ваша программа так и перечисляет:

    Код (Text):
    1. Имя типа в виде числа 3
    2. Имя типа в виде числа 14
    Код (Text):
    1. RT_ICON = 3,
    2. RT_GROUP_ICON = 14,
    То что отображает эксплорер это первая группа иконок(RT_GROUP_ICON) если такого типа ресурса нет, то иконка не отображается.

    Как с помощью WinAPI делать я не знаю, т.к. у меня свой модуль который сам во всем этом работает, но примерно нужно дергать первую RT_GROUP_ICON из исходного файла, смотреть в ней имена иконок(порядковые номера в RT_ICON) и копировать их в конечный файл, затем скопировать сам RT_ICON_GROUP.


    А вообще есть LoadIcon(), не знаю как с ней работать, и для этого ли она:
    http://msdn.microsoft.com/en-us/library/windows/desktop/ms648072(v=vs.85).aspx
     
  5. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    А перегонять-то что?
    Про LoadIcon я знаю, так опять с ней тыкаться как слепой котёнок, нигде кода рабочего нет, с одним уж разобраться надо.
     
  6. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    Sunzer
    Есть ещё LANG_NEUTRAL, что, применительно к иконкам, выглядит наиболее логично.

    Аффтару темы, возможно, пригодится сикретный и превадный цодес из аттача. Там, правда, не совсем то, а именно замена главной иконки EXE на произвольную из файла .ICO, а не из другого .EXE, но как материал для размышления сгодится.