MyException - 我的异常网
当前位置:我的异常网» VC/MFC » SHGetFileInfo()获取ICON调用失败,该如何解决

SHGetFileInfo()获取ICON调用失败,该如何解决

www.myexceptions.net  网友分享于:2013-04-10  浏览:49次
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);
引用
Return Value

Returns a value whose meaning depends on the uFlags parameter. 
If uFlags does not contain SHGFI_EXETYPE or SHGFI_SYSICONINDEX, the return value is nonzero if successful, or zero otherwise.
If uFlags contains the SHGFI_EXETYPE flag, the return value specifies the type of the executable file.

首先,SHGetFileInfo 返回的不是 HRESULT,其次就算是,其失败了返回 0,你却要判断其是否等于 S_OK((HRESULT)0x00000000L),能通过才怪了。

文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有