【发布时间】:2016-05-21 12:16:44
【问题描述】:
我正在使用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获取不到图标,代码有什么问题?
【问题讨论】:
-
您是否尝试过将
uFlags参数与特定图标类型SHGFI_ICON | SHGFI_LARGEICON或SHGFI_ICON | SHGFI_SMALLICON结合使用?您还应该检查来自SHGetFileInfo()的返回值,以了解发生了什么。 -
使用这些参数和返回值更新原始帖子。
-
返回值是多少?
-
Windows 通常使用反斜杠作为路径分隔符,而不是正斜杠 - 我不确定
SHGetFileInfo函数是否接受这两者。SHGFI_LARGEICON|SHGFI_SMALLICON也有点矛盾。您一次只能获得一个。 -
在调用 SHGetFileInfo() 之前是否调用过 CoInitialize()?