diff options
Diffstat (limited to 'scripts')
| -rw-r--r-- | scripts/FileAssociation.nsh | 191 | 
1 files changed, 191 insertions, 0 deletions
| diff --git a/scripts/FileAssociation.nsh b/scripts/FileAssociation.nsh new file mode 100644 index 0000000..d564d18 --- /dev/null +++ b/scripts/FileAssociation.nsh @@ -0,0 +1,191 @@ +/* +_____________________________________________________________________________ +  +                       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 + | 
