如何在HTA (HTML/Javascript/VBScript)中获得文件的关联图标



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

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

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

  2. )不是所有的图标都显示

  3. )可以是缓慢的许多文件,因为它读取exe和dll(但我很好,我可以缓存已经获取的图标)

我也试过一些ActiveX控件,但似乎没有一个正常工作。即使是微软提供的(ShellFolderView或ListView)也有很多bug。

  • 必须显示16x16图标

  • 必须允许多个文件选择

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

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

谢谢!

使用SHGetFileInfo()与SHGFI_ICON标志。

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

filesystemobject将为枚举本地文件系统上的文件提供必要的函数。然而,要获得图标图像,您需要使用win32 api/@seanchase的响应或外部exe。

但是你可以通过javascript在html中使用wshApiToolkit activex对象访问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内执行注册过程,因此可能会违反第三个约束。虽然我相信你可以base64编码的exe到一个dataurl的hta,并写回文件系统,所以它至少会被捆绑到一个文件。如果你支持这个选项,那么嵌入一个做同样事情的exe可能会满足你的要求。

肯定有一些黑客的东西,可能在未来的操作系统版本上不稳定-见鬼,我甚至不确定wshApiToolkit是否适用于windows 7,而8就在不远的地方。好运!

您表示可以安装ActiveX组件并在HTA中使用它们。

如果我有时间,我会通过使用Visual Studio创建ActiveX组件来调用FindResource, LoadResourceLockResource来为自己解决这个问题。这将使访问组图标资源成为可能,然后我将为此提供丰富的接口来迭代图标,提供提取bmp(或png)的能力。

这就是我将如何去实现它,而不是真正去做。

有一次我构建了一个类似的HTA接口,我遇到了同样的问题。我通过创建一个自定义图标库并使用base64转换图像来解决这个问题。你可以通过转换或使用精灵来达到同样的效果。许多UI都这样做,甚至java也是如此。Swing有自己的收藏。正如您所注意到的,从*.dll中读取可以降低应用程序

的速度。

最新更新