Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » AutoIT (Часть 1)

Модерирует : gyra, Maz

Widok (12-01-2009 14:47): лимит страниц. продолжаем здесь  Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

   

NORIO



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору


Код:
#include-once
 
#CS Registry extended UDFs.
    Originaly by wraithdu (http://www.autoitscript.com/forum/index.php?showtopic=70108)
    Modified (at 01.12.2008) by MsCreatoR (CreatoR's Lab - http://creator-lab.ucoz.ru).
#CE
 
;Delete registry key by it's value
Func _RegDeleteEx($s_Key, $s_Val)
    Local $sCurrent_ValName, $iCount = 1
    
    While 1
        $sCurrent_ValName = RegEnumVal($s_Key, $iCount)
        If @error <> 0 Then ExitLoop
        
        If String(RegRead($s_Key, $sCurrent_ValName)) = $s_Val Then Return RegDelete($s_Key, $sCurrent_ValName)
        
        $iCount += 1
    WEnd
    
    Return @error
EndFunc   ;==>_RegDeleteEx
 
Func _RegCopyKey($s_Key, $d_Key, $iDelete = False)
    Local $i, $sVal, $sData, $sType, $sKey
 
    RegWrite($d_Key) ; write dest Key, in case Key empty
    If @error Then Return @error ; some error
    
    ; Value loop
    $i = 0
    
    While 1
        $i += 1
        
        $sVal = RegEnumVal($s_Key, $i)
        If @error Then ExitLoop ; no more Values
        
        $sData = RegRead($s_Key, $sVal)
        If @error Then ContinueLoop ; some error reading Value, skip it
        
        $sType = _RegGetExtendedType(@extended)
        RegWrite($d_Key, $sVal, $sType, $sData) ; write new Value
    WEnd
    
    ; Key loop
    $i = 0
    
    While 1
        $i += 1
        $Key = RegEnumKey($s_Key, $i)
        If @error Then ExitLoop ; no more Keys
        _RegCopyKey($s_Key & "\" & $sKey, $d_Key & "\" & $sKey) ; recurse
    WEnd
    
    ; move Key
    If $iDelete Then RegDelete($s_Key)
EndFunc   ;==>_RegCopyKey
 
Func _RegMoveKey($s_Key, $d_Key)
    _RegCopyKey($s_Key, $d_Key, True)
EndFunc   ;==>_RegMoveKey
 
Func _RegCopyValue($s_Key, $s_Val, $d_Key, $d_Val, $iDelete = False)
    Local $sData, $sType
 
    $sData = RegRead($s_Key, $s_Val)
    If @error Then Return SetError(1, 0, 0) ; some error reading Value, skip it
    
    $sType = _RegGetExtendedType(@extended)
    
    RegWrite($d_Key, $d_Val, $sType, $sData)
    If $iDelete Then RegDelete($s_Key, $s_Val)
EndFunc   ;==>_RegCopyValue
 
Func _RegMoveValue($s_Key, $s_Val, $d_Key, $d_Val)
    _RegCopyValue($s_Key, $s_Val, $d_Key, $d_Val, True)
EndFunc   ;==>_RegMoveValue
 
Func _RegKeyExists($s_Key)
    RegRead($s_Key, "")
    If @error <= 0 Then Return 1 ; Key exists
    
    Return 0
EndFunc   ;==>_RegKeyExists
 
Func _RegSubKeySearch($s_Key, $s_Search, $i_Mode = 0, $i_Case = 0)
    ; success returns subKey index
    ; failure returns 0
    Local $i = 1, $sKey, $iLen = StringLen($s_Search), $sString
    
    While 1
        $sKey = RegEnumKey($s_Key, $i)
        If @error Then Return 0 ; no more Keys
        
        Switch $i_Mode
            Case 0 ; substring
                If StringInStr($sKey, $s_Search, $i_Case) Then Return $i
            Case 1 ; beginning of string
                $sString = StringLeft($sKey, $iLen)
                
                Switch $i_Case
                    Case 0 ; case insensitive
                        If $sString = $s_Search Then Return $i
                    Case 1 ; case sensitive
                        If $sString == $s_Search Then Return $i
                EndSwitch
        EndSwitch
        
        $i += 1
    WEnd
EndFunc   ;==>_RegSubKeySearch
 
Func _RegValueExists($s_Key, $s_Val)
    RegRead($s_Key, $s_Val)
    ; @error == -2 is 'type not supported', implying Value exists
    If @error = -1 Or @error >= 1 Then Return 0 ; Value does not exist
    
    Return 1
EndFunc   ;==>_RegValueExists
 
Func _RegKeyEmpty($s_Key)
    Local $i_Error1 = 0, $i_Error2 = 0
    
    ; check for Keys
    RegEnumKey($s_Key, 1)
    If @error Then $i_Error1 = 1
    ; check for Values
    RegEnumVal($s_Key, 1)
    If @error Then $i_Error2 = 1
    
    ; set return
    If $i_Error1 And $i_Error2 Then Return 1 ; empty
    
    Return 0
EndFunc   ;==>_RegKeyEmpty
 
Func _RegExport($sRegFile, $sKeyName, $sValueName="")
    If $sValueName <> "" Then
        Local $sRegRead = RegRead($sKeyName, $sValueName)
        Local $hOpen = FileOpen($sRegFile, 2)
        
        FileWrite($hOpen, 'Windows Registry Editor Version 5.00' & @CRLF & @CRLF & _
            "[" & $sKeyName & "]" & @CRLF & _
            '"' & $sValueName & '"="' & StringRegExpReplace($sRegRead, '([\\"])', '\\\1') & '"' & @CRLF)
        
        FileClose($hOpen)
    Else
        Run(@ComSpec & ' /c Reg Export "' & $sKeyName & '" "' & $sRegFile & '"', '', @SW_HIDE)
    EndIf
EndFunc   ;==>_RegExport
 
Func _RegImport($sRegFile)
    Run('RegEdit.exe /s "' & $sRegFile & '"')
EndFunc   ;==>_RegImport
 
Func _RegSetEnvironment($sEnv_Name, $sEnv_Value, $iReplace=0, $iKeyVal=0, $iEnv_Update=0)
    If $sEnv_Name = "" Then Return SetError(1, 0, 0)
    If $sEnv_Value = "" Then Return SetError(2, 0, 0)
    If $iReplace <> 0 And $iReplace <> 1 Then Return SetError(3, 0, 0)
    
    Local $iRet = 0, $iError = 0
    Local $sSystemRegKey = "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
    Local $sUserRegKey = "HKEY_CURRENT_USER\Environment"
    
    Local $sRegKey = $sSystemRegKey
    If $iKeyVal = 1 Then $sRegKey = $sUserRegKey
    
    If $iReplace = 1 Then
        $iRet = RegWrite($sRegKey, $sEnv_Name, "REG_SZ", $sEnv_Value)
        $iError = @error
    ElseIf RegRead($sRegKey, $sEnv_Name) = "" Then
        $iRet = RegWrite($sRegKey, $sEnv_Name, "REG_SZ", $sEnv_Value)
        $iError = @error
    EndIf
    
    If $iEnv_Update Then EnvUpdate()
    
    Return SetError($iError, 0, $iRet)
EndFunc   ;==>_RegSetEnvironment
 
Func _RegGetExtendedType($iExtended)
    Local $aRegTypeArr[8] = [7, "REG_SZ", "REG_EXPAND_SZ", "REG_BINARY", "REG_DWORD", _
        "REG_DWORD_BIG_ENDIAN", "REG_LINK", "REG_MULTI_SZ"]
    
    For $i = 1 To 7
        If $iExtended = $i Then Return $aRegTypeArr[$i]
    Next
EndFunc   ;==>_RegGetExtendedType
 
Func _RegExtensionRegister($sExtension, $sAppName, $sAppExt, $sAppPath, $iEnvUpdate=0)
    RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\." & $sExtension, _
        "Application", "REG_SZ", $sAppName & "." & $sAppExt)
     
    RegWrite("HKEY_CLASSES_ROOT\Applications\" & $sAppName & "\Shell", "", "REG_SZ", "Open in " & $sAppName)
    RegWrite("HKEY_CLASSES_ROOT\Applications\" & $sAppName & "\Shell\Open", "", "REG_SZ", "Open in " & $sAppName)
    RegWrite("HKEY_CLASSES_ROOT\Applications\" & $sAppName & "\Shell\Open\command", "", "REG_SZ", '"' & $sAppPath & '" %1')
    
    If $iEnvUpdate Then EnvUpdate()
EndFunc   ;==>_RegExtensionRegister
 
Func _RegReadKeyValueToArray($s_Key, $iKey_Value_Mode=0)
    Local $aKeysListArr[1], $aSubKeysListArr, $iInstance = 0, $sEnum_KeyVal, $sCurrentKeyPath
    
    If Not _RegKeyExists($s_Key) Then Return SetError(1, 0, $aKeysListArr)
    
    While 1
        $iInstance += 1
        
        If $iKey_Value_Mode = 0 Then
            $sEnum_KeyVal = RegEnumKey($s_Key, $iInstance)
        Else
            $sEnum_KeyVal = RegEnumVal($s_Key, $iInstance)
        EndIf
        
        If @error <> 0 Then ExitLoop
         
        $sCurrentKeyPath = $s_Key & "\" & $sEnum_KeyVal
        
        $aKeysListArr[0] += 1
        ReDim $aKeysListArr[$aKeysListArr[0]+1]
        $aKeysListArr[$aKeysListArr[0]] = $sCurrentKeyPath
        
        $aSubKeysListArr = _RegReadKeyValueToArray($sCurrentKeyPath)
        
        For $j = 1 To $aSubKeysListArr[0]
            $aKeysListArr[0] += 1
            
            ReDim $aKeysListArr[$aKeysListArr[0]+1]
            $aKeysListArr[$aKeysListArr[0]] = $aSubKeysListArr[$j]
        Next
    WEnd
    
    Return $aKeysListArr
EndFunc   ;==>_RegReadKeyValueToArray


Всего записей: 875 | Зарегистр. 18-12-2004 | Отправлено: 12:51 08-12-2008
   

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Программы » AutoIT (Часть 1)
Widok (12-01-2009 14:47): лимит страниц. продолжаем здесь


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru