[英]I can't get SHGetFileInfo to return an icon location
我在Windows 10 Pro和Visual Studio 2013上,並且使用SHGetFileInfoW
獲取文件類型的圖標位置(路徑+索引):
std::wstring wFile { L"a.bas" };
SHFILEINFOW fi {};
DWORD success = ::SHGetFileInfoW(wFile.c_str(),
FILE_ATTRIBUTE_NORMAL,
&fi,
sizeof(fi),
SHGFI_USEFILEATTRIBUTES | SHGFI_ICONLOCATION);
無論wFile
引用現有文件還是僅僅是任何文件名,該調用都將返回1表示成功。 fi
的iIcon
成員設置為一個數字,但szDisplayString
為空。 不僅驅動器號被\\0
覆蓋(似乎在這里發生),而且還完全被\\0
填充。
Microsoft建議使用IExtractIcon
::
GetIconLocation
作為替代方案,但是我需要獲取不在本地文件系統上的文件的圖標,因此我無法獲取將使我獲得此接口指針的IShellInfo
對象。
另一方面,獲取圖標句柄是可行的。 該功能只是越野車還是我做錯了什么? 有解決方法嗎?
圖標可以動態生成,並且可能不會暴露其圖像的路徑。 圖標處理程序通過在其IExtractIcon::GetIconLocation
實現中設置GIL_NOTFILENAME
標志將其IExtractIcon::GetIconLocation
。 如果設置了GIL_SIMULATEDOC
則外殼程序通常還必須動態生成圖標。
如果您使用設置了SHGFI_SELECTED
標志的方式調用SHGetFileInfo
,則無論您要哪種文件類型,函數都可能必須生成一個新圖標。
如果要在ListView / TreeView中顯示文件列表,則通常使用SHGFI_SYSICONINDEX|SHGFI_SHELLICONSIZE|SHGFI_SMALLICON
並使用系統映像列表。
如果需要HICON,請使用SHGFI_ICON
。
如果指定了SHGFI_ICONLOCATION
,則SHGetFileInfo
使用IExtractIcon:
檢索包含圖標的文件名,該圖標代表pszPath指定的文件,由文件圖標處理程序的IExtractIcon :: GetIconLocation方法返回。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.