我在Windows 10專業版和Visual Studio 2013,和我使用SHGetFileInfoW
以獲取文件類型的圖標位置(路徑+指數):我不能得到的SHGetFileInfo返回的圖標位置
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
是指現有文件還是隻是任何文件名,呼叫都會返回表示成功。 fi
的iIcon
成員被設置爲一個數字,但szDisplayString
爲空。不只是驅動器號被\0
覆蓋(好像發生在here),但它完全充滿了\0
。
微軟建議使用IExtractIcon
::
GetIconLocation
作爲替代,但我需要獲得哪些不是在本地文件系統中的文件的圖標,所以我不能讓一個IShellInfo
對象,它會得到我這個接口指針。
另一方面,獲取圖標手柄起作用。這個功能只是越野車,或者我做錯了什麼?有沒有解決方法?
將''a.bas''改成''bas''(或''.bas''')。 [SHGetFileInfo函數](https://msdn.microsoft.com/en-us/library/windows/desktop/bb762179(v = vs.85).aspx)「...只是擴展...」。還要注意圖標不一定有位置(路徑),所以我不確定你可以使用'SHGFI_ICONLOCATION'。 –
@¡''bas'甚至不會返回索引,'.bas'就像'a.bas'一樣工作並返回索引,但不返回路徑。這裏的文檔似乎很sl。。 –
我現在沒有時間來嘗試這個了,但考慮到您的意見,「獲取圖標手柄的作品」我認爲問題是,圖標不必是固定的路徑,因爲它們可以動態生成圖標處理器。 –