Командные строки скрипта

Весь функционал Resource Hacker™ GUI (кроме просмотра ресурсов) доступен из командной строки без необходимости открывать Resource Hacker™. Скрипт с набором команд может избавить от многократного запуска Resource Hacker™ и открытия/сохранения обрабатываемого файла.

Сценарий командной строки имеет 2 основные формы:

1. Одиночные команды:

ResHacker.exe команда параметры



2. Использование скрипта с множеством команд:

ResHacker.exe -script "скрипт_файл"



Одиночные команды

Команда и параметры:

КомандаПараметры
-addExeFile, SaveAsFile, ResourceFile, ResourceMask
-addskipExeFile, SaveAsFile, ResourceFile, ResourceMask
-addoverwriteExeFile, SaveAsFile, ResourceFile, ResourceMask
-modifyExeFile, SaveAsFile, ResourceFile, ResourceMask
  
-extractExeFile, ResourceFile, ResourceMask
-deleteExeFile, SaveAsFile, ResourceMask


КомандаОписание
-addДобавляет с отменой операции при существовании ресурса, не сохраняя результат в файл (аналогично в скрипте выполнение прекращается и ничего не сохраняется, даже частично выполненное.).
-addskipДобавляет пропуская существующий(ие) ресурс(ы)
-addoverwriteДобавляет перезаписывая существующий(ие) ресурс(ы)
-modifyОбновляет, перезаписывает только существующий(ие), не добавляя новых ресурсов
-extractИзвлекает
-deleteУдаляет


ПараметрОписание
ExeFileИсходный файл (exe, dll, ocx, cpl).
SaveAsFileФайл сохранения после операций с ресурсами (может быть тот же, что исходный).
ResourceFileФайл ресурсов (часто res, ico, bmp, а фактически любой).
ResourceMaskМаска ресурса (тип, имя, язык)

Каждый параметр должен разделяться запятой, но запятая не ставится перед первым параметром.

Если не указан полный путь, а только имя файла, то предполагается, что файл находится в текущей / рабочей папке. Хорошая практика, хотя и не обязательно для данного случая, заключить имя файла в кавычки, если оно содержит пробелы .

Маска ResourceMask является командой для операции с одним или несколькими ресурсами и состоит из ResType,ResName,ResLang (тип,имя,язык ресурса). Если ResType является встроенным стандартным типом, то вместо текстового идентификатора можно использовать числовой, например ResourceMask - Dialog,128,0 идентично 5,128,0. Любые или все элементы маски ResourceMask могут быть опущены, например Dialog,, указывает, что все элементы Dialog'а должны быть обработаны, независимо от имени или языка, а ,,1049 указывает, что все ресурсы с Русским (1049) идентификатором языка будут обработаны. Пустой ResourceMask ,, указывает, что команда будет применена ко всем ресурсам, независимо от типа, имени или языка.

Числовой идентификатор ресурса
В дереве окнаВ команде (без пробелов)
2BitmapBitmap
4MenuMenu
5DialogDialog
6String TableStringTable
9AcceleratorsAccelerators
10RCDataRCData
11Message TableMessageTable
12Cursor GroupCursorGroup
14Icon GroupIconGroup
16Version InfoVersionInfo

При добавлении или модификации ресурсов в качестве ResourceFile может использоваться RES-файл для любого типа элемента, BMP-файл для типа Bitmap, CUR-файл для типа CursorGroup, ICO-файл для типа IconGroup, и любой тип файла для RCData и типа ресурса определяемого пользователем.

При добавлении или модификации ресурсов из файлов не являющимися RES-файлами, в ResourceMask должны быть указаны ResType и ResName. Если ResLang опущен, то команда применяется к первому элементу языка соответствующего типа и имени, иначе, если соответствующий элемент не существует, то предполагается нейтральный язык (0).

При извлечении ресурсов, если маска ResourceMask предполагает извлечение более одного ресурса, то ResourceFile должен быть RES- или RC-файлом. При извлечении бинарных ресурсов изображений в RC-файл, каждое изображение также создаётся как отдельный бинарный файл (ICO, CUR, BMP, GIF, BIN). Смотрите пример ниже.

Операции с ресурсами Icon и Cursor не могут выполнятся напрямую из этих секций, но выполняются через секции IconGroup и CursorGroup соответственно. Icon и Cursor все же могут быть использованы, но Resource Hacker™ предполагает применение через секции IconGroup и CursorGroup.

Borland’s DFM файлы могут быть добавлены независимо, являются ли они в бинарном или текстовом формате. Однако извлекаются они всегда в текстовый формат (Чтобы преобразовать текстовый формат dfm файлов в бинарный, используйте Borland’а утилиту Convert.exe).

Все действия или ошибки записываются в лог-файл ResHacker.log.

Примечание: Если скрипт не производит желаемый результат, то проверьте лог-файл!

Примеры: (Пути к файлам опущены для наглядности примеров)

Чтобы добавить или обновить в разделе "dialog", ресурс "maindlg", язык "0" в файле "MyProg.exe" из UpdDlg.res

ResHacker.exe -addoverwrite MyProg.exe, MyProgNew.exe, UpdDlg.res, dialog,maindlg,0



Чтобы добавить или обновить bitmap с именем "128" в файле MyProg.exe используя NewImage.bmp

ResHacker.exe -addoverwrite MyProg.exe, MyProgNew.exe, NewImage.bmp , bitmap,128,



Чтобы добавить или обновить все bitmap'ы в файле MyProg.exe из Images.res

ResHacker.exe -addoverwrite MyProg.exe, MyProgNew.exe, Images.res, bitmap,,



Чтобы добавить "определяемый пользователем" бинарный ресурс (README,1,0) в файл MyProg.exe из ReadMe.html

ResHacker.exe -addoverwrite MyProg.exe, MyProgNew.exe, ReadMe.html, readme,1,0



Чтобы добавить все элементы из Images.res в файл MyProg.exe (учитывая сбой, если элемент уже существует)

ResHacker.exe -add MyProg.exe, MyProgNew.exe, Images.res ,,,



Чтобы добавить все элементы из Images.res в файл MyProg.exe (пропуская все существующие элементы)

ResHacker.exe -addskip MyProg.exe, MyProgNew.exe, Images.res ,,,



Чтобы модифицировать все элементы MyProg.exe элементами из Images.res (игнорируя все элементы в Images.res, которые не существуют в MyProg.exe)

ResHacker.exe -modify MyProg.exe, MyProgNew.exe, Images.res , , ,



Чтобы извлечь все иконки из MyProg.exe в MyProgIcons.rc (создаёт MyProgIcons.rc, Icon_1.ico, Icon_2.ico , Icon_3.ico и т.д...)

ResHacker.exe -extract MyProg.exe, MyProgIcons.rc, icongroup,,



Чтобы удалить GIF с именем "128" из MyProg.exe

ResHacker.exe -delete MyProg.exe, MyProgNew.exe, gif,128,



Командный скрипт

Синтаксис

ResHacker.exe -script "скрипт_файл"


"Скрипт_файл" представляет собой текстовый файл следующего формата:

// комментарии следуют за двойным слешем
[FILENAMES]
Exe=
SaveAs=
Log=

[COMMANDS]
-add ResourceSrc, ResourceMask
-addskip ResourceSrc, ResourceMask
-addoverwrite ResourceSrc, ResourceMask
-addoverwrite ResourceSrc, ResourceMask
-modify ResourceSrc, ResourceMask

-extract ResourceTgt, ResourceMask
-delete ResourceMask



ПараметрОписание
Exe=Исходный файл (exe, dll, ocx, cpl).
SaveAs=Файл для сохранения после операций с ресурсами (может быть тот же, что исходный).
Log=Лог-файл, в котором будут отчёт о выполненных операциях и ошибках.
ResourceSrcФайл ресурсов (часто res, ico, bmp, а фактически любой).
ResourceTgtЦелевой файл, в который будет извечён ресурс (часто res, rc, ico, bmp, а фактически любой)


Если параметр "Log" опущен, то по умолчанию будет использоваться "ResHacker.log".
Примечание: Если скрипт не производит желаемый результат, то проверьте лог-файл!

Примеры скриптов:

Скрипт-файл "rh_script_myprog_rus.txt"

// Этот скрипт удаляет все нейтральные языки (0)
// в разделах ресурсов "menu", "dialog" и "string-table"
// в файле MyProg.exe перед заменой их
// русскими ресурсами (1049)


[FILENAMES]
Exe= MyProg.exe
SaveAs= MyProg_Rus.exe
Log= MyProg_Rus.log

[COMMANDS]
-delete MENU,,0
-delete DIALOG,,0
-delete STRINGTABLE,,0
-add MyProg_Rus.res, MENU,,1049
-add MyProg_Rus.res, DIALOG,,1049
-add MyProg_Rus.res, STRINGTABLE,,1049



Скрипт-файл "rh_script_myprog_upd_images.txt"

// Этот скрипт обновляет 2 ресурса Bitmap
// и иконку в MyProg.exe


[FILENAMES]
Exe= MyProg.exe
SaveAs= MyProg_Updated.exe

[COMMANDS]
-addoverwrite Bitmap128.bmp, BITMAP,128,
-addoverwrite Bitmap129.bmp, BITMAP,129,0
-addoverwrite MainIcon.ico, ICONGROUP,MAINICON,0



Скрипт-файл "rh_script_myprog_upd_all.txt"

// Этот скрипт заменяет все ресурсы
// в MyProg.exe на ресурсы из MyProgNew.res


[FILENAMES]
Exe= MyProg.exe
SaveAs= MyProg_Updated.exe

[COMMANDS]
-delete ,,             // предварительно удаляет все ресурсы
-add MyProgNew.res ,,,   // добавляет новые ресурсы, все из файла



Скрипт-файл для извлечения всех ресурсов в res-файл. На практике в дальнейшем вы можете сделать импорт (-modify) из res-файла в dll, тем самым обновив новую версию dll русскими ресурсами.

// Извлекает все ресурсы в res-файл

[FILENAMES]
Exe=test.dll
SaveAs=
Log=test.log

[COMMANDS]
-extract test.res,,,