$reg = RegRead("HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment", "path")
MsgBox(4096, "Значения:", $reg)
Как сделать проверку? Хочу, чтобы скрипт проверил все переменные (системные и пользовательские) на наличие напимер "D:\Total".
#include <Array.au3>
$aKey = _RegSearch("HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment", "D:\Total", 2)
_ArrayDisplay($aKey)
;[0] = Instance
;[1] = Key
;[2] = Full Value (if $i_Mode = 2)
Func _RegSearch($s_Key, $s_Search, $i_Mode = 0, $i_Partial = 1, $i_Case = 0)
Local $i = 1, $sKey, $sVal, $aRet[3]
While 1
Switch $i_Mode
Case 0 ;Search in Keys
$sKey = RegEnumKey($s_Key, $i)
If @error <> 0 Then ExitLoop
If ($i_Partial And StringInStr($sKey, $s_Search, $i_Case)) Or (Not $i_Partial And $sKey = $s_Search) Then
$aRet[0] = $i
$aRet[1] = $sKey
Return $aRet
EndIf
Case 1, 2 ;Search in SubKeys, Search in SubKeys Value
$sVal = RegEnumVal($s_Key, $i)
If @error <> 0 Then ExitLoop
$aRet[0] = $i
$aRet[1] = $sVal
If $i_Mode = 2 Then
$sVal = RegRead($s_Key, $sVal)
$aRet[2] = $sVal
EndIf
If ($i_Partial And StringInStr($sVal, $s_Search, $i_Case)) Or (Not $i_Partial And $sVal = $s_Search) Then
Return $aRet
EndIf
EndSwitch
$i += 1
WEnd
Return SetError(1, 0, 0)
EndFunc
где мне поставить вывод сообщений для информации (есть или нет определённая переменная и значение)?
$aKey = _RegSearch("HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment", "D:\Total", 2)
If @error Then
MsgBox(0, '', 'Нет переменной с таким значением')
Else
MsgBox(0, '', 'Есть переменная с таким значением')
_ArrayDisplay($aKey)
EndIf
#include <Array.au3>
$aKey = _RegSearch("HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment", "Total", 2)
_ArrayDisplay($aKey)
If @error Then
MsgBox(0, '', 'Нет переменной с таким значением')
Else
MsgBox(0, '', 'Есть переменная с таким значением')
_ArrayDisplay($aKey)
EndIf
;[0] = Instance
;[1] = Key
;[2] = Full Value (if $i_Mode = 2)
Func _RegSearch($s_Key, $s_Search, $i_Mode = 0, $i_Partial = 1, $i_Case = 0)
Local $i = 1, $sKey, $sVal, $aRet[3]
While 1
Switch $i_Mode
Case 0 ;Search in Keys
$sKey = RegEnumKey($s_Key, $i)
If @error <> 0 Then ExitLoop
If ($i_Partial And StringInStr($sKey, $s_Search, $i_Case)) Or (Not $i_Partial And $sKey = $s_Search) Then
$aRet[0] = $i
$aRet[1] = $sKey
Return $aRet
EndIf
Case 1, 2 ;Search in SubKeys, Search in SubKeys Value
$sVal = RegEnumVal($s_Key, $i)
If @error <> 0 Then ExitLoop
$aRet[0] = $i
$aRet[1] = $sVal
If $i_Mode = 2 Then
$sVal = RegRead($s_Key, $sVal)
$aRet[2] = $sVal
EndIf
If ($i_Partial And StringInStr($sVal, $s_Search, $i_Case)) Or (Not $i_Partial And $sVal = $s_Search) Then
Return $aRet
EndIf
EndSwitch
$i += 1
WEnd
Return SetError(1, 0, 0)
EndFunc
#include <Array.au3>
Dim $aSearch[2] = ["Total", "Firefox"]
For $sSearch_Str In $aSearch
$aKey = _RegSearch("HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment", $sSearch_Str, 2)
If Not @error Then
_ArrayDisplay($aKey)
EndIf
Next
;[0][0] = Total items found
;[N][0] = Key
;[N][1] = Full Value (if $i_Mode = 2)
Func _RegSearch($s_Key, $s_Search, $i_Mode = 0, $i_Partial = 1, $i_Case = 0, $i_RetFirstPos = 0)
Local $i = 1, $sKey, $sSubKey, $sVal, $aRet[1][1]
While 1
Switch $i_Mode
Case 0 ;Search in Keys
$sKey = RegEnumKey($s_Key, $i)
If @error <> 0 Then ExitLoop
If ($i_Partial And StringInStr($sKey, $s_Search, $i_Case)) Or (Not $i_Partial And $sKey = $s_Search) Then
$aRet[0][0] += 1
ReDim $aRet[$aRet[0][0]+1][2]
$aRet[$aRet[0][0]][0] = $sKey
If $i_RetFirstPos Then
Return $aRet
EndIf
EndIf
Case 1, 2 ;Search in SubKeys, Search in SubKeys Value
$sSubKey = RegEnumVal($s_Key, $i)
If @error <> 0 Then ExitLoop
$sVal = $sSubKey
If $i_Mode = 2 Then
$sVal = RegRead($s_Key, $sSubKey)
EndIf
If ($i_Partial And StringInStr($sVal, $s_Search, $i_Case)) Or (Not $i_Partial And $sVal = $s_Search) Then
If $i_Mode <> 2 Then $sVal = ''
$aRet[0][0] += 1
ReDim $aRet[$aRet[0][0]+1][2]
$aRet[$aRet[0][0]][0] = $sSubKey
$aRet[$aRet[0][0]][1] = $sVal
If $i_RetFirstPos Then
Return $aRet
EndIf
EndIf
EndSwitch
$i += 1
WEnd
If $aRet[0][0] > 0 Then
Return $aRet
EndIf
Return SetError(1, 0, 0)
EndFunc
$s_Key - Путь реестра (имя раздела) в котором будет выполнен поиск.
$s_Search - Строка поиска.
$i_Mode - Режим поиска: 0 (по умолчанию) -> поиск в ключах (подменю в разделе), 1 -> поиск в имени ключей, 2 -> поиск в значениях ключей.
$i_Partial - Определяет частичность поиска: 0 -> поиск как «слово целиком», 1 (по умолчанию) -> частичное совпадение.
$i_Case - Определяет регистрозависимый поиск: 0 (по умолчанию) -> поиск без учёта регистра букв, 1 -> поиск с учётом регистра букв.
$i_RetFirstPos - Определяет возвращаемое значение: 0 (по умолчанию) -> возвращать все найденные совпадения в массиве, 1 -> возвращать только первое найденное совпадение.
[0][0] ;Число найденных ключей (переменных в данном случае).
[N][0] ;Ключ в котором найдена строка.
[N][1] ;Собственно вся строка в которой найдено совпадение.
Пользовательские переменные в реестре находятся по следующему пути: HKCU\EnvironmentА как насчёт, чтобы указывались переменные, то есть где Local, а где Current?
Проверяй @error, если он больше 0-ля тогда переменная не найдена, соответственно выводи запрос (можно через InputBox) и создавай переменную (см. RegWrite в справке, хотя я уже дал выше ссылку по которой этот вопрос решён).И этот скрипт только проверяет. Как, чтобы был запрос, если переменная отсутствует, то выдавало запрос на создание тех переменных, которые я проверяю?
:blink:За что отвечает первое окно и за что второе?