главная программы
resource tuner console
сборник примеров скриптов
Изменения в строках, номерах версии и продукта, сохранение в виде Resource DLL
Предлагаемый код скрипта демонстрирует использование Resource Tuner Console для внесения изменений в разные типы строковых ресурсов и сохранение результата в виде ресурсной библиотеки DLL.
Скрипт выполняет следующие операции над DemoApp1.exe
:
- Редактирует строки, используя строковые и числовые значения из файла определения
demoapp1.drc
, расположенного в папке "Defs". - Добавляет новую StringTable и изменяет существующую MessageTable.
- Обновляет информацию о версии исполняемого файла.
- Создает копию ресурса (Message Table) с другим языком.
- Выводит дерево ресурсов в файл лога для дальнейшего анализа.
- И наконец, он сохраняет все ресурсы файла как resource DLL.
Полученные файлы сохраняются в каталоге "Release".
Подробные инструкции по использованию скриптов Resource Tuner Console см. в Пошаговом руководстве по использованию скриптов.
Sub Main PEFileProxy.PostDebugString "Пересчёт контрольной суммы в заголовке файла вкл." PEFileProxy.UpdateCheckSum = True PEFileProxy.PostDebugString "Создание резервной копии отключено." PEFileProxy.CreateBackUp = False ' Устанавливаем язык English-US LangID = 1033 ' English-US ' Получаем и выводим CodePage в лог CP = ScriptUnit.CodePageFromLangID(LangID) PEFileProxy.PostDebugString "Значение CodePage для English-US: " & CStr(CP) ' Открытие файла PEFileProxy.PostDebugString "Открываем файл для редактирования..." PEFileProxy.OpenFile ".\src\DemoApp1.exe" if (PEFileProxy.Terminated) then ' Предупреждение в случае ошибки PEFileProxy.PostDebugString "При открытии файла произошла ошибка." else PEFileProxy.PostDebugString "Файл открыт успешно." if (not PEFileProxy.HasResources) then PEFileProxy.PostDebugString "Файл не содержит ресурсов." else PEFileProxy.PostDebugString "Файл содержит ресурсы." ' Доступ к внешнему файлу определений, содержащему значения констант, ' используемых в редактируемом исполняемом файле. PEFileProxy.ClearDefinitions PEFileProxy.PostDebugString "Открываем файл определений..." PEFileProxy.OpenDefinitionFile ".\defs\demoapp1.drc" ' Редактируем строки в String Table PEFileProxy.PostDebugString "Редактируем String Table..." S1 = "My App Number1" S2 = "Resource String: Item1 was modified." S3 = "Resource String: Item2 was updated." S4 = "Resource String: Item3 was changed." S5 = "Version Info:" S6 = "&Close App" ' Получаем доступ к записям таблицы, используя определения ResourcesProxy.EditStringTable "dm1Unit_res_Caption", 0, CURRENT_LANG, S1, CP ResourcesProxy.EditStringTable "dm1Unit_res_Label1", 0, CURRENT_LANG, S2, CP ResourcesProxy.EditStringTable "dm1Unit_res_Label2", 0, CURRENT_LANG, S3, CP ResourcesProxy.EditStringTable "dm1Unit_res_Label3", 0, CURRENT_LANG, S4, CP ResourcesProxy.EditStringTable "dm1Unit_res_Version", 0, CURRENT_LANG, S5, CP ' Получаем доступ к записи, используя индекс записи ResourcesProxy.EditStringTable "65269", 0, CURRENT_LANG, S6, CP ' Создаём новую String Table (English-US) S1 = "Этот ресурс был добавлен при помощи RTC (English-US)" ResourcesProxy.EditStringTable "1", 1033, CREATE_IF_NOT_EXIST, S1, CP ' Редактируем строки в MessageTable PEFileProxy.PostDebugString "Редактируем Message Table..." S1 = "Event 1" S2 = "Event 2" S3 = "Event 5" ResourcesProxy.EditMessageTable "1", 0, CREATE_IF_NOT_EXIST, 10001, S1, CP ResourcesProxy.EditMessageTable "1", 0, CREATE_IF_NOT_EXIST, 10002, S2, CP ResourcesProxy.EditMessageTable "1", 0, CREATE_IF_NOT_EXIST, 10005, S3, CP S1 = "Error 1" S2 = "Error 2" ResourcesProxy.EditMessageTable "1", 0, CREATE_IF_NOT_EXIST, &H80000001, S1, CP ResourcesProxy.EditMessageTable "1", 0, CREATE_IF_NOT_EXIST, &H80000002, S2, CP S0 = "InsertItem 0" S1 = "InsertItem 1" S2 = "InsertItem 2" ResourcesProxy.EditMessageTable "1", 0, CREATE_IF_NOT_EXIST, 10004, S1, CP ResourcesProxy.EditMessageTable "1", 0, CREATE_IF_NOT_EXIST, 10000, S2, CP ResourcesProxy.EditMessageTable "1", 0, CREATE_IF_NOT_EXIST, 0, S0, CP S0 = "Negative value for ID" ResourcesProxy.EditMessageTable "1", 0, CREATE_IF_NOT_EXIST, -1, S0, CP ' Открываем Version Info для редактирования PEFileProxy.PostDebugString "Открываем Version Info..." if ResourcesProxy.OpenVersionInfo("1", 0, GET_DEFAULT_IF_NOT_EXIST) then PEFileProxy.PostDebugString "Version Info открыто." ' Выводим текущие FileVersion и ProductVersion в файл лога (опционально) PEFileProxy.PostDebugString "Current FileVersion: " &_ CStr(VersionInfoProxy.FileVersionMajor) & "." &_ CStr(VersionInfoProxy.FileVersionMinor) & "." &_ CStr(VersionInfoProxy.FileVersionRelease) & "." &_ CStr(VersionInfoProxy.FileVersionBuild) PEFileProxy.PostDebugString "Current ProductVersion: " &_ CStr(VersionInfoProxy.ProductVersionMajor) & "." &_ CStr(VersionInfoProxy.ProductVersionMinor) & "." &_ CStr(VersionInfoProxy.ProductVersionRelease) & "." &_ CStr(VersionInfoProxy.ProductVersionBuild) ' Обновляем числовые значения FileVersion и ProductVersion VersionInfoProxy.SetFileVersion 2, 1, 3, 1205, 1033, True, True, True VersionInfoProxy.SetProductVersion 2, 0, 0, 0, 1033, True, True, True ' Выводим обновленные FileVersion и ProductVersion в файл лога (опционально) PEFileProxy.PostDebugString "Updated FileVersion: " &_ CStr(VersionInfoProxy.FileVersionMajor) & "." &_ CStr(VersionInfoProxy.FileVersionMinor) & "." &_ CStr(VersionInfoProxy.FileVersionRelease) & "." &_ CStr(VersionInfoProxy.FileVersionBuild) PEFileProxy.PostDebugString "Updated ProductVersion: " &_ CStr(VersionInfoProxy.ProductVersionMajor) & "." &_ CStr(VersionInfoProxy.ProductVersionMinor) & "." &_ CStr(VersionInfoProxy.ProductVersionRelease) & "." &_ CStr(VersionInfoProxy.ProductVersionBuild) ' Устанавливаем флаги VersionInfoProxy.FileFlagsMask = &H3F VersionInfoProxy.FileFlags = VS_FF_PRERELEASE or VS_FF_PRIVATEBUILD VersionInfoProxy.FileOS = VOS__WINDOWS32 VersionInfoProxy.FileType = VFT_DLL VersionInfoProxy.FileSubType = VFT2_UNKNOWN S1 = "Copyright \0xA9 2025 SuperSoftware Development" S2 = "SuperProg is a trademark of SuperSoftware Development" VersionInfoProxy.EditStringFileInfo "LegalCopyright", S1, CP, 1033, True, True VersionInfoProxy.EditStringFileInfo "LegalTrademarks", S2, CP, 1033, True, True S1 = "This entry has been added by the RTC demo script" VersionInfoProxy.EditStringFileInfo "SpecialInfo", S1, CP, 1033, True, True PEFileProxy.PostDebugString "Закрываем Version Info..." ResourcesProxy.CloseVersionInfo else ' Предупреждение в случае ошибки PEFileProxy.PostDebugString "Не удалось изменить Version Information." end if ' Компилируем все изменения, внесенные скриптом в ресурсы PEFileProxy.PostDebugString "Компилируем все изменения..." PEFileProxy.Compile ' Создаем копию ресурса (Message Table) с другим языком PEFileProxy.PostDebugString "Создаем копию Message Table с другим языком..." PEFileProxy.PostDebugString "Копируем Message Table:1 Neutral (0) в
Message Table:1 German-Swiss (2055)..." ResourcesProxy.CopyResource RT_MESSAGETABLE, "1", 0, 2055 ' Снова компилируем все изменения PEFileProxy.Compile ' Строим и выводим дерево ресурсов в лог, чтобы показать изменения PEFileProxy.PostDebugString "" PEFileProxy.PostDebugString "Дерево ресурсов — построено с помощью RTC:" ResourcesProxy.ResourceTreeToLog PEFileProxy.PostDebugString "" ' Сохранение PEFileProxy.PostDebugString "Сохраняем ресурсы файла как resource DLL" PEFileProxy.SaveAsResDll ".\release\demoapp1.res.dll" PEFileProxy.PostDebugString "Сохраняем изменённый exe-файл..." PEFileProxy.SaveAsNewImage ".\release\DemoApp1.exe" end if PEFileProxy.PostDebugString "Закрываем файл..." PEFileProxy.CloseFile end if end Sub
Чтобы посмотреть и проверить произведённые изменения в самом EXE файле, мы рекомендуем использовать Resource Tuner GUI, визуальный редактор ресурсов.
Примеры скриптов
Установив Resorce Tuner Console на свой компьютер, вы найдёте папку Demo Scripts
в директории с программой. Внутри этой папки находятся 12 папок с примерами скриптов и тестовыми файлами.
Все примеры скриптов готовы к применению. Чтобы запустить выполнение скрипта, выберете соответствующий .BAT файл в любой папке с примером. Resorce Tuner Console произведёт изменения в тестовом EXE файле, находящемся в папке Src
. Результирующий файл будет записан в папку Release
в директории, содержащей скрипт.
Пошаговое руководство по использованию скриптов
Скачать 60-дневную пробную версию Resource Tuner Console