【问题标题】:Get large icon from file extension从文件扩展名中获取大图标
【发布时间】:2016-09-29 17:16:01
【问题描述】:

有几个地方讨论了如何从文件扩展名中获取图标,例如this 一个和this other 一个。在玩了几个小时这类项目后,我设法构建了类似的东西:

private void addButton_Click(object sender, System.EventArgs e)
    {           
        System.Drawing.Icon temp = IconReader.GetFileIcon(".cs", IconReader.IconSize.Large, false);
        pictureBox1.Image = temp.ToBitmap();
    }

那个按钮的执行让我着迷:

但我正在尝试实际获取大图标。请注意窗口上的图标要大得多:

我怎样才能得到那个图标而不是较小的那个。我花了很多时间来更改其他程序。此外,我想让它与 wpf 一起使用,并且大多数示例都与 windows 窗体一起使用。如果我能获得一个如何提取文件图标而不是修改整个项目的示例,我将不胜感激。如果那是不可能的,那仍然会非常有帮助,我将不胜感激。只是我不是一个程序员那么好,我花了很多时间来修改其他示例。

【问题讨论】:

  • 尝试显示您的应用程序以使用通用控件版本 6(“xp 主题已启用”)。这可能不是这里的问题;但系统图像列表 api 存在问题,除非使用 v6,否则不会返回大图标。

标签: c# wpf icons file-extension


【解决方案1】:

【讨论】:

    【解决方案2】:

    您引用的代码仅使用 2 种尺寸:

    public const uint SHGFI_LARGEICON = 0x000000000;     // get large icon
    public const uint SHGFI_SMALLICON = 0x000000001;     // get small icon
    

    要获得 extra_large 大小,您需要添加自己的定义(并添加另一个枚举用于调用函数):

    public const uint SHGFI_EXTRALARGEICON = 0x000000002;     // get extra large icon
    

    或者,如果您只想快速修复,请将原始大定义中的 0x000000000 替换为 0x000000002

    以下是所有图标尺寸: http://msdn.microsoft.com/en-us/library/windows/desktop/bb762185%28v=vs.85%29.aspx

    【讨论】:

      【解决方案3】:

      您不能让 ShGetFileInfo 返回 ExtraLarge 和 Jumbo 图标。

      相反,

      1) 使用 SysIconIndex (0x000004000) 标志调用 ShGetFileInfo 2) 使用 ShGetImageList 获取大小合适的 System Imagelist 3) 使用 ImageList_GetIcon 和 SHFILEINFO 中的 .iIcon 值获取 HICON。

      【讨论】:

        猜你喜欢
        • 2018-11-08
        • 1970-01-01
        • 1970-01-01
        • 2010-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-11
        • 1970-01-01
        相关资源
        最近更新 更多