Подтвердить что ты не робот

Как получить связанный значок файла в HTA (HTML/Javascript/VBScript)

Я создаю приложение HTA, в котором мне нужно отобразить список файлов со связанным с ним значком системы.
Я использую FileSystemObject, чтобы перечислить файл, но, похоже, нет способа получить значок...

Я нашел в VBS, который может сохранить значок файла в .ico.
Он читает файл (файл ресурсов PE,.exe или dll) и анализирует данные значка. Я изменил это значение script, чтобы вернуть байты значков, преобразовать его в base64 и использовать встроенные образы base64 в HTML. Здесь оригинал script: http://gilpin.us/IconSiphon/

Проблема

  • ) В большинстве случаев .ico содержит несколько значков (много размеров и глубину цвета), но я не могу указать, какой из них использовать (так как мне нужны значки 16x16).

  • ) Не все значки отображаются

  • ) Может быть медленным с большим количеством файлов, поскольку он читает exe и dll (но я в порядке с этим, я могу кэшировать уже извлеченный значок)

Я также пробовал элемент управления ActiveX, но ни один из них не работает должным образом. Даже те, которые предоставляются microsoft (ShellFolderView или ListView), очень ошибочны.

Требования

  • Должен отображать значок 16x16

  • Должен разрешить выбор нескольких файлов

  • Все должно быть включено в hta (если возможно). Нет внешнего .exe

Кто-нибудь знает способ достичь этого?

Спасибо!

4b9b3361

Ответ 2

В файловой системе будут предоставлены необходимые функции для перечисления файлов в локальной файловой системе. Однако, чтобы получить изображение значка, вам нужно будет использовать win32 api для ответа @seanchase или внешнего exe.

Однако вы можете получить доступ к win32api через javascript в hta, используя объект activex wshApiToolkit - http://www.google.com/search?q=wshAPIToolkit.ucATO%2F&rls=com.microsoft:en-us&ie=UTF-8&oe=UTF-8&startIndex=&startPage=1

Найдите копию этого, и вы близки к тому, чтобы быть готовым. Это требует распространения объекта activex с вашим кодом и оболочкой, выполняющими процесс регистрации из HTA, чтобы это могло нарушить ваше третье ограничение. Хотя я считаю, что вы можете base64 кодировать exe в hta в dataurl и записывать это обратно в файловую систему, чтобы он, по крайней мере, был связан в один файл. Если вы поддерживаете этот вариант, то, возможно, внедряете exe, который сделает то же самое, что и ваши требования.

Определенно некоторые хакерские вещи, которые могут быть неустойчивыми в будущих версиях ОС - черт возьми, я даже не уверен, что wshApiToolkit работает на Windows 7, а 8 не за горами. Удачи!

Ответ 3

Вы указали, что вы открываете для установки компонентов ActiveX и используете их в своем HTA.

Если бы у меня было время, я бы применил это для себя, создав компоненты ActiveX с помощью Visual Studio для вызова FindResource, LoadResource и LockResource. Они позволят доступ к ресурсу значка группы, для которого я тогда предоставил бы богатые интерфейсы для итерации через значки, предлагающие возможность извлекать BMP (или PNG).

Это "как", я бы хотел достичь этого, даже если это не удастся сделать это.

Ответ 4

Как только я построю аналогичный интерфейс HTA, я столкнулся с той же проблемой. Я решил проблему, создав пользовательскую галерею значков и конвертируя изображения с помощью base64. Вы можете достичь того же путем преобразования или использования спрайта. Многие пользовательские интерфейсы делают это, даже у java.swing есть своя коллекция. Как вы заметили, чтение из *.dll может ускорить приложение