Старожил
Сообщения: 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(Ключ_реестра, название_значения), параметры те же
|