главная
программы
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