【发布时间】:2010-12-08 15:01:46
【问题描述】:
我有以下代码适用于 Windows XP 和 Vista - 32 位和 64 位:
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;
}
常量定义如下:
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;
这在 Windows 7 中获取文件夹图标时会产生以下结果:
在 Vista 中 - 使用相同的方法会产生以下文件夹图标:
我还想要 Windows 7 的“正确”Windows 文件夹图标 - 而不是用于指示安装 Windows 的驱动器的图标。
我不知道 win32 API,而且我的非托管编程在 Windows 平台上几乎没有。
【问题讨论】:
-
请澄清您的问题。 “这会导致 Windows 7 出现以下图标”是什么意思?