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

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

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

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

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

RTC ScriptПредлагаемый код скрипта shows the way you can change or edit the string resources of Windows EXE and DLL files using the command-line resource editor.


Примечание: при копировании кода скрипта, пожалуйста, убедитесь в отсутствии переносов строк внутри команд. Это требование VBScript: каждая команда должна располагаться целиком в одной строке.

'------------------------------------------------------------------------------
'
' Этот скрипт показывает, как:
' - Внести изменения в MessageTable, используя definition файл;
' - Добавить новую String Table;
' - Внести изменения в Version Information;
' - Создать копию ресурса (MessageTable) с другим languageID;
' - Вывести отчёт об изменениях в дереве ресурсов в лог файл;
' - Сохранить все ресурсы из файла в виде ресурсной DLL.
'
' Скрипт заменяет строки в DemoApp1.exe используя значения из:
' - файла определений "demoapp1.drc" в папке "\Demo\defs\"
' - юникодного текстового файла "strings.txt" в папке "\Demo\Src"
' - юникодного текстового файла "messages.txt" в папке "\Demo\Src"  
'
' Результирующиы файлы сохраняются в папку "\Demo\Release".
' В файл лога rtc.log записыватся отчёт об изменениях.
' 
' Подробнее о работе со скриптами см. Руководство по использованию скриптов
'
'------------------------------------------------------------------------------

Sub Main
  PEFileProxy.PostDebugString "Пересчёт контрольной суммы в заголовке файла разрешён."
  PEFileProxy.UpdateCheckSum = True

  PEFileProxy.PostDebugString "Создание резервной копии отключено."
  PEFileProxy.CreateBackUp = False

  LangID = 1033 ' English-US

  CP = ScriptUnit.CodePageFromLangID(LangID)
  PEFileProxy.PostDebugString "Значение для кодовой страницы English-US: " & CStr(CP)

  PEFileProxy.PostDebugString "Открываем файл..."
  PEFileProxy.OpenFile ".\demo\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 ".\demo\defs\demoapp1.drc"

      PEFileProxy.PostDebugString "Редактируем StringTable..."

      S1 = "Мое Приложение 1"
      S2 = "Строка в ресурсах: Item1 модифицирован."
      S3 = "Строка в ресурсах: Item2 обновлён."
      S4 = "Строка в ресурсах: Item3 изменён."
      S5 = "Информация о версии:"
      S6 = "&Закрыть приложение"

      ' Получаем доступ к строкам, используя определения
      ResourcesProxy.EditStringTable "dm1Unit_res_strFormCaption", 0, CURRENT_LANG, S1, CP
      ResourcesProxy.EditStringTable "dm1Unit_res_strLabel1", 0, CURRENT_LANG, S2, CP
      ResourcesProxy.EditStringTable "dm1Unit_res_strLabel2", 0, CURRENT_LANG, S3, CP
      ResourcesProxy.EditStringTable "dm1Unit_res_strLabel3", 0, CURRENT_LANG, S4, CP
      ResourcesProxy.EditStringTable "dm1Unit_res_strVersion", 0, CURRENT_LANG, S5, CP
      ' Получаем доступ к строкам, используя индекс записей
      ResourcesProxy.EditStringTable "65269", 0, CURRENT_LANG, S6, CP

      ' Создаём новую StringTable (English-US)
      S1 = "Этот ресурс был добавлен при помощи RTC (English-US)"
      ResourcesProxy.EditStringTable "1", 1033, CREATE_IF_NOT_EXIST, S1, CP

      PEFileProxy.PostDebugString "Редактируем Message Table..."
      S1 = "Событие 1"
      S2 = "Событие 2"
      S3 = "Событие 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 = "Ошибка 1"
      S2 = "Ошибка 2"
      ResourcesProxy.EditMessageTable "1", 0, CREATE_IF_NOT_EXIST, &H80000001, S1, CP
      ResourcesProxy.EditMessageTable "1", 0, CREATE_IF_NOT_EXIST, &H80000002, S2, CP
      S0 = "Вставить 0"
      S1 = "Вставить 1"
      S2 = "Вставить 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 = "Отрицательное значение для ID"
      ResourcesProxy.EditMessageTable "1", 0, CREATE_IF_NOT_EXIST, -1, S0, CP

      PEFileProxy.PostDebugString "Обновляем Version Info..."
      if ResourcesProxy.OpenVersionInfo("1", 0, GET_DEFAULT_IF_NOT_EXIST) then 
        PEFileProxy.PostDebugString "Version Info открыто."

        PEFileProxy.PostDebugString "Текущая FileVersion: " &_
                CStr(VersionInfoProxy.FileVersionMajor) & "." &_
                CStr(VersionInfoProxy.FileVersionMinor) & "." &_
                CStr(VersionInfoProxy.FileVersionRelease) & "." &_
                CStr(VersionInfoProxy.FileVersionBuild)
        PEFileProxy.PostDebugString "Текущая 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

        PEFileProxy.PostDebugString "Обновлённая FileVersion: " &_
                CStr(VersionInfoProxy.FileVersionMajor) & "." &_
                CStr(VersionInfoProxy.FileVersionMinor) & "." &_
                CStr(VersionInfoProxy.FileVersionRelease) & "." &_
                CStr(VersionInfoProxy.FileVersionBuild)
        PEFileProxy.PostDebugString "Обновлённая 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

       'Изменяем существующую строковую File Version Information
        S1 = "Copyright \0xA9 1990-2010 SuperSoftware Development"
        S2 = "SuperProg is a trademark of SuperSoftware Development"
        S3 = "Это поле добавлено тестовым скриптом Resource Tuner Console"
        VersionInfoProxy.EditStringFileInfo "LegalCopyright", S1, CP, 1033, True, True
        VersionInfoProxy.EditStringFileInfo "LegalTrademarks", S2, CP, 1033, True, True
        VersionInfoProxy.EditStringFileInfo "SpecialInfo", S3, CP, 1033, True, True

        PEFileProxy.PostDebugString "Закрываем Version Info..."
        ResourcesProxy.CloseVersionInfo
      else
        PEFileProxy.PostDebugString "Не получилось изменить Version Info."
      end if

      PEFileProxy.PostDebugString "Компилируем все изменения..."
      PEFileProxy.Compile

      PEFileProxy.PostDebugString "Создаём копию ресурса (Message Table) с другим языком..."
      PEFileProxy.PostDebugString "Копируем Message Table:1 в Message Table:1 Русский (1049)..."
      ResourcesProxy.CopyResource RT_MESSAGETABLE, "1", 0, 1049

      PEFileProxy.Compile

      PEFileProxy.PostDebugString ""
      PEFileProxy.PostDebugString "Выводим дерево ресурсов:"
      ResourcesProxy.ResourceTreeToLog
      PEFileProxy.PostDebugString ""
'----------------------------------------------------------------------------


      PEFileProxy.PostDebugString "Сохраняем все ресурсы файла в виде ресурсной DLL..."  
      PEFileProxy.SaveAsResDll ".\demo\release\demoapp1.res.dll"

      PEFileProxy.PostDebugString "Сохраняем изменения в новый файл..." 
      PEFileProxy.SaveAsNewImage ".\demo\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