Редактор ресурсов

   English English  Deutsch Deutsch  Русский Русский

главная  программы  resource tuner console  сборник примеров скриптов

Изменения в строках, номерах версии и продукта, сохранение в виде Resource DLL

Предлагаемый код скрипта демонстрирует использование Resource Tuner Console для внесения изменений в разные типы строковых ресурсов и сохранение результата в виде ресурсной библиотеки DLL.

Скрипт выполняет следующие операции над DemoApp1.exe:

  • Редактирует строки, используя строковые и числовые значения из файла определения demoapp1.drc, расположенного в папке "Defs".
  • Добавляет новую StringTable и изменяет существующую MessageTable.
  • Обновляет информацию о версии исполняемого файла.
  • Создает копию ресурса (Message Table) с другим языком.
  • Выводит дерево ресурсов в файл лога для дальнейшего анализа.
  • И наконец, он сохраняет все ресурсы файла как resource DLL.

Полученные файлы сохраняются в каталоге "Release".

Подробные инструкции по использованию скриптов Resource Tuner Console см. в Пошаговом руководстве по использованию скриптов.

Big Test Script
    
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