Что нового

[Реестр] Определение пути через реестр

Сообщения
94
Репутация
-1
Доброе время суток. Требуется определить путь через реестр, но вместо названия раздела была маска EDeclaration*_is1 т.к. в разделе присутствует цифры, которые меняются в зависимости от версии программы.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
скрипт возвращает в массиве установленные программы.
Код:
#include <Array.au3>

Local $aPath = _GetPathProg()
_ArrayDisplay($aPath)

Func _GetPathProg()
	Local $all_key[3]
	$all_key[0] = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
	$all_key[1] = "HKEY_LOCAL_MACHINE64\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
	$all_key[2] = 'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall'
	Local $aSA[1][2], $AppKey_all, $n = 0, $X = 1, $rn, $il
	For $i = 0 To 2
		Local $a = 1
		While 1
			$AppKey_all = RegEnumKey($all_key[$i], $a)
			If Not $AppKey_all Then ExitLoop
			$rn = StringStripWS(StringReplace(RegRead($all_key[$i] & "\" & $AppKey_all, "DisplayName"), " (remove only)", ""), 3)
			$il = StringStripWS(RegRead($all_key[$i] & "\" & $AppKey_all, "InstallLocation"), 3)
			If $rn <> '' And $il <> '' Then
				ReDim $aSA[$X][2]
				$aSA[$n][0] = $rn
				If StringRight($il, 1) = '\' Then $il = StringTrimRight($il, 1)
				$aSA[$n][1] = StringReplace($il, '"', '')
				$n += 1
				$X += 1
			EndIf
			$a += 1
		WEnd
	Next
	Return $aSA
EndFunc   ;==>_GetPathProg
 
Автор
Xabib2302
Сообщения
94
Репутация
-1
joiner [?]
скрипт возвращает в массиве установленные программы.
дело в том, что мне надо определить путь и по этому пути разархивировать архив. но т.к раздел в реестре меняется в зависимости от версии программы EDeclaration6493_is1 то хотелось чтобы вместо EDeclaration6493_is1 была маска EDeclaration_is1
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Xabib2302, путь к установленной программе? так?
название программы меняется частично, правильно я понял?

EDeclaration - это часть имени постоянна. так?
Код:
Local $aPath = _GetPathProg()
For $i = 0 To UBound($aPath) - 1
	If StringInStr($aPath[$i][0], 'EDeclaration') Then
;~ 		$aPath[$i][1] ; путь к папке программы
		;твоя функция
;~ 		 Exitloop ; если нужно
	EndIf
Next
 
Верх