SHGetFileInfo()获取ICON调用失败
本帖最后由 LH806732 于 2012-11-08 20:26:40 编辑
使用SHGetFileInfo()来获取电脑上其他软件的图标(包括大/小图标)。但调用此函数每次都返回S_FALSE。
如下获取
比较工具exe的图标:
HRESULT hr=NULL;
SHFILEINFO shInfo={0};
CString strpath = L"D:\\Program Files\\Beyond Compare 2\\BC2.exe";
hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);//根据帮助需要初始化COM
if (S_OK == hr)
{
hr = SHGetFileInfo(strpath,
FILE_ATTRIBUTE_NORMAL,
&shInfo,
sizeof(shInfo),
SHGFI_USEFILEATTRIBUTES |//Attr
SHGFI_DISPLAYNAME |//Display name
SHGFI_TYPENAME |//Attr
SHGFI_ICON |
SHGFI_SMALLICON//Small ICON
);//每次执行失败,但是shInfo.szDisplayName和shInfo.szTypeName是正确的
if (S_OK == hr)//hr每次都返回S_FALSE。并且shInfo.hicon要么为unused(有值),要么为0或者错误指针
{
...
}
}
大家都指点指点。
------解决方案--------------------mark
好东西关注~
------解决方案--------------------学习下,觉得挺好玩,虽然没搞过
------解决方案--------------------DWORD_PTR SHGetFileInfo(LPCTSTR pszPath, DWORD dwFileAttributes, SHFILEINFO *psfi, UINT cbFileInfo, UINT uFlags);
首先,SHGetFileInfo 返回的不是 HRESULT,其次就算是,其失败了返回 0,你却要判断其是否等于 S_OK((HRESULT)0x00000000L),能通过才怪了。