Старожил
Сообщения: 460
Благодарности: 152
|
Профиль
|
Отправить PM
| Цитировать
FlatX007, а дело в том, что вот такая ситуация:
Задача: необходимо создать файл типа .reg, который будет записывать (или обновлять) данные в реестре велечины типа REG_EXPAND_SZ.
В реестре это будет выглядеть так:
Цитата:
Имя величины: SN
Значение величины: VMKJGNDIDNWLDMKJGNDIDNWLD
Тип величины: REG_EXPAND_SZ
|
А вот в .reg файле это будет выглядеть так:
Цитата:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\DashSignature\Knagalis]
"SN"=hex(2):56,00,4d,00,4b,00,4a,00,47,00,4e,00,44,00,49,00,44,00,4e,00,57,00,4c,00,44,00,4d,00,4b,0 0,4a,00,47,00,4e,00,44,00,49,00,44,00,4e,00,57,00,4c,00,44,00,00,00
|
Дело в том, что значения в .reg файле записываются следующим образом:
Цитата:
REG_NONE - hex(0)
REG_BINARY - hex(3) или hex
REG_DWORD - hex(4) или dword
REG_SZ - hex(1) или отсутствие указателя типа
REG_EXPAND_SZ - hex(2)
REG_MULTI_SZ - hex(7)
REG_RESOURCE_LIST - hex(8)
REG_FULL_RESOURCE_DESCRIPTOR - hex(9)
Если тип задан с использованием префикса "hex", то значение установки должно быть записано в виде последовательности чисел (от 0 до 255), разделённых запятыми. Если тип hex(4), то должно быть 4 числа, а в двойное слово они будут собраны в обратной последовательности (т.е. записаны они должны быть от младшего байта к старшему).
Если после префикса hex в скобках указано число 5,6,10 или большее 10, то считается, что тип установки REG_UNKNOWN, а её значение обрабатывается как REG_BINARY. Например, Corel использует тип hex(80000001).
Если тип не указан, то значение установки трактуется как символьная строка и должно быть взято в кавычки.
Если указан тип dword, то значение установки трактуется как шестнадцатиричное число. Оно должно содержать только символы 0-9, a-f, A-F (без кавычек). Символов может быть от 1 до 8.
|
Соответсвенно появился интерес накатать функции, для форматирования/перекодировки значений реестового типа REG_BINARY, REG_DWORD, REG_SZ и т.д. в формат .reg файла hex(3), hex(4), hex(1) и т.д.
Для типа REG_EXPAND_SZ, ни чего умней не родилось, как это:
Код: 
$sRegKey = 'HKEY_CURRENT_USER\Software\DashSignature\Knagalis'
$sSerial = RegRead($sRegKey, 'SN')
For $i=1 To StringLen($sSerial)
$sSerialResult &= Hex(Asc(StringMid($sSerial, $i, 1)), 2) & ',00,'
Next
$sSerialResult = 'hex(2):' & $sSerialResult
If StringRight($sSerialResult, 1) == ',' Then $sSerialResult = StringTrimRight($sSerialResult, 1)
$sFileContent = _
'Windows Registry Editor Version 5.00' & @CRLF & @CRLF & _
'[' & $sRegKey & ']' & ',00,00' & @CRLF & _
'"SN"=' & $sSerialResult & @CRLF & @CRLF
Вот и все, в этом и вопрос....осталось немного покодить 
|