因为我没学过c语言,标题可能有许多错误,请见谅。
我用electron开发一个桌面软件,需要获取exe文件的图标(不要app.getFileIcon
这东西),在网上找了一圈没有可用的。最理想的是extracticon.exe,但它只能生成png文件
我需要ReadableStream
或 Buffer
Electron:
protocol.handle('exei', () => {
let url = request.url.slice("exei:///".length)
let imgStream = exeToPng(url) // 提取exe图标返回stream?
return new Response(
imgStream,
{ headers: { 'content-type': 'image/png' } }
);
});
[c#] exeToPng.exe:
参考ExtractIcon源码
namespace exeToPng
{
public partial class Program
{
static void Main(string[] args
{
MemoryStream memoryStream = new MemoryStream();
// ...
iconBMP.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Png);
iconBMP.Dispose();
// 我不知道是否有可能返回这个memoryStream
}
}
}
如果返回stream是可能的,希望能提供一下代码,如果不能,是否意味着我只能先保存为图片后在node中读取?谢谢
二进制字节数组的话直接是
byte[]
。Stream 就是用于流式访问byte[]
的。你这里直接
memoryStream.ToArray()
就可以得到byte[]
了。不过看起来你的需求是想通过 Electron 调用 C# 里的方法?
原则上这是可行的,相当于 Electron 把 C# 当动态链接库用呗,有 edge.js 之类的现成的开源方案。但这需要你懂得 C# 的一些基础知识,起码得知道什么是程序集、什么是反射。但题主没学过 C# 的话这种方式学习成本还是挺高的,所以建议还是通过临时文件中转。
其实通过临时文件在两个程序之间传递数据是一种非常常见的方式。比如很多视频类型转换器,其实就是做了个 GUI 的“壳”,里面调用的是 ffmpeg,互操作也是通过临时文件的方式。