簡體   English   中英

我無法獲取SHGetFileInfo返回圖標位置

[英]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表示成功。 fiiIcon成員設置為一個數字,但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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM