我正在尝试使用WinAPI从exe文件中提取图标,但它不起作用。

这是代码:

QIcon OSTools::AppsInterface::extractAppIcon(const QString &fileName) const {
    wchar_t *convertedName = new wchar_t[fileName.length() + 1];
    fileName.toWCharArray(convertedName);
    convertedName[fileName.length()] = '\0';
    HICON Icon = ExtractIcon(NULL, convertedName, 0);

    QPixmap pixmap = QPixmap::fromWinHICON(Icon);
    return QIcon(pixmap);
}

代码输出:

QPixmap::fromWinHICON(), failed to GetIconInfo()

MSDN上的ExtractIcon函数 )。

我认为问题是我发送NULL而不是“ 调用函数的应用程序实例的句柄 ”。 但是,一般来说,我使用Qt,它只是我的应用程序中的一个WinAPI函数。

怎么了? 使用WinAPI提取图标的正确方法是什么? 如果您有其他功能提案,请举个例子。 这是我第一次使用WinAPI。

更新:是的,还有更好的方法。 您可以使用QFileIconProvider类来执行此类操作。

#1楼 票数:2

适合我,即使是NULL。 但获得HINSTANCE实际上非常简单。 你猜其他地方有问题。 你的目标exe是否真的有嵌入式图标?

#ifdef Q_WS_WIN
#include <qt_windows.h>
#endif

MainWindow::MainWindow(QWidget *parent) :
  QMainWindow(parent),
  ui(new Ui::MainWindow)
{
  ui->setupUi(this);
#ifdef Q_WS_WIN
  QString fileName("D:\\_dev\\eclipse\\eclipse.exe");
  wchar_t *convertedName = new wchar_t[fileName.length() + 1];
  fileName.toWCharArray(convertedName);
  convertedName[fileName.length()] = '\0';
  HINSTANCE hInstance = ::GetModuleHandle(NULL);
  HICON Icon = ::ExtractIcon(hInstance, convertedName, 0);
  ui->label->setPixmap(QPixmap::fromWinHICON(Icon));
#endif
}

在此输入图像描述

#2楼 票数:1

我使用了QFileIconProvider ,它运行得很好。 尝试这个 :

QPushButton b;
b.show();

QIcon icon;
QFileIconProvider fileiconpr;
icon = fileIconProvider.icon(QFileInfo("/*file name*/"));

b.setIcon(icon);

// And you can also save it where you want : 
QPixmap pixmap = icon.pixmap( QSize(/*desired size*/)  );
pixmap.save("/Desktop/notepad-icon.png");

来源 祝你今天愉快。

#3楼 票数:0 已采纳

解决方案非常简单。 我只是将路径发送到'.lnk'文件而不是路径到文件。 那是我的疏忽。

  ask by Ivan Akulov translate from so

未解决问题?本站智能推荐:

2回复

如何在Qt中的.exe文件中显示图标

我正在开发一个Qt应用程序,需要显示一些UI并对其执行操作。 当我运行该应用程序时,它将在我的debug / release文件夹中创建一个.exe 。 我想将图标放在.exe文件中,而不是默认显示的空白图标。 是他们可以在.ui文件中做到这一点的一种方式,还是我们需要以编程方式来做到这
1回复

在UbuntuLinux中提取EXE图标[关闭]

我正在寻找一种从Linux上的EXE文件中提取图标的方法。 如何在Linux Ubuntu上完成此操作?
1回复

在Qt中使用winAPI函数(wininet)

我正在尝试使用一些Windows库来实现一些ftp样式上传功能,但是在编译时遇到了一些麻烦。 uploadfile.h uploadfile.cpp 当我尝试编译它时,出现一些未解决的外部符号错误 我是否需要在配置文件中添加一些指令才能工作? 还是我想念其他东西? 注意:我
4回复

如何使用PyWin32从exe文件加载嵌入图标?

我有一个用py2exe生成的exe文件。 在setup.py中,我指定了一个嵌入在exe中的图标: 我尝试使用以下方式加载图标: 但这会产生(非常不明确的)错误: pywintypes.error:(0,'LoadImage','没有错误消息可用') 如果我尝试将0指定为字符串
2回复

如何设置程序的图标?

如何使用某种隐藏(设置)文件为我现有的program.exe和icon.ico(在同一文件夹中)设置图标? 编辑:我知道py2exe CustomIcon选项,也关于WinRar Sfx ... 问题是:有可能以我描述的这种特定方式吗?
3回复

如何更改JavaFx本机Bundleexe图标

我试图将exe文件的图标创建为javafx打包的本机捆绑,但它仍然包含默认图标。 请建议 没有帮助,它只更改标题栏和任务栏图标。 ico文件仍然生成,exe文件的图标仍然是默认文件 我还试图在项目属性 - >部署 - >图标中分配一个图标,但没有帮助
3回复

如何在.jar文件上获取图标?

我已经用Java编写了程序,并且能够将其作为jar文件执行。 我想知道两件事。 一,如何使.jar文件具有除标准Java图标以外的桌面图标。 第二,我使用的是netbeans,如何创建.exe文件而不是.jar文件?
2回复

设置.exe文件的图标

我已经制作了一个用Python制作的游戏的.exe文件,但是我不知道如何让这个exe文件有一个图标,因为它看起来很枯燥乏味。 我想以某种方式让图标成为小行星的照片,因为我制作了游戏中的小行星。 我使用cx_freeze来编译它。