Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для wolkow70

Ветеран


Сообщения: 3206
Благодарности: 845

Профиль | Отправить PM | Цитировать


kotkovets, добрый день.

Пытаюсь разобраться в вопросе определения ключей реестра

Нашел в справке вот что:

${If} ${KeyExists} "${HKCU}\Software\7-zip"
# здесь выполняются команды, если ключ существует
DetailPrint "Ключ есть!"
${Else}
# здесь выполняются команды, если ключа не существует
DetailPrint "Ключа не существует!"
${EndIf}

Но это не вовсем то, что требуется.

Пытаюсь сделать обновленный более гибкий макрос файловых ассоциаций

Алгоритм нужен такой:

1. Если существует ключ;
2. И если не присвоено значение по умолчанию;
3. Или значение имеет нулевую длину
- то переход бо безусловной метке.
Иначе выполняются комманды бэкапа и перезаписи асооциаций.

У самого получилось пока вот что:

Код: Выделить весь код
!macro RegisterExtension extenstion
Push $1
Push $2	
;
StrCpy $ClassName "Winamp.File.${extenstion}"
;
ReadRegStr $1 HKCU "Software\Classes\.${extenstion}" ""    ; Читаем сначала в HKCU
StrCmp "$1" "" NoAssocHKCU        ;если значение по умолчанию не присвоено не пишем ассоциацию в HKCU 
StrCmp "$1" "$ClassName" NoBackupHKCU   ;если совпадает тип файла не бэкапим
WriteRegStr HKCU "Software\Classes\.${extenstion}" "Winamp_Back" "$1" ;иначе бэкапим

NoBackupHKCU:

WriteRegStr HKCU "Software\Classes\.${extenstion}" "" "$ClassName"  ;пишем ассоциацию

NoAssocHKCU:
;
ReadRegStr $1 HKCU "Software\Classes\.${extenstion}" ""   ; заново читаем значение в HKCU 
StrCmp "$1" "$ClassName" NoAssocHKLM     ;если применена ассоциация в HKCU пропускаем переход в HKLM
;
DeleteRegValue HKCU "Software\Classes\.${extenstion}" ""   ; удаляем значение пустого ключа в HKCU  на случай нулевой длины (бывает например в ключах созданных AIMP) 
;
ReadRegStr $2 HKLM "SOFTWARE\Classes\.${extenstion}" ""  ;читаем значение в HKLM 
StrCmp "$2" "" NoBackupHKLM                            ;если нет значения по умолчанию не бэкапим
StrCmp "$2" "$ClassName" NoBackupHKLM        ;если тип совпадает - не бэкапим
WriteRegStr HKLM "SOFTWARE\Classes\.${extenstion}" "Winamp_Back" "$2" ;иначе бэкапим

NoBackupHKLM:

WriteRegStr HKLM "SOFTWARE\Classes\.${extenstion}" "" "$ClassName" ;пишем ассоциацию 

NoAssocHKLM:

Pop $1
Pop $2
!macroend
Тут смысл повторить логику внесения асооциаций оригинального Winamp. Если есть значение по умолчанию в HKCU , то ассоциация пишется и бэкапится в HKCU, если ассоциация в HKCU не прописана, то вносится и бэкапится в HKLM. В принципе так и должно быть в нормальной программе.

-------
Человек человеку - друг, товарищ и волк!


Последний раз редактировалось wolkow70, 18-03-2012 в 10:38.


Отправлено: 10:24, 18-03-2012 | #2415