You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
190 lines
4.5 KiB
190 lines
4.5 KiB
/* |
|
_____________________________________________________________________________ |
|
|
|
File Association |
|
_____________________________________________________________________________ |
|
|
|
Based on code taken from http://nsis.sourceforge.net/File_Association |
|
|
|
Usage in script: |
|
1. !include "FileAssociation.nsh" |
|
2. [Section|Function] |
|
${FileAssociationFunction} "Param1" "Param2" "..." $var |
|
[SectionEnd|FunctionEnd] |
|
|
|
FileAssociationFunction=[RegisterExtension|UnRegisterExtension] |
|
|
|
_____________________________________________________________________________ |
|
|
|
${RegisterExtension} "[executable]" "[extension]" "[description]" |
|
|
|
"[executable]" ; executable which opens the file format |
|
; |
|
"[extension]" ; extension, which represents the file format to open |
|
; |
|
"[description]" ; description for the extension. This will be display in Windows Explorer. |
|
; |
|
|
|
|
|
${UnRegisterExtension} "[extension]" "[description]" |
|
|
|
"[extension]" ; extension, which represents the file format to open |
|
; |
|
"[description]" ; description for the extension. This will be display in Windows Explorer. |
|
; |
|
|
|
_____________________________________________________________________________ |
|
|
|
Macros |
|
_____________________________________________________________________________ |
|
|
|
Change log window verbosity (default: 3=no script) |
|
|
|
Example: |
|
!include "FileAssociation.nsh" |
|
!insertmacro RegisterExtension |
|
${FileAssociation_VERBOSE} 4 # all verbosity |
|
!insertmacro UnRegisterExtension |
|
${FileAssociation_VERBOSE} 3 # no script |
|
*/ |
|
|
|
|
|
!ifndef FileAssociation_INCLUDED |
|
!define FileAssociation_INCLUDED |
|
|
|
!include Util.nsh |
|
|
|
!verbose push |
|
!verbose 3 |
|
!ifndef _FileAssociation_VERBOSE |
|
!define _FileAssociation_VERBOSE 3 |
|
!endif |
|
!verbose ${_FileAssociation_VERBOSE} |
|
!define FileAssociation_VERBOSE `!insertmacro FileAssociation_VERBOSE` |
|
!verbose pop |
|
|
|
!macro FileAssociation_VERBOSE _VERBOSE |
|
!verbose push |
|
!verbose 3 |
|
!undef _FileAssociation_VERBOSE |
|
!define _FileAssociation_VERBOSE ${_VERBOSE} |
|
!verbose pop |
|
!macroend |
|
|
|
|
|
|
|
!macro RegisterExtensionCall _EXECUTABLE _EXTENSION _DESCRIPTION |
|
!verbose push |
|
!verbose ${_FileAssociation_VERBOSE} |
|
Push `${_DESCRIPTION}` |
|
Push `${_EXTENSION}` |
|
Push `${_EXECUTABLE}` |
|
${CallArtificialFunction} RegisterExtension_ |
|
!verbose pop |
|
!macroend |
|
|
|
!macro UnRegisterExtensionCall _EXTENSION _DESCRIPTION |
|
!verbose push |
|
!verbose ${_FileAssociation_VERBOSE} |
|
Push `${_EXTENSION}` |
|
Push `${_DESCRIPTION}` |
|
${CallArtificialFunction} UnRegisterExtension_ |
|
!verbose pop |
|
!macroend |
|
|
|
|
|
|
|
!define RegisterExtension `!insertmacro RegisterExtensionCall` |
|
!define un.RegisterExtension `!insertmacro RegisterExtensionCall` |
|
|
|
!macro RegisterExtension |
|
!macroend |
|
|
|
!macro un.RegisterExtension |
|
!macroend |
|
|
|
!macro RegisterExtension_ |
|
!verbose push |
|
!verbose ${_FileAssociation_VERBOSE} |
|
|
|
Exch $R2 ;exe |
|
Exch |
|
Exch $R1 ;ext |
|
Exch |
|
Exch 2 |
|
Exch $R0 ;desc |
|
Exch 2 |
|
Push $0 |
|
Push $1 |
|
|
|
ReadRegStr $1 HKCR $R1 "" ; read current file association |
|
StrCmp "$1" "" NoBackup ; is it empty |
|
StrCmp "$1" "$R0" NoBackup ; is it our own |
|
WriteRegStr HKCR $R1 "backup_val" "$1" ; backup current value |
|
NoBackup: |
|
WriteRegStr HKCR $R1 "" "$R0" ; set our file association |
|
|
|
ReadRegStr $0 HKCR $R0 "" |
|
StrCmp $0 "" 0 Skip |
|
WriteRegStr HKCR "$R0" "" "$R0" |
|
WriteRegStr HKCR "$R0\shell" "" "open" |
|
WriteRegStr HKCR "$R0\DefaultIcon" "" "$R2,0" |
|
Skip: |
|
WriteRegStr HKCR "$R0\shell\open\command" "" '"$R2" "%1"' |
|
WriteRegStr HKCR "$R0\shell\edit" "" "Edit $R0" |
|
WriteRegStr HKCR "$R0\shell\edit\command" "" '"$R2" "%1"' |
|
|
|
Pop $1 |
|
Pop $0 |
|
Pop $R2 |
|
Pop $R1 |
|
Pop $R0 |
|
|
|
!verbose pop |
|
!macroend |
|
|
|
|
|
|
|
!define UnRegisterExtension `!insertmacro UnRegisterExtensionCall` |
|
!define un.UnRegisterExtension `!insertmacro UnRegisterExtensionCall` |
|
|
|
!macro UnRegisterExtension |
|
!macroend |
|
|
|
!macro un.UnRegisterExtension |
|
!macroend |
|
|
|
!macro UnRegisterExtension_ |
|
!verbose push |
|
!verbose ${_FileAssociation_VERBOSE} |
|
|
|
Exch $R1 ;desc |
|
Exch |
|
Exch $R0 ;ext |
|
Exch |
|
Push $0 |
|
Push $1 |
|
|
|
ReadRegStr $1 HKCR $R0 "" |
|
StrCmp $1 $R1 0 NoOwn ; only do this if we own it |
|
ReadRegStr $1 HKCR $R0 "backup_val" |
|
StrCmp $1 "" 0 Restore ; if backup="" then delete the whole key |
|
DeleteRegKey HKCR $R0 |
|
Goto NoOwn |
|
|
|
Restore: |
|
WriteRegStr HKCR $R0 "" $1 |
|
DeleteRegValue HKCR $R0 "backup_val" |
|
DeleteRegKey HKCR $R1 ;Delete key with association name settings |
|
|
|
NoOwn: |
|
|
|
Pop $1 |
|
Pop $0 |
|
Pop $R1 |
|
Pop $R0 |
|
|
|
!verbose pop |
|
!macroend |
|
|
|
!endif # !FileAssociation_INCLUDED
|
|
|