如何为exe文件指定与使用NSIS创建安装程序时标题栏图标不同的图标?

问题描述 投票:0回答:1

我正在使用NSIS创建自己的安装程序,我知道我们可以使用以下说明:!define MUI_ICON path_to_icon_file.ico设置安装程序的图标。但是它同时设置了标题栏图标和exe文件图标。如何使用不同的图标分别设置它们?

nsis
1个回答
0
投票

您通常使用相同的图标,但如果需要,可以强制使用其他图标:

!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico" ; Exe icon
!define CUSTOMWINDOWICON "${NSISDIR}\Contrib\Graphics\Icons\win-install.ico"
!define MUI_CUSTOMFUNCTION_GUIINIT SetMyCustomIcon
!include "MUI2.nsh"
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "English"

Function SetMyCustomIcon
InitPluginsDir
File "/oname=$PluginsDir\cust.ico" "${CUSTOMWINDOWICON}"
!define /IfNDef LR_LOADFROMFILE 0x10
!define /IfNDef LR_DEFAULTSIZE 0x40
!define /IfNDef WM_SETICON 0x80
System::Call 'USER32::LoadImage(p 0,t "$PluginsDir\cust.ico", i 1, i 16, i 16, i ${LR_LOADFROMFILE})p.r0'
SendMessage $hWndParent ${WM_SETICON} 0 $0
System::Call 'USER32::LoadImage(p 0,t "$PluginsDir\cust.ico", i 1, i 0, i 0, i ${LR_LOADFROMFILE}|${LR_DEFAULTSIZE})p.r0'
SendMessage $hWndParent ${WM_SETICON} 1 $0
FunctionEnd

当NSIS 3.05出现时,您可以将图标嵌入为资源:

!define CUSTOMWINDOWICON "${NSISDIR}\Contrib\Graphics\Icons\win-install.ico"
!define MUI_CUSTOMFUNCTION_GUIINIT SetMyCustomIcon

...

PEAddResource "${CUSTOMWINDOWICON}" "#Icon" "#1337"
Function SetMyCustomIcon
!define /IfNDef WM_SETICON 0x80
System::Call 'KERNEL32::GetModuleHandle(p0)p.s'
System::Call 'USER32::LoadImage(p s, i 1337, i 1, i 0, i 0, i 0x8040)p.r0'
SendMessage $hWndParent ${WM_SETICON} 1 $0
FunctionEnd
© www.soinside.com 2019 - 2024. All rights reserved.