commit
cb5663fc5b
2 changed files with 228 additions and 11 deletions
@ -0,0 +1,190 @@ |
||||
/* |
||||
_____________________________________________________________________________ |
||||
|
||||
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 |
||||
Loading…
Reference in new issue