Func DELETEKEY()
$COUNTER=1
while true
$KEY=RegEnumKey("HKCR\CLSID",$COUNTER)
if @error <> 0 then ExitLoop
if StringRight($KEY,28)="-2520-40B4-8520-2980C53A1C05" then
RegDelete("HKCR\CLSID\"&$KEY)
ContinueLoop
endif
$COUNTER+=1
wend
EndFunc
#Include <File.au3>
#Include <Array.au3>
Dim $aRecords
_FileReadToArray ("111.reg", $aRecords)
_ArrayDisplay ($aRecords)
$s = ""
For $r=1 to $aRecords[0]
$s &=$aRecords[$r]
Next
ConsoleWrite ("регэксп стартует" & @CRLF)
$aRecords2 = StringRegExp ($s, "\{?[A-z\d]{8}-2520-40B4-8520-2980C53A1C05\}?", 3)
_ArrayDisplay ($aRecords2)
у меня 5,5 Мбo_nix сказал(а):Какого размера входной файл получается ?
Func DELETEKEY()
Local $Ret, $tData, $pData, $hKey, $Count = 0
$Ret = DllCall('advapi32.dll', 'long', 'RegOpenKeyExW', 'ulong_ptr', 0x80000000, 'wstr', 'CLSID', 'dword', 0, 'dword', 0xF003F, 'ulong_ptr*', 0)
If (@error) Or ($Ret[0]) Then
Return SetError(1, 0, 0)
EndIf
$hKey = $Ret[5]
$tData = DllStructCreate('wchar[1024]')
$pData = DllStructGetPtr($tData)
While 1
$Ret = DllCall('advapi32.dll', 'long', 'RegEnumKeyW', 'ulong_ptr', $hKey, 'dword', $Count, 'ptr', $pData, 'dword', 1024)
If (@error) Or ($Ret[0]) Then
ExitLoop
EndIf
If StringRight(DllStructGetData($tData, 1), 28) = '-2520-40B4-8520-2980C53A1C05' Then
DllCall('advapi32.dll', 'long', 'RegDeleteKeyW', 'ulong_ptr', $hKey, 'wstr', DllStructGetData($tData, 1))
EndIf
$Count += 1
WEnd
DllCall('advapi32.dll', 'long', 'RegCloseKey', 'ulong_ptr', $hKey)
$tData = 0
EndFunc ;==>DELETEKEY
snoitaleR сказал(а):Точнее, _ArrayDisplay ($aRecords) выдала весь массив строк, а _ArrayDisplay ($aRecords2) ничего не выдала...
Хотя строки нужные точно есть в файле...
Кстати, размер строковой переменной 2147483647 символов...
А мой файл 2,8 МБ, что больше, поэтому строковая переменная могла переполниться...
$nHKEY_LOCAL_MACHINE = 0x80000002
$sRegKey = "SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
$aRet = DllCall('advapi32.dll', 'long', 'RegOpenKeyExW', 'ulong_ptr', $nHKEY_LOCAL_MACHINE, _
'wstr', $sRegKey, 'dword', 0, 'dword', 0xF003F, 'ulong_ptr*', 0)
If @error Or $aRet[0] Then Exit
$hKey = $aRet[5]
$tData = DllStructCreate('char[1024]')
$pData = DllStructGetPtr($tData)
$i = 0
While 1
$aRet = DllCall('advapi32.dll', 'long', 'RegEnumValue', 'ulong_ptr', $hKey, 'dword', $i, 'ptr', $pData, 'dword', 1024, 'ptr', 0)
If @error Or $aRet[0] Then ExitLoop
$sRegKey_Name = DllStructGetData($tData, 1)
$i += 1
ConsoleWrite($sRegKey_Name & @CRLF)
WEnd
DllCall('advapi32.dll', 'long', 'RegCloseKey', 'ulong_ptr', $hKey)
DllCall('advapi32.dll', 'long', 'RegEnumValue', 'ulong_ptr', $hKey, 'dword', $i, 'ptr', $pData, 'dword*', 1024, 'ptr', 0, 'ptr', 0, 'ptr', 0, 'ptr', 0)