Имя пользователя:
Пароль:
 

Название темы: Регфайл, синтаксис.
Показать сообщение отдельно

Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата semiono:
зделать утиль regEx.exe которая читает ввод командой строки »
сколько угодно, только тестируйте
Код: Выделить весь код
Global $KEY, $VAL, $ADD = False, $OUT=StringRegExpReplace(@ScriptFullPath,".[^.]+$", ".reg")

Global $aParms = StringRegexp($CmdLineRaw, '/(\w+)(?:[\s:]+(?:"([^"]+)"|([^\s/"]+)))?', 4)
If @error Then Exit -1 ; Ошибка: не указано ни одного параметра
For $aParm In $aParms
    If UBound($aParm)=2 Then Assign($aParm[1], True)
    If UBound($aParm)>2 Then Assign($aParm[1], $aParm[UBound($aParm)-1])
Next

Global $iMode=8+2
If $ADD Then $iMode = 1

If $VAL=="*" Then $VAL = _RegEnumVals($KEY)
_RegValSave($OUT, $KEY, $VAL, $iMode)
Exit @error ; ошибки выполнения _RegValSave()

; =============================================================================
; _RegEnumVals($key)
; -----------------------------------------------------------------------------
; Перечисление всех параметров заданного ключа реестра
; $key        : имя ключа реестра
;
; При успехе  : возвращает массив имен параметров со счетчиком
; При неудаче : возвращает пустой массив
; =============================================================================
Func _RegEnumVals($key)
    Local $aRes[1]=[-1],$sVal=0
    Do
        $aRes[0] +=1
        ReDim $aRes[$aRes[0]+1]
        $aRes[$aRes[0]] = $sVal
        $sVal = RegEnumVal($key, $aRes[0]+1)
    Until @error
    Return $aRes
EndFunc ; ==> _RegEnumVals

; =============================================================================
; _RegValSave($file, $key, [$vals, [, $mode]])
; -----------------------------------------------------------------------------
; Сохранение заданных параметров в REG-файл
;
; $file       : имя файла или хэндл
; $key        : имя ключа реестра
; $vals       : одно или несколько имен параметров, разделенных ",|;"
 ;             : или массив элементов со счетчиком
; $mode       : режим открытия файла (см. FileOpen)
;
; При успехе  : возвращает 1
;
; При неудаче : возвращает 0
;             :   @error=0, неверный режим открытия
;             :   @error=1, не обнаружено ни одного из заданных параметров
;             :   @error=2, ошибка открытия файла
; =============================================================================
Func _RegValSave($file, $key, $vals = "", $mode = 10)
    Local $dat, $txt = ""
    If Not(IsArray($vals)) Then $vals = StringSplit($vals,",;|")
    For $i=1 To $vals[0]
        $dat = RegRead($key, $vals[$i])
        If @error Then ContinueLoop
        $txt &= _RegValFormat($vals[$i], $dat, @extended) &@CRLF
    Next
    If $txt=="" Then Return SetError(1, 0, 0)
    If IsString($file) Then
        $file = FileOpen($file, $mode)
        If $file = -1 Then Return SetError(2, 0, 0)
        If BitAND($mode,2) Then FileWrite($file,'Windows Registry Editor Version 5.00'&@CRLF)
    EndIf
    $key = StringRegExpReplace($key, "^HKLM\\", "HKEY_LOCAL_MACHINE\\")
    $key = StringRegExpReplace($key, "^HKCU\\", "HKEY_CURRENT_USER\\")
    $key = StringRegExpReplace($key, "^HKCR\\", "HKEY_CLASSES_ROOT\\")
    $key = StringRegExpReplace($key, "^HKU\\" , "HKEY_USERS\\")
    $key = StringRegExpReplace($key, "^HKCC\\", "HKEY_CURRENT_CONFIG\\")

    Return FileWrite($file, @CRLF&"["& $key &"]"&@CRLF& $txt)
EndFunc ; ==> _RegValSave

; =============================================================================
; _RegValFormat($sVal, $xData[, $iType])
; -----------------------------------------------------------------------------
; Вывод значения параметра реестра в формате REG-файла
;
; $sVal   : имя параметра
; $xData  : значение параметра, поддерживаемые комбинации тип+значение:
;             $iType=1, $xData - текстовая строка
;             $iType=2, $xData - текстовая строка
;             $iType=3, $xData - HEX или бинарная строка
;             $iType=4, $xData - целое 32-х битное число
;             $iType=7, $xData - одна или несколько текстовых строк
;         : при несоответствии, параметр преобразуется к требуемому типу
; $iType  : тип параметра
;             $iType=1 - REG_SZ
;             $iType=2 - REG_EXPAND_SZ
;             $iType=3 - REG_BINARY
;             $iType=4 - REG_DWORD
;             $iType=7 - REG_MULTI_SZ
;         : все другие значения $iType форматируются как REG_BINARY
; =============================================================================
Func _RegValFormat($sVal, $xData, $iType = 1)
    Local $sData='"'& $sVal &'"=hex('& $iType &'):', $iWidth
    If $sVal=="" Then $sVal="@"

    If $iType=1 Then Return '"'& $sVal &'"="'& $xData &'"' ; REG_SZ
    If $iType=2 Then $xData=StringToBinary($xData & Chr(0), 2) ; REG_EXPAND_SZ
    If $iType=3 Then $sData='"'& $sVal &'"=hex:' ; REG_BINARY
    If $iType=4 Then Return '"'& $sVal &'"=dword:'& Hex(Int($xData),8) ; REG_DWORD
    If $iType=7 Then $xData=StringToBinary(StringRegExpReplace($xData &@LF,"[\n\r]+",Chr(0)) &Chr(0), 2) ; REG_MULTI_SZ

    If Not(IsBinary($xData)) Then $xData = Binary(StringRegExpReplace($xData,"^(?i:\s*0x)?((?:[[:xdigit:]]{2})+)$","0x\1"))
    $xData = StringTrimRight(StringRegExpReplace(Hex($xData),"(..)", "\1,"), 1)

    $iWidth = 80-StringLen($sData)
    While StringLen($xData) > $iWidth
        $sData&= StringLeft($xData, Int(($iWidth-1)/3)*3) &"\"&@CRLF&"  "
        $xData = StringTrimLeft ($xData, Int(($iWidth-1)/3)*3)
        $iWidth = 78
    WEnd
    Return $sData & $xData
EndFunc ; _RegValFormat
компилировать консольным приложением (RegSave), пример использования:
Код: Выделить весь код
@Echo Off

RegSave /OUT:C:\TEST\TEST.reg /KEY:HKLM\SYSTEM\CurrentControlSet\Services\USBSTOR /VAL:DisplayName,Start,ImagePath
RegSave /OUT:C:\TEST\TEST.reg /KEY:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion /VAL:DevicePath,ProgramFilesDir /ADD
RegSave /OUT:C:\TEST\TEST.reg /KEY:HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Streams\0 /VAL:* /ADD

Последний раз редактировалось amel27, 30-06-2009 в 03:54. Причина: мелкая оптимизация

Это сообщение посчитали полезным следующие участники:

Отправлено: 11:47, 29-06-2009 | #27

Название темы: Регфайл, синтаксис.