vc下如何设置pe文件图标为系统文件夹图标?不是设置,是不带ico的,直接获取的.

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vc下如何设置pe文件图标为系统文件夹图标?不是设置,是不带ico的,直接获取的.相关的知识,希望对你有一定的参考价值。

参考技术A %SystemRoot%\System32\shell32.dll,3

上面就是文件夹图标的使用地址。你可以直接程序编辑注册表设置PE文件的default icon,也可以使用shell注册icon。追问

大哥,能详细点么,我实在是不懂。。。给段代码谢谢啦。

追答

你描述实在太简单了,这样没法给你代码,不同代码适用不同的工程模式,我怎么知道你适合使用哪种代码呢。。。
注册表模式代码示例:
if( ERROR_SUCCESS == ::RegCreateKeyEx(hOpenKey, szKey, dwReserved,
(LPTSTR)0, REG_OPTION_NON_VOLATILE, KEY_SET_VALUE, 0,
&hTempKey, &dwDisposition) )

// dwBufferLength must include size of terminating nul
// character when using REG_SZ with RegSetValueEx function
dwBufferLength += sizeof(TCHAR);

if( ERROR_SUCCESS == ::RegSetValueEx(hTempKey, (LPTSTR)szValue,
dwReserved, REG_SZ, (LPBYTE)szData, dwBufferLength) )
bRetVal = TRUE;


// close opened key
if( hTempKey )
::RegCloseKey(hTempKey);

MFC下不需要直接操作注册表,只需要EnableShellOpen和RegisterShellFileTypes即可

如何在 linux 系统的可执行文件上设置图标(或 .ico 文件)?

【中文标题】如何在 linux 系统的可执行文件上设置图标(或 .ico 文件)?【英文标题】:How to set icon(or .ico file) on executable file in linux system? 【发布时间】:2021-02-08 10:09:24 【问题描述】:

我一直在尝试在 linuxma​​cOS 中的 executable file(.exe) 上设置图标。

我了解到有 3 个位置图标集:任务栏、窗口栏和可执行文件缩略图。 我已经在任务栏和窗口栏上设置了,但不在 exe 文件上。 (顺便说一句,我已经使用 Visual Studio 在 Windows 中完成了其中的 3 个。)

我可能不知道它的确切术语,所以我将展示下面的示例: enter image description here

我猜.rc 文件应该在makefile 中。 如果是这样,我也可以在 macOS 中解决它。 如果没有,我也想知道如何在 linux 和 macOS 中进行设置。 请让我知道如何使用它并设置它。提前致谢。

附言我使用 GLFWimage 在窗口栏和任务栏上设置图标并使用 openGL3 和 c++。

glfwSetWindowIcon(window, 1, &icon);

【问题讨论】:

【参考方案1】:

我猜 .rc 文件应该在 makefile 中。

虽然在 Windows .exe 文件中存储图标有一种“标准化”方式,但对于“ELF”文件(Linux 下最常见的可执行文件格式)则没有这种方式。

在任务栏和窗口栏上

窗口管理器使用的图标(例如用于任务栏)通常存储为“X11 窗口属性”。 “X11 窗口属性”是程序分配给窗口的一些数据。

程序必须将图标图像作为数组提供并调用函数XChangeProperty()(这是函数glfwSetWindowIcon()间接执行的操作)。

图标没有必要以特殊方式存储(类似于Windows中的.rc文件);程序可以简单地将图标存储在一些const数组中,甚至可以在调用XChangeProperty()之前计算图标图像数据。

...但不在 exe 文件上。

正如我已经写过的,没有“标准化”的方式将图标存储在 Linux 的可执行文件中。

一些文件管理器“知道”某些程序并显示相应的图标:他们知道“xterm”是一个终端程序,所以他们显示终端图标。但是,这个图标并不存储在可执行文件中,而是存储在文件管理器中:如果您将任何可执行文件重命名为“xterm”,则会显示终端图标。

有一个名为“elfres”的扩展(它在几年前被命名为“elficon”)允许将图标添加到 ELF 可执行文件。 The web site of that extension is found here. 在链接的网站上,您还可以找到 a screen shot with an example - 这样您就可以检查我是否理解正确,这就是您所说的。

很遗憾,这是一个非标准扩展。因此,“标准”Linux 安装不会检查可执行文件是否包含图标,因此不会显示图标。

如果使用“elfres”方式,必须安装专门的插件;否则不显示可执行文件的图标。

【讨论】:

以上是关于vc下如何设置pe文件图标为系统文件夹图标?不是设置,是不带ico的,直接获取的.的主要内容,如果未能解决你的问题,请参考以下文章

设置图标病毒问题后

VC6.0程序编译后如何为程序添加图标

windows图标变空白解决方案

windows下如何设置Qt程序的图标?

win7系统的IE图标ICO原文件放在哪里?

VC6.0中的Tree Control控件,如何给有的节点设checkbox,而有的节点不设?具体代码如何实现?