| ; | |
| ; Copyright (c) 2011 The WebM project authors. All Rights Reserved. | |
| ; | |
| ; Use of this source code is governed by a BSD-style license and patent | |
| ; grant that can be found in the LICENSE file in the root of the source | |
| ; tree. All contributing project authors may be found in the AUTHORS | |
| ; file in the root of the source tree. | |
| ; | |
| ;_____________________________________________________________________________ | |
| ; 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 displayed | |
| ; ; in Windows Explorer. | |
| ; | |
| ; ${UnRegisterExtension} "[extension]" "[description]" | |
| ; | |
| ; "[extension]" ; extension, which represents the file format to open | |
| ; ; | |
| ; "[description]" ; description for the extension. This will be displayed | |
| ; ; 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"' | |
| 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 | |