Что нового

удаление ключа реестра по 1-му символу из имени

Orus

Новичок
Сообщения
41
Репутация
1
Всем здравствуйте.
У меня появился вопрос. Существует в AutoIt функция RegDelete. Использование её RegDelte("key_name","value_name"). key_name я знаю, вот проблема с value_name, я его не знаю, но знаю, что он всегда начинается на '#' и он единственный во всем списке имеет такое начало. Можно ли как-нибудь написать этот самый value_name, чтобы искать его по шаблону? Т.е. как обычно это делается с помощью '*', но в данном случае она не помогла :(
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
Re: RegDelete

Orus
я не профи, но думаю, что придется воспользоваться в цикле функцией:
RegEnumKey("keyname",instance)
чтобы перебрать ключи по очереди, а для избранных выполнить функцию:
RegDelete("keyname",["valuename"])
А при проверке условия "избранности" (if) с помощью строковых функций можно задать шаблон совпадения...
 
Автор
O

Orus

Новичок
Сообщения
41
Репутация
1
Re: RegDelete

Как то я не добрался до этой функции :smile: А как мне сравнить первый символ из этого ключа с решеткой?
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
Re: RegDelete

Код:
$KEY="HKEY_LOCAL_MACHINE\SOFTWARE"
 $COUNTER=1
 while 1
  $NAME=RegEnumKey($KEY,$COUNTER)
  if @error<>0 then ExitLoop
  if StringLeft($NAME,1)="#" then RegDelete($KEY,$NAME)
 wend


Приблизительно так...
 
Автор
O

Orus

Новичок
Сообщения
41
Репутация
1
Re: RegDelete

любой адрес задаю, вылетает ошибка "-1" - "если требуемое значение недоступно (указанный экземпляр отсутствует)"
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Re: RegDelete

Orus
Предупреждение За нарушение правил, пункт Б.5

5. Имя темы должно нести смысловую нагрузку (отражать суть вопроса/проблемы) - Темы с названием типа "Помагите" и "Пару вопросов", скорее всего, будут удалены. Правильно сформулированное название темы привлекает больше внимания, и шансы получить конкретный ответ увеличиваются.

Жду в ПМ новое название темы, или переименуйте тему сами.

Добавлено:
Сообщение автоматически объединено:

snoitaleR [?]
Приблизительно так...
Вообще-то $Counter нужно увеличивать.
Добавлено:
Сообщение автоматически объединено:

Код:
_RegDeleteEx("HKEY_LOCAL_MACHINE\SOFTWARE\Test", "^#.*$", 1)

;Удаление ключа реестра по его значению
Func _RegDeleteEx($s_Key, $s_Val, $i_UseRegExp=0)
	Local $sCurrent_ValName, $sRegRead, $iCount = 1
	
	While 1
		$sCurrent_ValName = RegEnumVal($s_Key, $iCount)
		If @error <> 0 Then ExitLoop
		
		$sRegRead = String(RegRead($s_Key, $sCurrent_ValName))
		
		If ($i_UseRegExp > 0 And StringRegExp($sRegRead, $s_Val)) Or ($i_UseRegExp = 0 And $sRegRead = $s_Val) Then _
			Return RegDelete($s_Key, $sCurrent_ValName)
		
		$iCount += 1
	WEnd
	
	Return @error
EndFunc
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
Спешил, спешил, и все равно не успел... :smile:

Но свой вариант, дополненный и исправленный предлагаю:

Код:
$KEY="HKEY_LOCAL_MACHINE\SOFTWARE"
 $COUNTER=1
 while 1
  $NAMEKEY=RegEnumVal($KEY,$COUNTER)
  if @error<>0 then ExitLoop
  if StringLeft($NAMEKEY,1)="#" then
   RegDelete($KEY,$NAMEKEY)
   ContinueLoop
  endif
  $COUNTER+=1
 wend
 
Автор
O

Orus

Новичок
Сообщения
41
Репутация
1
snoitaleR спасибо большое, держи "+" :smile:
 
Верх