gpt4 book ai didi

qt - 在 Qt 应用程序中使用 WinAPI 提取图标

转载 作者:行者123 更新时间:2023-12-02 22:29:55 24 4
gpt4 key购买 nike

我正在尝试使用 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()

(ExtractIcon function on MSDN)。

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

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

更新:是的,有更好的方法。您可以使用 QFileIconProvider类做这样的事情。

最佳答案

对我有用,即使是 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
}

enter image description here

关于qt - 在 Qt 应用程序中使用 WinAPI 提取图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12459145/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com