Что нового

_RegRead() - чтение из реестра с записью значения по умолчанию

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
Большинство программ, когда они запускаются на компьютере в первый раз, создают в реестре свои разделы с умолчальными (стартовыми) настройками, а если параметры в реестре уже присутствуют, то считывают их значения. Это довольно грамотный подход, но для каждого параметра придется использовать пару функций: RegRead() и RegWrite(), с проверкой @error флага. А если таких параметров ...дцать?

:blink:

Я написал простую функцию, которая работает аналогично RegRead(), но если в реестре по указанному пути указанного параметра не существует, то он создается, и с дефолтным значением - $sDefault. Это же значение будет возвращено функцией. Таким образом вышеупомянутые действия сводятся к вызову всего лишь одной функции _RegRead().

Код:
Func _RegRead($sKey, $sValue, $sType, $sDefault)

	Local $Val = RegRead($sKey, $sValue)

	If @error Then
		RegWrite($sKey, $sValue, $sType, $sDefault)
		Return $sDefault
	EndIf

	Switch $sType
		Case 'REG_SZ', 'REG_MULTI_SZ', 'REG_EXPAND_SZ'
			If Not IsString($Val) Then
				Return SetError(1, 0, $sDefault)
			EndIf
		Case 'REG_BINARY'
			If Not IsBinary($Val) Then
				Return SetError(1, 0, $sDefault)
			EndIf
		Case 'REG_DWORD'
			If Not IsInt($Val) Then
				Return SetError(1, 0, $sDefault)
			EndIf
		Case Else
			Return SetError(1, 0, $sDefault)
	EndSwitch
	Return $Val
EndFunc   ;==>_RegRead


Пример:

Код:
$Val = _RegRead('HKCU\Software\MyProg', 'Test', 'REG_DWORD', 4)
ConsoleWrite($Val & @CR)
RegWrite('HKCU\Software\MyProg', 'Test', 'REG_DWORD', 2)
$Val = _RegRead('HKCU\Software\MyProg', 'Test', 'REG_DWORD', 4)
ConsoleWrite($Val & @CR)
 
Верх