Heaventools

   English English  Deutsch Deutsch

Big Test Script: Working with Strings

This sample code demonstrates many of the features available in Resource Tuner Console. This shows the way you can change the string and numeric resources of Windows EXE and DLL files using the command-line resource editor.

The script edits strings in DemoApp1.exe using string and numeric literal values from the definition file demoapp1.drc in the "\Demo\defs\" folder.

Then it adds a new StringTable, modifies the existing MessageTable, updates the Version Information, creates a copy of the resource (Message Table) with another language, outputs the resource tree to a log file, and finally saves the entire file's resources as a resource DLL. The resulting files are saved to the directory named "\Demo\Release".

For greater detail, see the Step-by-Step Guide To Using Scripts

Note: when copying out the script code, please make sure there's no line breaks. This is a requirement of VBScript: the entire command must be on one line.

Big Test Script
    
Sub Main
  PEFileProxy.PostDebugString "PE file header checksum updating is enabled." 
  PEFileProxy.UpdateCheckSum = True 

  PEFileProxy.PostDebugString "The creation of a backup copy is disabled." 
  PEFileProxy.CreateBackUp = False

  ' Set Language to English-US
  LangID = 1033 ' English-US

  ' Retrieve and output CodePage to log
  CP = ScriptUnit.CodePageFromLangID(LangID)
  PEFileProxy.PostDebugString "CodePage value for English-US: " & CStr(CP)

  ' Open file
  PEFileProxy.PostDebugString "Opening the file for processing..." 
  PEFileProxy.OpenFile ".\demo\src\DemoApp1.exe"
  if (PEFileProxy.Terminated) then
    ' Issue a warning in case of error
    PEFileProxy.PostDebugString "Error when opening this file."
  else
    PEFileProxy.PostDebugString "File opened OK."
    if (not PEFileProxy.HasResources) then
      PEFileProxy.PostDebugString "The file contains no resources."
    else
      PEFileProxy.PostDebugString "The file contains resources."

      ' Open the external definition file which represents the values
      ' for constants in the loaded executable file.
      PEFileProxy.ClearDefinitions
      PEFileProxy.PostDebugString "Opening the definition file..."
      PEFileProxy.OpenDefinitionFile ".\demo\defs\demoapp1.drc"

      ' Edit strings in the StringTable
      PEFileProxy.PostDebugString "Editing 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"
      
      ' Gain access to the entries using the definitions
      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
      ' Gain access to the entry using the entry index
      ResourcesProxy.EditStringTable "65269", 0, CURRENT_LANG, S6, CP

      ' Create a new String Table (English-US)
      S1 = "This resource has been added by RTC (English-US)"
      ResourcesProxy.EditStringTable "1", 1033, CREATE_IF_NOT_EXIST, S1, CP

      ' Edit strings in the MessageTable
      PEFileProxy.PostDebugString "Editing 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

      ' Update FileVersion and ProductVersion numeric values
      PEFileProxy.PostDebugString "Updating Version Info..."
      if ResourcesProxy.OpenVersionInfo("1", 0, GET_DEFAULT_IF_NOT_EXIST) then 
        PEFileProxy.PostDebugString "Version Info opened."

        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)

        VersionInfoProxy.SetFileVersion 2, 1, 3, 1205, 1033, True, True, True
        VersionInfoProxy.SetProductVersion 2, 0, 0, 0, 1033, True, True, True

        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)

        ' Set the file flags
        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 2024 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 "Closing Version Info..."
        ResourcesProxy.CloseVersionInfo
      else
        ' Issue a warning in case of error
        PEFileProxy.PostDebugString "Could not edit Version Information."
      end if

      ' Compile all the changes made to the resources throughout the script
      PEFileProxy.PostDebugString "Compiling all changes..."
      PEFileProxy.Compile

      ' Create a copy of the resource (Message Table) with another language
      PEFileProxy.PostDebugString "Creating a copy of the resource (Message Table) 
with another language..." PEFileProxy.PostDebugString "Copying Message Table:1 Neutral (0) to
Message Table:1 German-Swiss (2055)..." ResourcesProxy.CopyResource RT_MESSAGETABLE, "1", 0, 2055 ' Compile the changes again PEFileProxy.Compile ' Build and output the Resource Tree to log to show all the changes made PEFileProxy.PostDebugString "" PEFileProxy.PostDebugString "Resource Tree built by RTC:" ResourcesProxy.ResourceTreeToLog PEFileProxy.PostDebugString "" ' Save operations PEFileProxy.PostDebugString "Saving the file's resources as a resource DLL" PEFileProxy.SaveAsResDll ".\demo\release\demoapp1.res.dll" PEFileProxy.PostDebugString "Saving the modified exe file..." PEFileProxy.SaveAsNewImage ".\demo\release\DemoApp1.exe" end if PEFileProxy.PostDebugString "Closing this file..." PEFileProxy.CloseFile end if end Sub

To see the changes made to the test EXEs, we recommend using Resource Tuner GUI, a visual resource editor.

Once installed Resorce Tuner Console, you will find the Demo folder nested in the directory where RTC has been installed. Within this Demo folder, there are 12 subdirectories that contain sample scripts and sample executable files.

All sample scripts are ready to run. Select one of the .BAT files located in the Demo folders to execute the sample script. The script will make changes in the test EXE file. The resulting file will be created in the directory named "Release" under the directory containing the script.

 Download Resource Tuner Console and learn how it can make you more productive.