Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для proxy

Старожил


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

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


читать дальше »

Код: Выделить весь код
#include-once
#include <Constants.au3>

;; REG_* constants for value types are located in <Constants.au3>
;; except REG_QWORD which is defined below

Global Const $HKEY_CLASSES_ROOT = 0x80000000
Global Const $HKEY_CURRENT_USER = 0x80000001
Global Const $HKEY_LOCAL_MACHINE = 0x80000002
Global Const $HKEY_USERS = 0x80000003
Global Const $HKEY_PERFORMANCE_DATA = 0x80000004
Global Const $HKEY_PERFORMANCE_TEXT = 0x80000050
Global Const $HKEY_PERFORMANCE_NLSTEXT = 0x80000060
Global Const $HKEY_CURRENT_CONFIG = 0x80000005
Global Const $HKEY_DYN_DATA = 0x80000006
Global Const $KEY_QUERY_VALUE = 0x0001
Global Const $KEY_SET_VALUE = 0x0002
Global Const $KEY_WRITE = 0x20006
Global Const $REG_OPTION_NON_VOLATILE = 0x0000
Global Const $REG_OPTION_VOLATILE = 0x0001
Global Const $REG_QWORD = 11

Func _RegWrite($szKey, $szValue = "", $iType = -1, $bData = Default, $dwOptions = $REG_OPTION_NON_VOLATILE)
    Local $hRoot = StringLeft($szKey, StringInStr($szKey, "\") - 1)
    If $hRoot = "" Then $hRoot = $szKey ; passed a root key
    Switch $hRoot
        Case "HKEY_LOCAL_MACHINE", "HKLM"
            $hRoot = $HKEY_LOCAL_MACHINE
        Case "HKEY_USERS", "HKU"
            $hRoot = $HKEY_USERS
        Case "HKEY_CURRENT_USER", "HKCU"
            $hRoot = $HKEY_CURRENT_USER
        Case "HKEY_CLASSES_ROOT", "HKCR"
            $hRoot = $HKEY_CLASSES_ROOT
        Case "HKEY_CURRENT_CONFIG", "HKCC"
            $hRoot = $HKEY_CURRENT_CONFIG
        Case Else
    Return SetError(1, 0, 0)
    EndSwitch

    Local $szSubkey = StringTrimLeft($szKey, StringInStr($szKey, "\"))

    Local $ret = DllCall("advapi32.dll", "long", "RegCreateKeyExW", "ulong_ptr", $hRoot, "wstr", $szSubkey, "dword", 0, "ptr", 0, "dword", $dwOptions, _
                                            "dword", $KEY_WRITE, "ptr", 0, "ulong_ptr*", 0, "ptr*", 0)
    If $ret[0] <> 0 Then Return SetError(2, $ret[0], 0)
    Local $hKey = $ret[8]
    If $iType >= 0 And $bData <> Default Then
        Switch $iType
            Case $REG_SZ, $REG_EXPAND_SZ
                $bData &= Chr(0) ; add terminating null
                Local $lpData = DllStructCreate("wchar[" & StringLen($bData) & "]")
            Case $REG_MULTI_SZ
                $bData &= Chr(0) & Chr(0) ; add 2 terminating nulls
                Local $lpData = DllStructCreate("wchar[" & StringLen($bData) & "]")
            Case Else
                Local $lpData = DllStructCreate("byte[" & BinaryLen($bData) & "]")
        EndSwitch
        DllStructSetData($lpData, 1, $bData)
        $ret = DllCall("advapi32.dll", "long", "RegSetValueExW", "ulong_ptr", $hKey, "wstr", $szValue, "dword", 0, _
                                        "dword", $iType, "ptr", DllStructGetPtr($lpData), "dword", DllStructGetSize($lpData))
    EndIf
    DllCall("advapi32.dll", "long", "RegCloseKey", "ulong_ptr", $hKey)

    If $ret[0] <> 0 Then Return SetError(3, $ret[0], 0)
    Return 1
EndFunc

Func _RegRead($szKey, $szValue)
    Local $hRoot = StringLeft($szKey, StringInStr($szKey, "\") - 1)
    If $hRoot = "" Then $hRoot = $szKey ; passed a root key
    Switch $hRoot
        Case "HKEY_LOCAL_MACHINE", "HKLM"
            $hRoot = $HKEY_LOCAL_MACHINE
        Case "HKEY_USERS", "HKU"
            $hRoot = $HKEY_USERS
        Case "HKEY_CURRENT_USER", "HKCU"
            $hRoot = $HKEY_CURRENT_USER
        Case "HKEY_CLASSES_ROOT", "HKCR"
            $hRoot = $HKEY_CLASSES_ROOT
        Case "HKEY_CURRENT_CONFIG", "HKCC"
            $hRoot = $HKEY_CURRENT_CONFIG
        Case Else
            Return SetError(1, 0, 0)
    EndSwitch

    Local $szSubkey = StringTrimLeft($szKey, StringInStr($szKey, "\"))

    Local $ret = DllCall("advapi32.dll", "long", "RegOpenKeyExW", "ulong_ptr", $hRoot, "wstr", $szSubkey, "dword", 0, "dword", $KEY_QUERY_VALUE, "ulong_ptr*", 0)
    If $ret[0] <> 0 Then Return SetError(2, $ret[0], 0)
    $hKey = $ret[5]
    $ret = DllCall("advapi32.dll", "long", "RegQueryValueExW", "ulong_ptr", $hKey, "wstr", $szValue, "ptr", 0, _
                                    "dword*", 0, "ptr", 0, "dword*", 0)
    If $ret[0] <> 0 Then Return SetError(3, $ret[0], 0)

    Local $iType = $ret[4], $iLen = $ret[6], $sType
    Switch $iType ; set type of value
        Case $REG_SZ, $REG_EXPAND_SZ, $REG_MULTI_SZ
            $sType = "wchar"
            ; iLen is byte length, if unicode string divide by 2
            ; add 2 terminating nulls for possibly incorrectly stored strings
            $iLen = ($iLen / 2) + 2
        Case $REG_BINARY, $REG_NONE
            $sType = "byte"
        Case $REG_QWORD
            $sType = "int64"
            $iLen = $iLen / 8 ; int64 = 8 bytes
        Case Else
            $sType = "int"
            $iLen = $iLen / 4 ; int = 4 bytes
    EndSwitch
    Local $lpData = DllStructCreate($sType & "[" & $iLen & "]")
    $ret = DllCall("advapi32.dll", "long", "RegQueryValueExW", "ulong_ptr", $hKey, "wstr", $szValue, "ptr", 0, _
                                    "dword*", 0, "ptr", DllStructGetPtr($lpData), "dword*", DllStructGetSize($lpData))
    DllCall("advapi32.dll", "long", "RegCloseKey", "ulong_ptr", $hKey)

    If $ret[0] <> 0 Then Return SetError(3, $ret[0], 0)
    Return SetError(0, $iType, DllStructGetData($lpData, 1))
EndFunc

Func _TypeToString($iType)
    Local $sType
    Switch $iType
        Case $REG_NONE
            $sType = "REG_NONE"
        Case $REG_SZ
            $sType = "REG_SZ"
        Case $REG_EXPAND_SZ
            $sType = "REG_EXPAND_SZ"
        Case $REG_BINARY
            $sType = "REG_BINARY"
        Case $REG_DWORD
            $sType = "REG_DWORD"
        Case $REG_DWORD_BIG_ENDIAN
            $sType = "REG_DWORD_BIG_ENDIAN"
        Case $REG_LINK
            $sType = "REG_LINK"
        Case $REG_MULTI_SZ
            $sType = "REG_MULTI_SZ"
        Case $REG_RESOURCE_LIST
            $sType = "REG_RESOURCE_LIST"
        Case $REG_FULL_RESOURCE_DESCRIPTOR
            $sType = "REG_FULL_RESOURCE_DESCRIPTOR"
        Case $REG_RESOURCE_REQUIREMENTS_LIST
            $sType = "REG_RESOURCE_REQUIREMENTS_LIST"
        Case $REG_QWORD
            $sType = "REG_QWORD"
        Case Else
            $sType = ""
    EndSwitch
    Return $sType
EndFunc


1. сохранить код в файл RegEx.au3
2. скопировать файл RegEx.au3 в папку C:\Program Files\AutoIt3\Include\
3. в своем скрипте написать в самом верху #include <RegEx.au3>
4. при чтение данных из реестра использовать функцию: _RegRead(Ключ_реестра, название_значения), параметры те же

-------
Мысли-читатель сломался, может подробней расскажите?
А где исходный код? Или мы стихи обсуждаем?! )) Настройки темы > Решено ?


Отправлено: 17:22, 20-06-2009 | #27