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.
85 lines
3.3 KiB
85 lines
3.3 KiB
!ifndef _FILEASSOC_NSH_ |
|
!define _FILEASSOC_NSH_ |
|
|
|
|
|
!ifdef HAVE_SYSTEM_PLUGIN |
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
|
;; RefreshShellIcons based on |
|
;; http://nsis.sourceforge.net/archive/nsisweb.php?page=236&instances=0 |
|
;; by jerome tremblay - april 2003 |
|
|
|
!define SHCNE_ASSOCCHANGED 0x08000000 |
|
!define SHCNF_IDLIST 0 |
|
|
|
Function RefreshShellIcons |
|
System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v \ |
|
(${SHCNE_ASSOCCHANGED}, ${SHCNF_IDLIST}, 0, 0)' |
|
FunctionEnd |
|
|
|
!define RefreshShellIcons "call RefreshShellIcons" |
|
!else |
|
!define RefreshShellIcons |
|
!endif ; HAVE_SYSTEM_PLUGIN |
|
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
|
;; parts from http://nsis.sourceforge.net/archive/viewpage.php?pageid=282 by Vytautas |
|
;; Will add the registry entries to associate the given file extension with the |
|
;; previously set (see CreateApplicationAssociation) appType. I.e. indicate to |
|
;; open documents with this extension using the application specified by appType |
|
;; registry entry. If the extension is currently associated with a different |
|
;; appType, it will store the current association in the "prior_appType" key. |
|
|
|
!macro CreateFileAssociation extension extType extDef exeCmd defIcon |
|
!define skipBackupLbl "skipBackup_${__LINE__}" |
|
push $0 |
|
|
|
; back up old value of extension (.ext) if it exists |
|
ReadRegStr $0 HKCR "${extension}" "" ; read current value |
|
StrCmp $0 "" "${skipBackupLbl}" ; nothing, then skip storing old value |
|
StrCmp $0 "${extType}" "${skipBackupLbl}" ; only store if old is different than current |
|
WriteRegStr HKCR "${extension}" "PreSD" "$0" ; actually store the old association |
|
|
|
"${skipBackupLbl}:" |
|
; Write File Associations |
|
WriteRegStr HKCR "${extension}" "" "${extType}" |
|
WriteRegStr HKCR "${extType}" "" "${extDef}" |
|
WriteRegStr HKCR "${extType}\DefaultIcon" "" "${defIcon}" |
|
WriteRegStr HKCR "${extType}\shell" "" "open" |
|
WriteRegStr HKCR "${extType}\shell\open\command" "" '"${exeCmd}" "%1"' |
|
|
|
; Force shell refresh (so icons updated as needed) |
|
${RefreshShellIcons} |
|
|
|
pop $0 |
|
!undef skipBackupLbl |
|
!macroend |
|
!define CreateFileAssociation "!insertmacro CreateFileAssociation" |
|
|
|
|
|
; check if a file extension is associated with us and if so delete it |
|
!macro RemoveFileAssociation extension extType |
|
push $0 |
|
push $1 |
|
|
|
ReadRegStr $0 HKCR "${extension}" "" |
|
StrCmp "$0" "${extType}" 0 Skip_Del_File_Assoc.${extension} |
|
ReadRegStr $0 HKCR "${extension}" "PreSD" |
|
StrCmp "$0" "" "DeleteFA.${extension}" 0 ; if "prior_value" is not empty |
|
ReadRegStr $1 HKCR "$0" "" ; restore previous association |
|
StrCmp "$1" "" DeleteFA.${extension} ; only if it is still valid (has something defined) |
|
WriteRegStr HKCR "${extension}" "" $0 ; actually restore prior association |
|
DeleteRegValue HKCR "${extension}" "PreSD" ; and remove stored value |
|
DeleteRegKey HKCR "${extType}" ; remove the extension type we added |
|
Goto Skip_Del_File_Assoc.${extension} |
|
DeleteFA.${extension}: ; else delete file association key |
|
DeleteRegKey HKCR "${extension}" ; actually remove file assoications |
|
|
|
Skip_Del_File_Assoc.${extension}: |
|
pop $1 |
|
pop $0 |
|
!macroend |
|
!define RemoveFileAssociation "!insertmacro RemoveFileAssociation" |
|
|
|
|
|
!endif ; _FILEASSOC_NSH_
|
|
|