13

我正在构建一个 HTA 应用程序,我需要在其中显示文件列表及其关联的系统图标。
FileSystemObject用来列出文件,但似乎没有办法获取图标...

我在 VBS 中找到了一个脚本,可以将文件的图标保存到 .ico 中。
它读取文件(PE 资源文件、.exe 或 dll)并解析图标数据。我修改了该脚本以返回图标的字节,将其转换为 base64 并在 HTML 中使用嵌入 base64 图像。这是原始脚本: http: //gilpin.us/IconSiphon/

问题

  1. ) 在大多数情况下,.ico 包含多个图标(许多尺寸和颜色深度),但我无法指定使用哪一个(因为我需要 16x16 图标)。

  2. ) 并非所有图标都显示

  3. ) 在读取 exe 和 dll 时可能会出现很多文件的速度很慢(但我可以接受,我可以缓存已经获取的图标)

我也尝试了一些 ActiveX 控件,但似乎没有一个可以正常工作。即使是微软提供的那些(ShellFolderView 或 ListView)也有很多错误。

要求

  • 必须显示 16x16 图标

  • 必须允许多个文件选择

  • 一切都必须嵌入到 hta 中(如果可能的话)。没有外部.exe

有谁知道实现这一目标的方法?

谢谢!

4

4 回答 4

1

您表示您愿意安装 ActiveX 组件并在您的 HTA 中使用它们。

如果我有时间,我会自己解决这个问题,方法是使用 Visual Studio 创建 ActiveX 组件来调用FindResource,LoadResourceLockResource. 这些将允许访问 Group Icon 资源,然后我将为其提供丰富的接口来遍历提供提取 BMP(或 PNG)的能力的图标。

这就是我要实现这一目标的“方式”,而不是实际去做。

于 2012-10-03T06:40:16.947 回答
1

将 SHGetFileInfo() 与 SHGFI_ICON 标志一起使用。

http://msdn.microsoft.com/en-us/library/windows/desktop/bb762179(v=vs.85).aspx

于 2012-03-27T17:13:24.200 回答
1

文件系统对象将为您提供枚举本地文件系统上文件的必要功能。但是,要获取图标图像,您需要根据@seanchase 的响应或外部 exe 使用 win32 api。

但是,您可以使用 wshApiToolkit activex 对象通过 hta 中的 javascript 访问 win32api - http://www.google.com/search?q=wshAPIToolkit.ucATO%2F&rls=com.microsoft:en-us&ie=UTF-8&oe=UTF -8&startIndex=&startPage=1

找到它的副本,你就快完成了。它确实需要使用您的代码分发 activex 对象,并且 shell 从 HTA 中执行注册过程,这样可能会违反您的第三个约束。尽管我相信您可以将 exe base64 编码到 dataurl 中的 hta 中,然后将其写回文件系统,以便至少将其捆绑到一个文件中。如果您支持该选项,那么可能嵌入一个执行相同操作的 exe 将满足您的要求。

绝对是一些在未来的操作系统版本上可能不稳定的 hacky 东西——哎呀,我什至不确定 wshApiToolkit 是否可以在 Windows 7 上运行,而 8 指日可待。祝你好运!

于 2012-06-21T04:21:21.500 回答
1

一旦我构建了一个类似的 HTA 接口,我就会遇到同样的问题。我通过创建自定义图标库并使用 base64 转换图像解决了这个问题。您可以通过转换或使用 sprite 来实现相同的目的。许多 UI 都这样做,甚至 java.swing 也有自己的集合嵌入。正如您所注意到的,从 *.dll 读取可以降低应用程序的速度

于 2013-05-29T16:14:59.777 回答