View previous topic :: View next topic |
Author |
Message |
iteg
Joined: 01 Dec 2011 Posts: 95
|
(Separately) Posted: Sat Nov 23, 2024 14:20 Post subject: |
|
|
1)
Quote: | Начнем явно с бага - на вкладке Ресурсы внизу дерева есть панель со столбцами "Свойство \ Значение" ... Чтобы полосы прокрутки не появлялись. |
Да, знаю про это. Добавил в список для решения.
2)
Quote: | Ок, раз просто 1 это вроде как прямое указание на стандартный тип ресурса- пусть так и пишется |
1 - это принятый Microsoft идентификатор, а не имя.
https://learn.microsoft.com/en-us/windows/win32/menurc/versioninfo-resource
Описание параметра "versionID" - "Version-information resource identifier. This value must be 1."
3)
Формат вывода типа ресурса - "<оригинальный тип ресурса> (<интерпретируемый тип ресурса> (<текстовое имя интерпретируемого тип ресурса>))".
Во время построения дерева ресурсов плагин анализирует каждый тип ресурса и, если необходимо, задает новый.
Например, типа ресурса PNG нет, ресурс имеет тип RT_BINARY = 0 (не рассматриваем иконки), но я его интерпретирую как свой тип RT_PNG = 27. Получается - "0 (27 (PNG))".
Круглые скобки использую для отображения количества элементов или для расшифровки смысла значения перед ними.
С 1 по 25 константы стандартные, после 25 - мои.
RT_CURSOR, RT_STRING, RT_VERSION и т.д.
Стандартные константы описаны, если установлена Visual Studio, например, в:
C:\Program Files (x86)\Windows Kits\10\Include\10.0.26100.0\um\WinUser.h
4)
Quote: | Для раздела VS_FIXEDFILEINFO походу добавился вывод поля File Date |
Это рудимент для старых ОС. Насколько помню, использовалось загрузчиком исполняемых файлов для решения проблемы версионности и зависимостей.
Структура tagVS_FIXEDFILEINFO в:
C:\Program Files (x86)\Windows Kits\10\Include\10.0.26100.0\um\verrsrc.h
или
https://learn.microsoft.com/en-us/previous-versions/ms915510(v%3dmsdn.10)
5)
Quote: | А вот данные про Язык и Кодовую страницу - нет, не понимаю.
Ведь из справок и глазками в редакторе RC-файла мы же четко поняли, что ВСЯ инфа о языке присутствует ЛИШЬ
внутри этого ресурса в полях секции "StringFileInfo" в заголовке BLOCK "lang-charset".
|
Описание структуры секции ресурсов:
https://learn.microsoft.com/en-us/windows/win32/debug/pe-format#the-rsrc-section
6)
Quote: | Ну и скобочках вижу Английский (США). А потом идет кодовая страница "0 - ANSI - кириллица" |
Согласен, что сбивает понимание, но такой результат выдает ОС. "ANSI" - определяет 8-битную кодировку, "кириллица" - определяет использование "Cyrillic script" для таких языков как русский, украинский, белорусский, болгарский, сербская кириллица, македонский и т.д. Сопоставимо с Windows-1251.
По умолчанию поле CodePage в ресурсе 0.
7)
Quote: | А то и для Иконок вдруг появляются эти блоки, и инфа о том, что не вяжется с графический примитивами... |
Каждый ресурс имеет "Level 3 - Language" и поле CodePage.
8 )
Quote: | НО когда мы зайдем в подпункты этого подменю - мы увидим раздельно "Свойство", раздельно ОПЯТЬ "Значение". Т.е. как бы масломасляное. |
Этот элемент контекстного меню строится динамически и имена подэлементов меню берутся из названий колонок списочного элемента. "Копировать значение" это выполняемое действие, далее подэлемент меню "Значение" - это заголовок соответствующей колонки, из которой пользователь будет копировать данные.
9)
Quote: | Там вот НЕТ в таблицах языков 0 и 9! |
Предполагаю, что это или рудименты или несут системное значение. Подстветку пока не реализовал.
10)
Quote: | НО правда по прежнему висит сугубо уже теоретический, но тем не менее вопрос - это как же они умудрились просрать справку, что по факту надо делать НЕ ТО, что там описано!? |
Занимаясь разбором системных структур Windows ОС, понял, что на официальную справку полностью полагаться нельзя. Описания структур на сайте Microsoft часто содержат ошибки, неточности или только общее описание. Приходится сверять с описанием в h-ках, искать в других источниках, реверсировать приложения и системные модули и т.д.
11)
Quote: | НО! вот где и как вдруг оказалось расписанным, что именования ресурсов - ВСЕ имена ресурсов - имеют какой-то язык и кодостраницу? |
Описание структуры секции ресурсов:
https://learn.microsoft.com/en-us/windows/win32/debug/pe-format#the-rsrc-section
12)
Quote: | Та самая панелька, что я описывал как имеющую баг относительно раздвигания ее размеров по высоте - кажется
становится все менее полезной?
|
Удобна при большом количестве элементов. Не надо запоминать идентификатор, менять режим отображения и искать в списке ресурсов для получения свойств.
12)
Quote: | Раскрываю этот один узел и вижу элемент.... А откуда у него имя "7"? |
STRINGTABLE
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
BEGIN
0 "Test1"
11 "Test2"
16 "Test3"
100 "Test4"
101 "Test5"
<идентификатор строки> "строка"
END
Будет 3 блока: 1, 2 и 7.
Ресурсный компилятор для STRINGTABLE создает блоки по 16 элементов и автоматически проставляет блокам индексы/имена. Индексация начинается с 1.
Т.е. идентификаторы строк с 0 по 15 - это блок с индексом 1.
16 по 31 - это блок с индексом 2.
Например, берем строку с идентификатором 0xFE90 делим на 16 = 4073 + 1 = 4074 индекс блока. |
|
Back to top |
|
 |
Destiny
Joined: 15 Dec 2015 Posts: 272
|
(Separately) Posted: Thu Dec 05, 2024 20:50 Post subject: |
|
|
День добрый!
1) Хорошо, что в ТУДУ листе. причем сразу можно будет еще и в пп. 3) тут глянуть - я там кое-что расписал.
2) А вот тут стоп)) минутку внимания... Да, я очень даже в курсе ЧЕМ по сути эта цифра является.
НО на секундочку - мы же про дерево говорим? В котором предоставлены некоторые данные.
И у данных - как не отнекивайся - есть имя в дереве. И это название того узла/элемента, о котором идет речь.
Ну и конечно же в моих текстах эти понятия точное и обобщенное=ИМЯ - слегка перемешиваются. Но тут имхо
по другому просто и не получится. Поэтому просто давайте согласимся, что ИМЯ в дереве ресурсов - имеет место
быть. А чем оно по сути в недрах РЕ-формата/структур версионности является - это уже слегка вторичный момент.
3) И вот плавно мы переходим к именам данных, использованных в панельке. И в узлах дерева.
И суть вашего уточнения в том, что я неверно подошёл к делу анализа той текстовой инфы в том ее виде, в котором
я это увидел сейчас в панельке и в дереве. Так вот, если оказывается есть двойной смысл Формата вывода типа ресурса:
Quote: | "<оригинальный тип ресурса> (<интерпретируемый тип ресурса> (<текстовое имя интерпретируемого тип ресурса>))". |
ТО очень само по себе напрашивается предложение выводить НЕ в одной ячейке данные! Если речь про панельку. Уж тогда
и используйте этот табличный формат ввода на полную! Делайте ДВЕ колонки значений: Общепризнанное и Плагинчатое, ну
или внутреннее представление. Чтобы одним взглядом можно было понять:
Code: | Общепризнанное || Внутреннее
значение || значение
"0 (RT_BINARY)" || "27 (PNG)" |
типа как-то так. Потому как идея с инфой за скобочками - уж больно тесно вяжется с просто кол-вом, потому как вы же
именно эту концепцию для имён типов ресурсов используете и пишите об этом. Типа: Dialog (1), Icon Group (2).
4) Quote: | Для раздела VS_FIXEDFILEINFO походу добавился вывод поля File Date | Quote: | Это рудимент для старых ОС. |
ХМ, ну вроде даже если судить по этому H-файлу, что вы указали, и по ссылке, что вы дали - может и не стоит даже эти нули ТАК
чётко выписывать? Просто имя поля указать - а суть текстом так и подтвердить - мол, данные нулёвые, де-факто не задаваемые.
И уж тем более не пытаться перевести их какую-то правильную дату... (01.01.1601 3:00:00) - это дичь какая-то)))
5) Вот тут не допонял по-прежнему. Точнее наверно исходник виноват - он не очень-то доходчиво доносит инфу о факте наличия
языковых параметров. Т.е. да-они есть. В принципе. В PE формате в секции .rsrc)) Да.
НО вот В ДЕТАЛЯХ - у какого элемента и в каком виде ТОЧНО эта инфа должна быть прописана - я вот в этой статье не увидел.
НО! на самом деле еще раз - можно сейчас не говорить о наличии или неналичии этой инфы - вопрос все равно в том, что
в редакторе ресурсов той же VisualStudio я могу и ДОЛЖЕН задавать язык для того или иного ресурса. Это факт. НО! я не могу
тогда найти среди инфы, что выдает ваш плагин: МОЙ выбор про языки - для диалога IDD_ABOUTBOX я выбрал русский.
НО нигде ни слова о русском в выводе плагина про него. Сплошной инглиш типа у этого ресурса... Разве это не нонсенс?
По той же ранее приведенной ссылке https://lief.re/doc/latest/tutorials/07_pe_resource.html - там четко указано, что есть варианты в
выводе этих языков - там и английский и французский вперемешку представлены на картинке. Логично что и среди ресурсов в моем
файле так же должны фигурировать и английский (да, в большинстве случаев), и русский (кое-где, но всё же).
А тут нет ничего... Вот как это выходит?
6) Похоже это явно продолжение 5-го. Смотрите - тот факт, что 0 на русской винде ассоциируется с "ANSI - кириллица", или Windows-1251
ЭТО понятно и приемлемо. Ибо это просто результат конвертации цифры 0 в расширенное текстовое представление об языке и кодостранице,
что будет получаться через WinAPI функцию GetACP.
Вопрос по прежнему - да почему же это 0??? Ведь в редакторе ресурсов явно использовались вот такие связки:
LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
и
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
и даже если смотреть числовые константы, то это (https://learn.microsoft.com/en-us/previous-versions/ms776294(v=vs.85)):
LANGUAGE 0x19 0x01
LANGUAGE 0x09 0x01
Нуля нет нигде! Чтобы он появился в редакторе ресурсов надо было использовать конструкцию вида:
LANGUAGE LANG_NEUTRAL SUBLANG_NEUTRAL
но этого же нет! Нет упущенного значения где-либо, чтобы можно было думать, что это замещается по дефолту на 0.
И если взять ваш же, приведённый в пример, файл mediacreationtool.exe - то там вдруг СМОГЛИ возникнуть все языки!
Вот выбираем любой диалог и вуаля! Там перечислены все его вариации в разных языках. НО! в нашей проге, что я
скинул: FontsListing.exe, я точно так же задал этот диалог! Да, он один, да, только в русском. НО он задан же ТОЧНО
ТАКЖЕ как и для ресурсного файла mediacreationtool.exe через:
/////////////////////////////////////////////////////////////////////////////
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_RUS)
LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
....
#endif // Русский (Россия) resources
/////////////////////////////////////////////////////////////////////////////
Но плагин же упорно показывает только Инглиш как язык...
7) Ок, принимается инфа. Вопрос получается лишь в её считываемости и интерпретируемости, выходит)))
Есть просто подозрение, что наиболее четко и понятно вы прорабатываете теперь именно множественные включения
однотипных ресурсов на разных языках. Вроде того же диалога "О программе/библиотеке" - и если он задан ХОТЯ БЫ
для двух языков - то тогда парсится все чётко и точно. А вот если он задан лишь для одного... То почему-то срабатывает
лишь дефолтность в парсере, т.е. всё сваливается до уровня как будто бы "LANGUAGE LANG_NEUTRAL SUBLANG_NEUTRAL"
задано и ничего более, ИМХО. Хотя это и точно не так.
8 ) Так, тут похоже "Наша битва будет легендарной (С)!"
Quote: | Этот элемент контекстного меню строится динамически и имена подэлементов меню берутся из названий колонок
списочного элемента. "Копировать значение" это выполняемое действие, далее подэлемент меню "Значение" - это заголовок
соответствующей колонки, из которой пользователь будет копировать данные. |
и моё:
Quote: | в контекстном меню для элементов этого поля есть пункт "Копировать значение".
НО когда мы зайдем в подпункты этого подменю - мы увидим раздельно "Свойство", раздельно ОПЯТЬ "Значение".
Т.е. как бы масломасляное. Предлагается "Копировать ячейку" выводить как заголовок этого подменю. Потому как
выше вы используете "Копировать строку" |
И вот скажите, пожалуйста, а разве я НАСТОЛЬКО в сторону ушел от логики вывода данных в таблице? Подчеркну - в ТАБЛИЦЕ!
Конечно же динамически меню создаётся. Это факт. Но операции применяются к строкам/столбцам/ячейкам используемой таблицы!
И вот одно действие вы используете - "Копировать строку". Из таблицы. А потом вы хотите предложить возможность копирования и
ЭЛЕМЕНТОВ из этой же строки. А что у нас за элементы в строке таблицы? Разве не ячейки? Поэтому название всего-лишь пункта
этого меню "Копировать ячейку" вполне соответствует всем буквам и духам логики инфы, выведенной в этой таблице.
Т.е. мне надо скопировать лишь значение типа, к примеру. Это значение в колонке Значения хранится. Ну разумеется вполне логично
так и написать "Копировать значение". ИЛИ, если мы уже ВОШЛИ в подменю для элемента "Копировать ячейку", просто "Значение".
Точно так же как и у вас выводится просто "Свойство" - это другая ячейка с другой информацией. Мы и её копировать можем. Ячейку!
Разве это так нелогично и неправильно???
9) Насчет языковых констант 0 и 9. Похоже есть: https://learn.microsoft.com/en-us/previous-versions/ms776294(v=vs.85)
Ищем 0x00 и 0x09 и находим соответственно: LANG_NEUTRAL и LANG_ENGLISH в вариации {0x0c09 English (en)}
Может тогда их красивые)) текстовые обозначения рядом так же прописывать? Чтоб не искать мучительно соответствие числа-тексту.
10)11)12) - тут вроде все понятно.
И 13), который повторно расписан как 12)
Если на мой вопрос "Вообще у всех конечных элементов узлов с типами ресурсов откуда их числовые "имена"?" Вы отвечаете, что
это прерогатива Ресурсного компилятора, то... мне кажется мы немного отходим от юзер-френдли показа инфы о ресурсах. ИМХО.
Эту 7 из нашего файла для "String Table" я что - могу разве увидеть в ... блин, даже не знаю куда лезть, чтобы её как 7 увидеть))).
Ведь даже в двоичном представлении в соответствующем разделе .rsrc секции как я понимаю - там совсем не 7 хранится. Верно же?
Да хотя даже если так - неужели мне как человеку - важно видеть это как ?ИМЯ?, которое создается по какому-то внутреннему же
алгоритму? Откуда инфа о "Ресурсный компилятор для STRINGTABLE создает блоки по 16 элементов и автоматически проставляет
блокам индексы/имена. Индексация начинается с 1", кстати?
Может все же практичнее и полезнее псевдоимена что ли указывать?
Ну ли все же именами считать их типы (Имя для "String Table" = 6), а в таблице выводить вместо колонки "ТИП" обычный "ID"=7.
Last edited by Destiny on Mon Dec 30, 2024 21:37; edited 4 times in total |
|
Back to top |
|
 |
iteg
Joined: 01 Dec 2011 Posts: 95
|
(Separately) Posted: Sat Dec 28, 2024 16:43 Post subject: |
|
|
Destiny
1) Quote: | 1) Хорошо, что в ТУДУ листе. |
Для данного списочного компонента заблокировал скроллбар.
2) Quote: | 3) И вот плавно мы перехожим к именам данных, использованных в панельке |
Если оригинальный тип ресурса не совпадает с интерпретируемым, то вывожу эти значения через /.
3) Quote: | 4) (01.01.1601 3:00:00) - это дичь какая-то |
Согласен, что данное поле не заполняется для современных приложений. Но для старых приложений или специфического назначения имеет значение.
4)
https://learn.microsoft.com/ru-ru/windows/win32/menurc/language-statement
Также, посмотри в файле, например, "C:\Program Files (x86)\Windows Kits\10\Include\10.0.26100.0\um\winnt.h", в блоках-комментариях (2 блока) перед константами LANG_NEUTRAL и SUBLANG_NEUTRAL.
Тестовый пример:
LANGUAGE LANG_RUSSIAN, SUBLANG_NEUTRAL
//LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
//LANGUAGE LANG_RUSSIAN, SUBLANG_SYS_DEFAULT
//LANGUAGE LANG_RUSSIAN, 3
103 DIALOGEX 0, 0, 292, 218, 0
STYLE WS_POPUP | WS_BORDER
EXSTYLE WS_EX_RIGHT | WS_EX_RTLREADING | 0x00400000
CAPTION "Error!"
FONT 8, "MS Shell Dlg", 0
BEGIN
CTEXT "Select One:", 1, 10, 10, 280, 12
PUSHBUTTON "&Retry", 2, 75, 30, 60, 12
PUSHBUTTON "&Abort", 3, 75, 50, 60, 12
PUSHBUTTON "&Ignore", 4, 75, 80, 60, 12
END
- LANGUAGE LANG_RUSSIAN, SUBLANG_NEUTRAL
0x0019 (25) (Russian), 0x0000 (0) (ANSI - Cyrillic)
- LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
0x0419 (1049) (Russian (Russia)), 0x0000 (0) (ANSI - Cyrillic)
- LANGUAGE LANG_RUSSIAN, SUBLANG_SYS_DEFAULT
0x0819 (2073) (Russian (Moldova)), 0x0000 (0) (ANSI - Cyrillic)
- LANGUAGE LANG_RUSSIAN, 3
0x0C19 (3097) (Language Neutral), 0x0000 (0) (ANSI - Cyrillic)
Для ресурса DIALOGEX изменяется только значение поля Language, а CodePage остается 0.
5) Quote: | 8 ) Так, тут похоже "Наша битва будет легендарной (С)!" |
Изменил локализации на "Копировать ячейку".
6) Quote: | Насчет языковых констант 0 и 9. |
Пометил себе в ToDo.
7) Quote: | 13) Эту 7 из нашего файла для "String Table" я что - могу разве увидеть в |
https://learn.microsoft.com/ru-ru/windows/win32/menurc/stringtable-resource
Необходимо обратить внимание на раздел "Комментарии". |
|
Back to top |
|
 |
Destiny
Joined: 15 Dec 2015 Posts: 272
|
(Separately) Posted: Mon Dec 30, 2024 21:51 Post subject: |
|
|
1)
Quote: | Для данного списочного компонента заблокировал скроллбар. |
Вы неверно поняли мой посыл о полосах. НЕ вообще их надо убрать, а позволить этой панели стать передвигаемой
по высоте! Чтобы я САМ мог растянуть ее по высоте так, чтобы полосы прокрутки пропали. САМ! а не принудительно
отключить возможность их использования!
2)
Quote: | Если оригинальный тип ресурса не совпадает с интерпретируемым, то вывожу эти значения через /. |
Я это уже увидел - и именно по этому и расписал причину: почему ЛУЧШЕ было бы сделать в табличном представлении,
а не через этот микро-символ.
Получается - Вы просто повторили: ЧТО именно вы делаете. Ну и, разве это ЛУЧШЕ воспринимается??? нежели чем
чёткое таблично-ячеистое представление? К тому же -еще раз- вывод же по сути УЖЕ идет в панельке - в виде таблицы!
Значит просто надо раскрыть её потенциал более ширше))))
3)
Quote: | Согласен, что данное поле не заполняется для современных приложений. |
А есть понимание того - КАК можно заполнить это поле сейчас? Если уж раньше как-то заполняли - то значит какие-то
функции API все же использовали? Наверное и сегодня они всё ещё должны бы срабатывать на это? Верно же?
Просто ЧТО это за волшебные команды-то такие, что смогут заполнить эти данные?
4)
Вы даёте отсылку к неким формально-официальным моментам и это понятно. НО))) вроде бы в моем изначальном посте
так же должно было быть четко выражено, что я в курсе этого формализма, но вот плагин показывает НЕ ТО, что надо!
Еще раз, ровно так как вы в тестовом примере и показываете, в нашем RC файле для ресурса Диалог в файле, что мы
вам показали: FontsListing.exe - и БЫЛО задано, что он является русским ресурсом! Именно вот как вы показываете:
Code: | LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
IDD_ABOUTBOX DIALOGEX 0, 0, 170, 62
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "О программе FontsListing"
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
ICON IDR_MAINFRAME,IDC_STATIC,14,14,21,20
LTEXT "FontsListing, Версия 1.0",IDC_STATIC,42,14,114,8,SS_NOPREFIX
LTEXT "(c) 2023",IDC_STATIC,42,26,114,8
DEFPUSHBUTTON "ОК",IDOK,113,41,50,14,WS_GROUP
END |
Всё же супер? Корректно же, Да? А тогда вопрос - а почему ваш плагин показывает, что это Английский ресурс????
И почему-то, если взять приведённый в пример вами файл mediacreationtool.exe - то там вдруг СМОГЛИ возникнуть
все языки! Заданные ТОЧНО ЖЕ ТАК ЖЕ! в своём RC-файле... Там другие языки есть, плагин их показывает, а вот
в нашем файле их вдруг почему-то уже нет... Только Инглиш((
Ну и тот момент, что CodePage остается 0 = всегда и везде - это получается ошибка современного RC-компилятора?
Или это типа следствие того, на что Вы предлагаете обратить внимание в h-файле?
// DEPRECATED: The Language ID concept is deprecated, please use
// Locale Names instead, eg: "en" instead of a LANGID like 0x09.
// See the documentation for GetLocaleInfoEx.
Вы же про это?
Т.е. получается вообще можно болт забить на то, что плагин готов будет показывать? Ибо эти константы
теперь "ничто" в логике современного API?
7)
Что-то я даже из комментариев по указанной ссылке не понял: а КАК это соотноситься с моим описанием логики того
КАК лучше бы для человека видеть эти имена/ID/ИлиЧтоТамЕщеЭтоМожетБыть?
И опять-таки - это комментарий для ЧЁТКО одного ресурса - STRINGTABLE - а я же про проблему понимания наличия
этих псведоимён/iD пишу для ЛЮБОГО ресурса. Очень странно, что "Именем" вдруг становится некая аморфная "субстанция"
из недр RC-компилятора. Даже если там внутри в бинарном виде "это" реально хранится в секции с "именем" 7, то если взять
для примера лишь только STRINGTABLE чертов, то просто человечку, желающему просто глазками пробежаться по всем
ресурсам и определить наличие нужного ему, сделать что-то понятное с ним, эта "аморфность" пользы не приносит(((
Почему же все же не именами считать их типы (Тогда "Имя" для "String Table" = 6), а в таблице выводить вместо колонки
"ТИП" обычный набор данных: "ID"=7? |
|
Back to top |
|
 |
Destiny
Joined: 15 Dec 2015 Posts: 272
|
(Separately) Posted: Fri Jan 10, 2025 17:47 Post subject: |
|
|
Собственно увидел лишь сегодня, что релизом стал 17 билд.
Проверил п.1 и да - теперь еще хуже стало с блокировкой полос панельки.
Надо разрешать передвигать за верхнюю планку эту панель по высоте вверх/вниз.
Чтобы пользователь сам выставил желаемую высоту, чтобы в ней умещались все строки с данными.
Сейчас я вижу 3 с четвертью строки. Из обычно же 5/6 ?
Ну и все остальные пункты из поста выше еще в проработке же ответов остаются)))? |
|
Back to top |
|
 |
Destiny
Joined: 15 Dec 2015 Posts: 272
|
(Separately) Posted: Wed Feb 26, 2025 17:18 Post subject: |
|
|
Поймал сегодня релиз 17.1 - большое спасибо за правку высоты списочного элемента. Теперь видно и читаемо.
Ну и было бы приятно по-человечески, если бы вы еще раз смогли по пп. 4 и 7 - что-то донести до меня)) Это из поста через один выше этого. |
|
Back to top |
|
 |
iteg
Joined: 01 Dec 2011 Posts: 95
|
(Separately) Posted: Sat Mar 15, 2025 13:34 Post subject: |
|
|
Destiny
Еще раз спасибо за обратную связь!
В новой версии исправил логическую ошибку отображения наименования кодовой страницы 0. CodePage = 0 обычно означает использование текущей системной кодовой страницы (System Default Code Page). Это та кодовая страница, которая настроена в ОС по умолчанию и используется для программ не поддерживающих Unicode. Как писал ранее, интерпретация будет зависит от установленного значения кодовой страницы по умолчанию в ОС. Полностью на своей ОС получаю название "1251 (ANSI - Cyrillic)". И в предыдущих версия подменял 1251 на значение 0. Сейчас CP 0 соответствует "0x0000 (0) (ANSI - Default)" - обобщенному названию без завязки на настройки ОС.
Quote: | Ну и тот момент, что CodePage остается 0 = всегда и везде - это получается ошибка современного RC-компилятора |
По умолчанию 0, но можно явно задать. Например, в папке ТС 11.51 TC7Z64.DLL CP="0x04E4 (1252) (ANSI - Latin I)".
Каждый ресурс описывается структурой _IMAGE_RESOURCE_DATA_ENTRY. См. C:\Program Files (x86)\Windows Kits\10\Include\10.0.26100.0\um\winnt.h. Там также есть комментарий. В ней и задано поле CodePage. Плагин отображает значение из данного поля для каждого ресурса.
В свое тестовое приложение добавил описание ресурса IDD_ABOUTBOX DIALOGEX с заданием LANG_RUSSIAN и SUBLANG_DEFAULT.
Получил результат на версии 3.17.2.0:
https://ibb.co/N6xmJFj5
Язык и кодовая страница отображаются корректно.
Каждый ресурс также описывается структурой _IMAGE_RESOURCE_DIRECTORY_ENTRY, в которой определяется, что ресурс имеет ID или строковое имя.
Ресурс StringTable организован в блоки, каждый из которых содержит до 16 строк. Это такой формат хранения данных, который был определен и им необходимо пользоваться. |
|
Back to top |
|
 |
Destiny
Joined: 15 Dec 2015 Posts: 272
|
(Separately) Posted: Wed Mar 19, 2025 17:02 Post subject: |
|
|
 Вот полный код ресурсов для нашего тестового приложения FontsListing, которое я уже ранее вам отсылал.
Code: | // Microsoft Visual C++ generated resource script.
//
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#ifndef APSTUDIO_INVOKED
#include "targetver.h"
#endif
#define APSTUDIO_HIDDEN_SYMBOLS
#include "windows.h"
#undef APSTUDIO_HIDDEN_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// Русский (Россия) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_RUS)
LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDI_FONTSLISTING ICON "FontsListing.ico"
IDI_SMALL ICON "small.ico"
/////////////////////////////////////////////////////////////////////////////
//
// Menu
//
IDC_FONTSLISTING MENU
BEGIN
POPUP "&Файл"
BEGIN
MENUITEM "Вы&ход", IDM_EXIT
END
POPUP "&Справка"
BEGIN
MENUITEM "&О программе...", IDM_ABOUT
END
END
/////////////////////////////////////////////////////////////////////////////
//
// Accelerator
//
IDC_FONTSLISTING ACCELERATORS
BEGIN
"?", IDM_ABOUT, ASCII, ALT
"/", IDM_ABOUT, ASCII, ALT
END
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
IDD_ABOUTBOX DIALOGEX 0, 0, 170, 62
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "О программе FontsListing"
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
ICON IDR_MAINFRAME,IDC_STATIC,14,14,21,20
LTEXT "FontsListing, Версия 1.0",IDC_STATIC,42,14,114,8,SS_NOPREFIX
LTEXT "(c) 2023",IDC_STATIC,42,26,114,8
DEFPUSHBUTTON "ОК",IDOK,113,41,50,14,WS_GROUP
END
/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO
BEGIN
IDD_ABOUTBOX, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 163
TOPMARGIN, 7
BOTTOMMARGIN, 55
END
END
#endif // APSTUDIO_INVOKED
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE
BEGIN
"#ifndef APSTUDIO_INVOKED\r\n"
"#include ""targetver.h""\r\n"
"#endif\r\n"
"#define APSTUDIO_HIDDEN_SYMBOLS\r\n"
"#include ""windows.h""\r\n"
"#undef APSTUDIO_HIDDEN_SYMBOLS\r\n"
"\0"
END
3 TEXTINCLUDE
BEGIN
"\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,7,0,77
PRODUCTVERSION 1,7,0,77
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x4L
FILETYPE 0x1L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904E4"
BEGIN
VALUE "CompanyName", "'YA MOGU' LLC"
VALUE "FileDescription", "Main GUI application of local FONTs operation toolkit, 32-bit Release"
VALUE "FileVersion", "1.7.0.77"
VALUE "InternalName", "FontsListing"
VALUE "LegalCopyright", "Copyright (C)2022-2025 'YA MOGU' LLC"
VALUE "LegalTrademarks", "Windows is a trademark of Microsoft Corporation"
VALUE "OriginalFilename", "FontsListing.exe"
VALUE "ProductName", "Tool for integrating an additional fonts into OS"
VALUE "ProductVersion", "1.7.0.77"
END
BLOCK "041904E3"
BEGIN
VALUE "CompanyName", "ООО 'Я МОГУ'"
VALUE "FileDescription", "Основное GUI приложение инструментария работы с локальными ШРИФТами, 32-bit Release"
VALUE "FileVersion", "1.7.0.77"
VALUE "InternalName", "FontsListing"
VALUE "LegalCopyright", "Copyright (C)2022-2025 ООО 'Я МОГУ'"
VALUE "LegalTrademarks", "Windows является товарным знаком корпорации Майкрософт"
VALUE "OriginalFilename", "FontsListing.exe"
VALUE "ProductName", "Инструмент для интеграции дополнительных шрифтов в ОС"
VALUE "ProductVersion", "1.7.0.77"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1252, 0x419, 1251
END
END
/////////////////////////////////////////////////////////////////////////////
//
// String Table
//
STRINGTABLE
BEGIN
IDS_APP_TITLE "FontsListing"
IDC_FONTSLISTING "FONTSLISTING"
END
#endif // Русский (Россия) resources
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// Английский (США) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
IDR_VERSION2 VERSIONINFO
FILEVERSION 1,0,0,1
PRODUCTVERSION 1,0,0,1
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x40004L
FILETYPE 0x1L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "CompanyName", "TODO: <Название компании>"
VALUE "FileDescription", "TODO: <Описание файла>"
VALUE "FileVersion", "1.0.0.1"
VALUE "InternalName", "FontsLis.exe"
VALUE "LegalCopyright", "Copyright (C) 2024"
VALUE "OriginalFilename", "FontsLis.exe"
VALUE "ProductName", "TODO: <Имя продукта>"
VALUE "ProductVersion", "1.0.0.1"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END
#endif // Английский (США) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED
|
ЕСЛИ я всё верно вижу, и вы тоже это видите, то ВСЕ ресурсы, за исключением версионности (она вроде как
представлена в двух языках) заключены под тегом РУССКОГО языка.
Но при просмотре в плагине - даже в последней версии - я вижу что плагин считает, что это не так, что все
ресурсы лишь англоязычные! У кого ошибка и в чем её суть?
С двуязычностью версионности тоже вопрос. Хотя в связи с прошедшем временем может и я сам уже запутался...
Но, имхо, ЕСЛИ эта структура находится именно под тегом ЯЗЫКОВ, то отчего ваш плагин ОБЪЕДИНЯЕТ её в одну
структуру, а не выводит ДВУМЯ разными элементами в дереве ресурсов? Чтобы одна структура была отмечена
одним языком, а другая другим? Ведь языка же всё же два поддерживаются! Если верить нашему файлу RC...
И!
ЕСЛИ взять за основу mediacreationtool.exe файл, то там именно так и сделано - в узле дерева ресурсов Version
находится 37 различных ПОД-элементов, соответствующих разным 37 языкам, разным 37 структурам StringFileInfo!
Ровно то и так, что нами и ожидалось увидеть. Почему для нашего ехе-файла это так же тогда не выводится?
В виде двух под-элементов...
Quote: | По умолчанию 0, но можно явно задать. Например, в папке ТС 11.51 TC7Z64.DLL CP="0x04E4 (1252) (ANSI - Latin I)".
|
Ещё лишь вопрос на этой почве возникает, к сожалению....
 Вот полный код ресурсника для версионности этого проекта. Рассмотрим для примера лишь этот тип ресурсов.
Code: | #define MY_VS_FFI_FILEFLAGSMASK 0x0000003FL
#define MY_VOS_NT_WINDOWS32 0x00040004L
#define MY_VOS_CE_WINDOWS32 0x00050004L
#define MY_VFT_APP 0x00000001L
#define MY_VFT_DLL 0x00000002L
// #include <WinVer.h>
#ifndef MY_VERSION
#include "7zVersion.h"
#endif
#define MY_VER MY_VER_MAJOR,MY_VER_MINOR,MY_VER_BUILD,0
#ifdef DEBUG
#define DBG_FL VS_FF_DEBUG
#else
#define DBG_FL 0
#endif
#define MY_VERSION_INFO(fileType, descr, intName, origName) \
LANGUAGE 9, 1 \
1 VERSIONINFO \
FILEVERSION MY_VER \
PRODUCTVERSION MY_VER \
FILEFLAGSMASK MY_VS_FFI_FILEFLAGSMASK \
FILEFLAGS DBG_FL \
FILEOS MY_VOS_NT_WINDOWS32 \
FILETYPE fileType \
FILESUBTYPE 0x0L \
BEGIN \
BLOCK "StringFileInfo" \
BEGIN \
BLOCK "040904b0" \
BEGIN \
VALUE "CompanyName", "Igor Pavlov" \
VALUE "FileDescription", descr \
VALUE "FileVersion", MY_VERSION \
VALUE "InternalName", intName \
VALUE "LegalCopyright", MY_COPYRIGHT \
VALUE "OriginalFilename", origName \
VALUE "ProductName", "7-Zip" \
VALUE "ProductVersion", MY_VERSION \
END \
END \
BLOCK "VarFileInfo" \
BEGIN \
VALUE "Translation", 0x409, 1200 \
END \
END
#define MY_VERSION_INFO_APP(descr, intName) MY_VERSION_INFO(MY_VFT_APP, descr, intName, intName ".exe")
#define MY_VERSION_INFO_DLL(descr, intName) MY_VERSION_INFO(MY_VFT_DLL, descr, intName, intName ".dll")
|
Как мы видим для него заданы лишь две константы. 0x409, 1200 (или 0x04B0)
ВОПРОС - а откуда плагин смог вытащить и показать тогда значение 0x04E4???
Даже если задать поиск этого значения по всему проекту (вдруг где-то константой вшит странным образом),
то ничего нигде не находится....
Так где и чем в этом проекте 0 был заменен на 0x04E4, который вы показываете?
Исходники тут https://sourceforge.net/projects/sevenzip/files/7-Zip/24.09/7z2409-src.7z/download если что...
Last edited by Destiny on Wed Mar 19, 2025 19:09; edited 4 times in total |
|
Back to top |
|
 |
yozhik

Joined: 04 May 2014 Posts: 255 Location: Электросталь
|
(Separately) Posted: Wed Mar 19, 2025 17:29 Post subject: |
|
|
Destiny wrote: | нет до сих пор поддержки тега Спойлер? |
Есть:
Только о нём знают не все )) _________________ Amo ergo sum |
|
Back to top |
|
 |
Destiny
Joined: 15 Dec 2015 Posts: 272
|
(Separately) Posted: Wed Mar 19, 2025 18:46 Post subject: |
|
|
yozhik wrote: | Только о нём знают не все )) |
Ну и добавить в справку его - дело невообразимой сложности....
А случайно еще зачеркнутый текст не подвезли? |
|
Back to top |
|
 |
yozhik

Joined: 04 May 2014 Posts: 255 Location: Электросталь
|
(Separately) Posted: Thu Mar 20, 2025 00:55 Post subject: |
|
|
Quote: | зачеркнутый текст не подвезли? |
Тайным знанием об этом я не обладаю. Попытка научного тыка в strike успехом не увенчалась. _________________ Amo ergo sum |
|
Back to top |
|
 |
BlackFox

Joined: 18 Dec 2004 Posts: 57 Location: Mayence
|
(Separately) Posted: Thu Mar 20, 2025 16:02 Post subject: |
|
|
Destiny wrote: | А случайно еще зачеркнутый текст не подвезли? |
[ s ][ /s ] (без пробелов) у вас не работает? или вы не о том? |
|
Back to top |
|
 |
Destiny
Joined: 15 Dec 2015 Posts: 272
|
(Separately) Posted: Thu Mar 20, 2025 21:40 Post subject: |
|
|
Работает?
но вопрос - а кто отвечает за правку и ведение в актуальном состоянии панели тегов редактора постов? Почему ни одного ни второго в ней нет? |
|
Back to top |
|
 |
Destiny
Joined: 15 Dec 2015 Posts: 272
|
(Separately) Posted: Fri Mar 21, 2025 11:56 Post subject: |
|
|
iteg
Оххх. уже только сейчас - после столького времени просмотра казалось бы одного и того же файла - уже всё увидено и понято.
Но есть еще возможность удивлять.
Опять-таки смотрим полный текст ресурса нашего файла FontsListing, что выше в моем посте представлен, и замечаем,
что второй блок версионности-то был спецом же недооформлен! А ваш плагин его вооооообще не видит!
Есть только тот блок, который под тегом РУССКОГО языка прописан, хоть и отображается он как английский ресурс.
НО и в нем ещё одна ошибка! В ресурсах RC файла же прописано:
VALUE "Translation", 0x409, 1252, 0x419, 1251
Или же в полностью hex варианте:
VALUE "Translation", 0x409, 0x04E4, 0x419, 0x04E3
Соответственно в блоках StringTable это должны были быть пары:
StringTable 0 (0x409, 0x04E4)
StringTable 1 (0x419, 0x04E3)
А что показывает плагин последней версии?
Translation 0: 0x0409, 0x04B0, 0x0419, 0x04B0
и
StringTable 0 (0x0409, 0x04B0)
StringTable 1 (0x0419, 0x04B0)
Откуда 0x04B0 вылезло и где 0x04E4 и 0x04E3 константы???
Так вот подозрение ОТКУДА могло вылезти 0x04B0 у меня теперь и появилось - как раз из
того блока ресурса версии, что спрятан был под тегом АНГЛИЙСКОГО языка.
Именно там было указано, как мы видим из листинга RC-файла, что:
VALUE "Translation", 0x409, 1200
или же
VALUE "Translation", 0x409, 0x04B0
НО это же другой блок!
Второй, отображение которого пока что не появилось в дереве ресурсов файла в плагине((((( |
|
Back to top |
|
 |
iteg
Joined: 01 Dec 2011 Posts: 95
|
(Separately) Posted: Sat Mar 22, 2025 14:19 Post subject: |
|
|
Destiny
Создал простой С++ проект в Visual Studio 2022 17.13.4. В файл Resource.h скопировал ваше предоставленное rc-описание приложения FontsListing.
Тестировал на ОС Windows 11 24H2 x64, x64 и x86 плагином версии 3.0.17.2.
1) В итоге получил файл WindowsAppTest.exe (в архиве в папке Release), в котором все ресурсы на русском языке, кроме Manifest и Version (Name,IDR_VERSION2), которые на английском. Что полностью корректно и отражает заданное rc-описание. И не подтверждает ваше первое описание проблемы. Version содержит два ресурса - один на русском и другой на английском.
https://ibb.co/gLDTzN2J
https://ibb.co/wNRJwSCh
2) Скачал 7z2409.exe и в ресурсах Version вижу:
StringTable 0 (0x0409, 0x04B0)
...
Translation 0: 0x0409, 0x04B0
Никакого упоминания 0x04E4 я тоже не нашел.
Также не подтверждает ваше второе описание проблемы.
https://ibb.co/672sDfQp
3) Скомпилированный файл из пункта 1) показывает два ресурса Version и корректно их языки.
Что тоже не подтверждает ваше третье описание проблемы.
Тестовый проект (исходники и WindowsAppTest.exe) с вашим rc-описанием:
https://www.upload.ee/files/17884426/WindowsAppTest.rar.html
В mediacreationtool Version все ресурсы имеют единый и общий идентификатор 1 и разделяются на подуровни на основания номера своего языка.
В вашем rc-описании идентификаторы разные. Если замените идентификатор IDR_VERSION2 на VS_VERSION_INFO, то получите такую же структуру как и в mediacreationtool. Тоже проверил после компиляции приложения.
https://ibb.co/tM6k7pd7
Получается, что мы ведем разговор о разных вещах. Детально всё перепроверьте.
Пришлите:
1) Версию и битность тестовой ОС.
2) Версию и битность TotalCommander.
3) Версию и битность плагина.
4) Исполняемый файл FontsListing и его rc-файл при компиляции.
5) Скриншоты с визуальными отметками проблем или видео. |
|
Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|