Tôi có đoạn mã sau đó hoạt động trên Windows XP và Vista - cả 32 và 64 bit:Làm thế nào để lấy biểu tượng thư mục trên Windows 7 sử dụng Shell32.SHGetFileInfo
public static Icon GetFolderIcon(IconSize size, FolderType folderType)
{
// Need to add size check, although errors generated at present!
uint flags = Shell32.SHGFI_ICON | Shell32.SHGFI_USEFILEATTRIBUTES;
if (FolderType.Open == folderType)
{
flags += Shell32.SHGFI_OPENICON;
}
if (IconSize.Small == size)
{
flags += Shell32.SHGFI_SMALLICON;
}
else
{
flags += Shell32.SHGFI_LARGEICON;
}
// Get the folder icon
var shfi = new Shell32.SHFILEINFO();
Shell32.SHGetFileInfo( null,
Shell32.FILE_ATTRIBUTE_DIRECTORY,
ref shfi,
(uint) Marshal.SizeOf(shfi),
flags);
Icon.FromHandle(shfi.hIcon); // Load the icon from an HICON handle
// Now clone the icon, so that it can be successfully stored in an ImageList
var icon = (Icon)Icon.FromHandle(shfi.hIcon).Clone();
User32Dll.DestroyIcon(shfi.hIcon); // Cleanup
return icon;
}
Các hằng số được định nghĩa theo cách sau :
public const uint SHGFI_ICON = 0x000000100;
public const uint SHGFI_USEFILEATTRIBUTES = 0x000000010;
public const uint SHGFI_OPENICON = 0x000000002;
public const uint SHGFI_SMALLICON = 0x000000001;
public const uint SHGFI_LARGEICON = 0x000000000;
public const uint FILE_ATTRIBUTE_DIRECTORY = 0x00000010;
này cho kết quả như sau trong cửa sổ 7 khi lấy biểu tượng thư mục:
.210Trong khi tại Vista - sử dụng kết quả phương pháp tương tự trong biểu tượng thư mục sau:
Tôi muốn vào biểu tượng thư mục Windows "đúng" cho Windows 7 cũng - không phải là biểu tượng dùng để biểu thị các ổ đĩa nơi Windows được cài đặt.
Tôi không biết API win32 và chương trình không được quản lý của tôi không nằm cạnh nền tảng Windows.
Hãy làm rõ câu hỏi của bạn."Điều này dẫn đến các cửa sổ 7 với các biểu tượng sau" nghĩa là gì? –