Вообщем, стоит задача найти в реестре и вывести в массив все файлы, которые прописаны в меню "Создать". Конечная цель этой манипуляции - получение возможности редактирования этого меню (удаление и добавление программ).
На данный момент получился такой скрипт:
И все вроде хорошо, но мне надо, чтобы в этот список попадали только ключи (key), у которых есть значение (value) "NullFile"
Попробовал ставить доп. условие @error <> -1, на выходе получился вообще вред (все значения ветки)
Вот моя попытка-недокод:
На данный момент получился такой скрипт:
Код:
#Include <Array.au3>
#Include <WinAPIEx.au3>
Opt('MustDeclareVars', 1)
Global $hKey, $hKeySub, $Count, $test, $Sub, $testSub
$hKey = _WinAPI_RegOpenKey($HKEY_LOCAL_MACHINE, 'SOFTWARE\Classes')
$Count = _WinAPI_RegQueryInfoKey($hKey)
Dim $aKey[$Count[0]]
Dim $aRas[1]
For $i = 0 To UBound($aKey) - 1
$test = RegRead('HKEY_LOCAL_MACHINE\SOFTWARE\Classes\'&_WinAPI_RegEnumKey($hKey, $i)&'\ShellNew', 'NullFle')
If @error <>1 Then
_ArrayAdd($aRas, _WinAPI_RegEnumKey($hKey, $i))
Else
$hKeySub = _WinAPI_RegOpenKey($HKEY_LOCAL_MACHINE, 'SOFTWARE\Classes\'&_WinAPI_RegEnumKey($hKey, $i)&'')
$Sub = _WinAPI_RegQueryInfoKey($hKeySub)
Dim $aKeySub[5];[$Sub[0]]
For $p = 0 To UBound($aKeySub) - 1
$testSub = RegRead('HKEY_LOCAL_MACHINE\SOFTWARE\Classes\'&_WinAPI_RegEnumKey($hKey, $i)&'\'& _WinAPI_RegEnumKey($hKeySub, $p)&'\ShellNew', 'NullFle')
;~ MsgBox(0, '', @error)
If @error <>1 Then _ArrayAdd($aRas, _WinAPI_RegEnumKey($hKey, $i))
Next
_WinAPI_RegCloseKey($hKeySub)
Endif
Next
_WinAPI_RegCloseKey($hKey)
_ArrayDelete($aRas, 0)
_ArrayDisplay($aRas)
И все вроде хорошо, но мне надо, чтобы в этот список попадали только ключи (key), у которых есть значение (value) "NullFile"
Попробовал ставить доп. условие @error <> -1, на выходе получился вообще вред (все значения ветки)
Вот моя попытка-недокод:
Код:
#Include <Array.au3>
#Include <WinAPIEx.au3>
Opt('MustDeclareVars', 1)
Global $hKey, $hKeySub, $Count, $test, $Sub, $testSub
$hKey = _WinAPI_RegOpenKey($HKEY_LOCAL_MACHINE, 'SOFTWARE\Classes')
$Count = _WinAPI_RegQueryInfoKey($hKey)
Dim $aKey[$Count[0]]
Dim $aRas[1]
For $i = 0 To UBound($aKey) - 1
$test = RegRead('HKEY_LOCAL_MACHINE\SOFTWARE\Classes\'&_WinAPI_RegEnumKey($hKey, $i)&'\ShellNew', 'NullFle')
;~ MsgBox(0, '', @error)
If @error <>1 OR @error <>-1 Then
_ArrayAdd($aRas, _WinAPI_RegEnumKey($hKey, $i))
Else
$hKeySub = _WinAPI_RegOpenKey($HKEY_LOCAL_MACHINE, 'SOFTWARE\Classes\'&_WinAPI_RegEnumKey($hKey, $i)&'')
$Sub = _WinAPI_RegQueryInfoKey($hKeySub)
Dim $aKeySub[5];[$Sub[0]]
For $p = 0 To UBound($aKeySub) - 1
$testSub = RegRead('HKEY_LOCAL_MACHINE\SOFTWARE\Classes\'&_WinAPI_RegEnumKey($hKey, $i)&'\'& _WinAPI_RegEnumKey($hKeySub, $p)&'\ShellNew', 'NullFle')
If @error <>1 OR @error <>-1 Then _ArrayAdd($aRas, _WinAPI_RegEnumKey($hKey, $i))
Next
_WinAPI_RegCloseKey($hKeySub)
Endif
Next
_WinAPI_RegCloseKey($hKey)
_ArrayDelete($aRas, 0)
_ArrayDisplay($aRas)