C++版可以参考https://learn.microsoft.com/zh-cn/windows/win32/shell/building-thumbnail-providers
C#版:https://github.com/jkavalik/GcodeThumbnailExtension
需要用到的插件:SharpShell
这里我们以自定义格式".gcode", “.gco"为例:
这里的主入口函数是"GetThumbnailImage”,其他的都是去实现这个接口的

这里我们准备一个通用缩略图,而不是文件内部的的缩略图,先跑通程序,准备通用缩略图图片

修改里面的函数ReadThumbnailFromGcode,让它强制指向我们的通用缩略图

     private Image ReadThumbnailFromGcode(StreamReader reader){Image image = Image.FromFile(@"C:\Users\tianj\Pictures\cde2d8d4-f4b3-4379-b7b5-0960a82d70ae.png");return image;}

编译程序

创建bat,内容

ServerRegistrationManager.exe install GcodeThumbnailExtension.dll -codebase

保存后双击运行bat

如果你操作没有错的话,刷新资源管理器后,结果是这样的:

那么下一步,就是StreamReader reader解析对应格式里面的缩略图了,源程序是把缩略图以base64字符串存储到自定义格式里,这里就看你怎么解析了

写入自定义图片:
这里不建议用第三方库,有可能会调用失败,推荐是用BinaryReader和BinaryWriter直接写入数据
数据写入的格式:(仅供参考)

            var byte1 = System.IO.File.ReadAllBytes(@"C:\Users\tianj\Pictures\Camera Roll\Cbz_Ext_Cover.jpg");var byte2 = System.IO.File.ReadAllBytes(@"C:\Users\tianj\Pictures\Camera Roll\Cbz_Ext_Chapter.json");var byte3 = System.IO.File.ReadAllBytes(@"C:\Users\tianj\Pictures\Camera Roll\aaa.zip");//String strbaser64 = Convert.ToBase64String(byte2);//var len = byte2.Length;using (FileStream fileStream = new FileStream(@"demott.milkl", FileMode.OpenOrCreate, FileAccess.ReadWrite)){using (System.IO.BinaryWriter binaryWriter = new BinaryWriter(fileStream)){binaryWriter.Write(byte1.Length);var jsonLenBytes= BitConverter.GetBytes(byte2.Length);var zipLenBytes= BitConverter.GetBytes(byte3.Length);Console.WriteLine("zipLenBytes:"+ zipLenBytes.Length);//x len//binaryWriter.Write(byte2.Length+ byte3.Length+ jsonLenBytes.Length+ zipLenBytes.Length);binaryWriter.Write(0);binaryWriter.Write(byte1);//xbinaryWriter.Write(byte2.Length);binaryWriter.Write(byte2);binaryWriter.Write(byte3.Length);binaryWriter.Write(byte3);//binaryWriter.Write(byte3.Length);//binaryWriter.Write(byte3);}}

解码

 using (FileStream fileStream = new FileStream(@"demott.milkl", FileMode.OpenOrCreate, FileAccess.ReadWrite)){using (System.IO.BinaryReader binaryWriter = new BinaryReader(fileStream)){//Console.WriteLine("--img:"+ size1);//Console.WriteLine("--json:"+ size2);//Console.WriteLine("--7z:"+ size3);int size1 = binaryWriter.ReadInt32();int sizex = binaryWriter.ReadInt32();var imageBytes = binaryWriter.ReadBytes(size1);int size2 = binaryWriter.ReadInt32();var jsonBytes = binaryWriter.ReadBytes(size2);int size3 = binaryWriter.ReadInt32();var zipBytes = binaryWriter.ReadBytes(size3);System.IO.File.WriteAllBytes("zip.zip", zipBytes);System.IO.File.WriteAllBytes("zip.jpg", imageBytes);System.IO.File.WriteAllBytes("zip.json", jsonBytes);}}

最终,再次修改上面的ReadThumbnailFromGcode函数为,编译即可

  private Image ReadThumbnailFromGcode(StreamReader reader){Image result = null;reader.BaseStream.Position = 0L;using (BinaryReader binaryReader = new BinaryReader(reader.BaseStream)){int size1 = binaryReader.ReadInt32();int size0 = binaryReader.ReadInt32();result = Image.FromStream(new MemoryStream(binaryReader.ReadBytes(size1)));}return result;}

这个插入一个0不知道为什么,不插入好像不行,懒得尝试了

最终的效果是:

我定义的milkl格式可以正常显示二进制包里的图片数据了!

【C#在资源管理器中显示自定义文件格式的缩略图】相关推荐

  1. 计算机网络的视频资源管理器,如何在资源管理器中显示视频文件内容的缩略图 – 手机爱问...

    2009-09-05 但在开始-程序中能找到视频设备.就是不能在资源管理器中显示. 你安装一下驱动试试如果是无驱的,建议修复一下系统,如果还不行,建议安装驱动.1.开机按F8不动到高级选项出现在松手, ...

  2. Windows 7 在资源管理器中显示软件快捷方式

    该方法是利用资源管理器中储存网络位置的文件夹实现的, 不需要修改注册表. 效果如图: 操作方法: 在资源管理器中打开路径 "%appdata%\Microsoft\Windows\Netwo ...

  3. 解决方案资源管理器中显示bin,Debug等文件夹

    1.项目 -- 显示所有文件 2.右击新出现的bin,Debug等文件夹 -- 加入到项目 即可

  4. 在 Visual Studio 的解决方案资源管理器中隐藏一些文件

    项目文件中有一些属性几乎是专门为 IDE 而准备的,不过考虑到 .NET 生态的开发者多数都使用 Visual Studio,所以基本上也只有 Visual Studio 对这些特性支持的最全面.(才 ...

  5. 如何在Windows资源管理器中自定义文件夹背景和图标

    We've covered a lot of Windows tweaks over the years, and today we're going to show you how to custo ...

  6. java中打开文件显示_在默认文件资源管理器中打开文件,并使用JavaFX或普通Java突出显示它...

    我想做标题所说的. 部分解决方案 例如,在Windows中,您可以使用以下代码在默认资源管理器中打开文件并突出显示它. (虽然它需要修改包含空格的文件): /** * Opens the file w ...

  7. win10计算机设备感叹号,Win10资源管理器无法显示iphone,设备管理器中存在黄色感叹号。...

    1.现象:之前iphone 6s正常连接PC,资源管理器中有盘符,可以查看照片.突然有一天盘符无法显示,设备管理器中"其他设备"中应该是iphone的部分显示"未知设备& ...

  8. 【已解决】Tortoise Git在Windows文件资源管理器中图标显示异常问题

    文章目录 1. 按 2. 解决方案 3. 原理说明 1. 按 我们在安装了OneDrive.坚果云.NextCloud 等网盘同步或者其他软件后会发现Tortoise Git的图标显示异常,不能正常加 ...

  9. 扩展Visual Studio 2010服务器资源管理器中的SharePoint结点

    Visual Studio 2010最大的卖点就是可扩展性.这样就可以借助.NET社区的力量基于VS构建出许多有用的工具.本文中我们将展示如何扩展VS2010的服务器资源管理器,在其中的SharePo ...

最新文章

  1. 【C#】数组的最大最小值
  2. JSP与Web技术概论
  3. R语言merge函数左连接dataframe数据(Left (outer) join in R)、左连接必须将参数all设置(all.x = TRUE)、默认merge函数通过公共列名合并数据集
  4. mysql聚集索引可以多列吗_MySQL使用单列索引和多列索引
  5. 翻译连载 | JavaScript轻量级函数式编程-第5章:减少副作用 |《你不知道的JS》姊妹篇...
  6. 句句真研—每日长难句打卡Day6
  7. 安卓使用Root权限实现后台模拟全局按键、触屏事件方法(类似按键精灵)
  8. MATLAB电路模拟——微分运算
  9. 两个HC05蓝牙模块相互之间的通信
  10. 【板栗糖GIS】global mapper 如何通过dsm批量制作贴地等高线
  11. 创业者应该问投资人的10个问题
  12. 系列之FIRST——跑酷小游戏:关卡+BOSS+技能版
  13. Neo4j学习笔记(三) 导入数据
  14. 实时语音视频通话SDK如何实现立体声(二)
  15. java joda range,Java:joda time
  16. 曲线数学NURBS之B样条曲线
  17. 实验1 进程管理实验-计算机操作系统
  18. 电脑显卡matlab,什么配置的电脑可以用Matlab?
  19. 计算机是怎样跑起来的(Ⅱ-2)连接电源、数据总线和地址总线
  20. pycharm中全局搜索ctrl+shift+F快捷键无反应原因和解决

热门文章

  1. Java面试题系列——JavaSE面试题(MySQL二)
  2. 基于javaweb+jsp的大学生个人财务记账系统(JavaWeb MySQL JSP Bootstrap Servlet SSM SpringBoot)
  3. PB9.0和.INI文件
  4. docker.4.3-docker容器镜像加速器及本地容器镜像仓库-harbor
  5. Tacview 添加自定义模型
  6. Vulkan Tutorial 6 统一缓冲区
  7. 国产WEB管理交换机的VLAN配置
  8. javascript,一幅图让你看懂DIV拖拽
  9. 最好用的pdf转ppt软件
  10. 华为研发投入超越微软、苹果、英特尔,2018年研发投入1015亿...