| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 | /*_____________________________________________________________________________                       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 valueNoBackup:  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 NoOwnRestore:  WriteRegStr HKCR $R0 "" $1  DeleteRegValue HKCR $R0 "backup_val"  DeleteRegKey HKCR $R1 ;Delete key with association name settingsNoOwn:  Pop $1  Pop $0  Pop $R1  Pop $R0  !verbose pop!macroend!endif # !FileAssociation_INCLUDED
 |