我正在使用cmake + nmake构建exe,我想从可执行文件本身获取图标句柄。

CMakeLists.txt:

add_executable(test test.cpp test.rc)


test.rc:

IDI_ICON   ICON  DISCARDABLE  "test.ico"
IDI_ICON0   ICON  DISCARDABLE  "test.ico"
IDI_ICON1   ICON  DISCARDABLE  "test.ico"
IDI_ICON2   ICON  DISCARDABLE  "test.ico"


test.cpp:

#include <windows.h>
#include <iostream>
using namespace std;

int main() {
    SHFILEINFO  sfi;
    memset(&sfi, 0, sizeof(sfi));
    DWORD_PTR ret = ::SHGetFileInfo("g:/workspace/test2/debug/test.exe",
                    0, &sfi, sizeof(sfi), SHGFI_LARGEICON|SHGFI_SMALLICON|SHGFI_ICON);
    cout << hex;
    cout << ret << endl; // prints 0
    cout << sfi.hIcon << endl; // prints 0
}


可执行文件g:/workspace/test2/debug/test.exe确实具有图标,但是SHGetFileInfo无法获取图标,代码有什么问题?

最佳答案

正如乔纳森·波特(Jonathan Potter)的评论文章所说,这是由反斜杠引起的。在文件路径中将“ /”更改为“ \”后,代码才能工作。

关于c++ - 无法通过SHGetFileInfo获取exe图标,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37362795/

10-12 00:02
查看更多