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

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

Аватара для wolkow70

Ветеран


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

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


kotkovets,
Хочу посоветоваться по поводу известного нам макроса ассоциации файлов.

Как известно Xp не видит HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\${extenstion}\UserChoice"
В тоже время некоторые программы ведут себя не грамотно и пописывают ассоциации
в HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.${extenstion}" "Progid" "$ClassName" (например KMPlayer), что создает проблемы со сменой ассоциаций при установке других программ.
Немного подумав сделал так в макросе:

Код: Выделить весь код
!macro RegisterExtension extenstion
StrCpy $ClassName "VLC.${extenstion}"
WriteRegStr HKLM "SOFTWARE\Classes\.${extenstion}" "" "$ClassName"
GetVersion::WindowsName
Pop $R0
StrCmp $R0 "XP" 0 noxp
WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.${extenstion}" "Progid" "$ClassName"
noxp:
DeleteRegKey HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.${extenstion}\UserChoice"
WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.${extenstion}\UserChoice" "Progid" "$ClassName"
;
WriteRegStr HKLM "SOFTWARE\Classes\$ClassName\shell" "" "Open"
WriteRegStr HKLM "SOFTWARE\Classes\$ClassName\shell\Open" "" "Воспроизвести"
WriteRegStr HKLM "SOFTWARE\Classes\$ClassName\shell\Open\command" "" "$OpenCommand"
;
;
!macroend
То есть, если установка идет на XP, то прописывать ассоциацию не в UserChoice, а в
HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.${extenstion}" "Progid" "$ClassName", что бы затереть запись другой программы.

На Cемерке и Viste такой проблемы нет, так как UserChoice имеет приоритет, а в ХР не присходит смена ассоциаций.
Как Вы считаете разумно ли так поступить, или есть более красивое решение?

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


Отправлено: 15:01, 11-07-2011 | #1330