我刚刚在Windows上创建了我的第一个应用程序。
如何给它一个图标?
似乎没有任何构建标志可以做到这一点,我知道golang不支持资源。
答案 0 :(得分:28)
您可以使用akavel/rsrc之类的工具来生成包含在.rsrc
部分中的指定资源的.syso文件,目的是在构建Win32 excecutables时由Go链接器使用。
以lxn/walk应用程序为例,它将其他元数据嵌入其可执行文件中。
rsrc [-manifest FILE.exe.manifest] [-ico FILE.ico[,FILE2.ico...]] -o FILE.syso
-ico=""
:以逗号分隔的.ico文件嵌入路径列表
这不同于将二进制数据嵌入到go程序中 为此,请使用jteeuwen/go-bindata。
要访问资产数据,我们使用生成的输出中包含的
Asset(string) []byte
函数。
data := Asset("pub/style/foo.css")
if len(data) == 0 {
// Asset was not found.
}
// use asset data
答案 1 :(得分:3)
主题很长,实际上mingw
只是要求,我们不需要第三方依赖。此外,资源文件*.rc
对于win32可执行应用程序是必需的。最后,您可以在rc-demo
1)使用Chocolatey安装mingw:choco install mingw
2)创建main.exe.manifest
文件
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="x86"
name="controls"
type="win32"
/>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>
3)创建main.rc
文件
100 ICON "main.ico"
100 24 "main.exe.manifest"
101 RCDATA "content.zip"
4)构建
在git-bash窗口中执行以下命令:
windres -o main-res.syso main.rc && go build -i
答案 2 :(得分:2)
Joseph Spurrier有一个github包GoVersionInfo:
用于Go语言的Microsoft Windows文件属性/版本信息和图标资源生成器
包创建一个syso文件,其中包含Microsoft Windows版本信息和可选图标。当您运行&#34; go build&#34;时,Go将在可执行文件中嵌入版本信息和可选图标以及可选清单。如果它与main()函数在同一目录中,Go将自动使用syso文件。
答案 3 :(得分:1)
以上所有答案均不适用于我。我可以将ico嵌入到GO exe中的唯一方法是使用Resource Hacker。
http://www.angusj.com/resourcehacker/
如果需要将其添加到构建脚本中,也可以直接从命令行运行它。
ResourceHacker -open main.exe -save output.exe -action addskip -res main.ico -mask ICONGROUP,MAIN,
答案 4 :(得分:0)
这对我有用
go get github.com/akavel/rsrc
rsrc -ico YOUR_ICON_FILE_NAME.ico
go build
答案 5 :(得分:0)
效果很好:
go install github.com/tc-hib/go-winres@latest
go-winres simply --icon youricon.png
go build
如果您的应用具有 GUI:
go-winres simply --icon icon.png --manifest gui
答案 6 :(得分:0)
你改变一个图标首先认为你知道setIcon() method
它只支持byte[]
格式,所以你首先创建图像并转换成字节[]。请执行以下程序。
// define icon path using os.Open()
iconFile, err := os.Open("/home/user/image/icon.png")
if err != nil {
log.Fatal(err)
}
defer iconFile.Close()
// png.Decode() to convert image path to image
img, err := png.Decode(iconFile)
if err != nil {
log.Fatal(err)
}
// Then convert the image to byte[] format using bytes.Buffer
buf := new(bytes.Buffer)
err1 := jpeg.Encode(buf, img, nil)
_ = err1
// save the converted byte[] to variable
img_buf := buf.Bytes()
// set the coverted byte[] icon using systray.SetTemplateIcon() method
systray.SetTemplateIcon(img_buf, img_buf)
谢谢!!!