Installing fonts: Difference between revisions
From NSIS Wiki
Jump to navigationJump to search
(Created page with "Basic font installation/uninstallation. === FontInstall.nsh === <highlight-nsis> !include LogicLib.nsh !include WinMessages.nsh !macro FontInstallHelper FontFileSrc FontFile...") |
m (Added category) |
||
Line 1: | Line 1: | ||
[[Category:System Related Functions]] | |||
{{PageAuthor|Anders}} | |||
Basic font installation/uninstallation. | Basic font installation/uninstallation. | ||
Revision as of 23:56, 16 October 2022
Author: Anders (talk, contrib) |
Basic font installation/uninstallation.
FontInstall.nsh
!include LogicLib.nsh !include WinMessages.nsh !macro FontInstallHelper FontFileSrc FontFileDst FontInternalName Resource RegSuffix RegRoot ClearErrors ${IfNot} ${FileExists} "${FontFileDst}" File "/oname=${FontFileDst}" "${FontFileSrc}" ${EndIf} ${IfNot} ${Errors} Push $0 Push "${Resource}" Exch $1 Push "${FontInternalName}${RegSuffix}" Exch $2 Push $9 StrCpy $9 "Software\Microsoft\Windows NT\CurrentVersion\Fonts" !if "${NSIS_CHAR_SIZE}" < 2 ReadRegStr $0 ${RegRoot} "SOFTWARE\Microsoft\Windows NT\CurrentVersion" "CurrentVersion" ${IfThen} $0 == "" ${|} StrCpy $9 "Software\Microsoft\Windows\CurrentVersion\Fonts" ${|} !endif System::Call 'GDI32::AddFontResource(tr1)i.r0' ${If} $0 <> 0 WriteRegStr ${RegRoot} "$9" "$2" "$1" ${Else} SetErrors ${EndIf} Pop $9 Pop $2 Pop $1 Pop $0 ${Else} SetErrors ${EndIf} !macroend !macro FontInstallTTF FontFileSrc FontFileName FontInternalName !insertmacro FontInstallHelper "${FontFileSrc}" "$Fonts\${FontFileName}" "${FontInternalName}" "${FontFileName}" " (TrueType)" HKLM !macroend !macro FontUninstallHelper FontFileDst FontInternalName Resource RegSuffix RegRoot System::Call 'GDI32::RemoveFontResource(t"${Resource}")' DeleteRegValue ${RegRoot} "Software\Microsoft\Windows NT\CurrentVersion\Fonts" "${FontInternalName}${RegSuffix}" !if "${NSIS_CHAR_SIZE}" < 2 DeleteRegValue ${RegRoot} "Software\Microsoft\Windows\CurrentVersion\Fonts" "${FontInternalName}${RegSuffix}" !endif ClearErrors Delete "${FontFileDst}" !macroend !macro FontUninstallTTF FontFileName FontInternalName !insertmacro FontUninstallHelper "$Fonts\${FontFileName}" "${FontInternalName}" "${FontFileName}" " (TrueType)" HKLM !macroend
Example
RequestExecutionLevel Admin !include "FontInstall.nsh" Section StrCpy $1 0 ; Hardcoded name !insertmacro FontInstallTTF "C:\myfiles\msgithub\CascadiaCodePL.ttf" "CascadiaCodePL.ttf" "Cascadia Code PL Regular" ${IfNotThen} ${Errors} ${|} IntOp $1 $1 + 1 ${|} ; Gettting the name dynamically using a plug-in InitPluginsDir File "/oname=$PluginsDir\AnotherFont.ttf" "C:\myfiles\AnotherFont.ttf" FontInfo::GetFontName "$PluginsDir\AnotherFont.ttf" ${If} $0 != "" !insertmacro FontInstallTTF "C:\myfiles\AnotherFont.ttf" "AnotherFont.ttf" $0 ${IfNotThen} ${Errors} ${|} IntOp $1 $1 + 1 ${|} ${EndIf} ${If} $1 <> 0 DetailPrint "Successfully installed $1 font(s)..." SendMessage ${HWND_BROADCAST} ${WM_FONTCHANGE} 0 0 /TIMEOUT=5000 ${EndIf} SectionEnd Section Uninstall StrCpy $1 0 !insertmacro FontUninstallTTF "CascadiaCodePL.ttf" "Cascadia Code PL Regular" ${IfNotThen} ${Errors} ${|} IntOp $1 $1 + 1 ${|} FontInfo::GetFontName "$Fonts\AnotherFont.ttf" ${If} $0 != "" !insertmacro FontUninstallTTF "AnotherFont.ttf" $0 ${IfNotThen} ${Errors} ${|} IntOp $1 $1 + 1 ${|} ${EndIf} ${If} $1 <> 0 DetailPrint "Successfully uninstalled $1 font(s)..." SendMessage ${HWND_BROADCAST} ${WM_FONTCHANGE} 0 0 /TIMEOUT=5000 ${EndIf} SectionEnd