2011-08-26 39 views
13

Estoy creando una aplicación HTA en la que necesito mostrar una lista de archivos con el ícono de sistema asociado.
estoy usando FileSystemObject a la lista el archivo, pero no parecen tener ninguna manera de obtener el icono ...Cómo obtener el ícono asociado de un archivo en HTA (HTML/Javascript/VBScript)

he encontrado un script en VBS que puede salvar el icono de un archivo en un .ico.
Lee el archivo (archivo de recursos PE, .exe o dll) y analiza los datos del icono. Modifiqué esa secuencia de comandos para devolver los bytes del icono, convertirlo a base64 y usar las imágenes embebidas base64 en HTML. Aquí está el guión original: http://gilpin.us/IconSiphon/

Edición

  1. ) En la mayoría de casos el .ico contiene varios iconos (muchos tamaños y profundidad de color) pero no hay manera de que pueda especificar cuál de ellos utilizar (como necesito 16x16 íconos).

  2. ) No todos los iconos se muestran

  3. ) podría ser lento, con muchos archivos, ya que leer EXE y DLL (pero estoy bien con eso, puedo almacenar en caché icono ya leídos)

También probé algunos controles ActiveX pero ninguno parece funcionar correctamente. Incluso los proporcionados por microsoft (ShellFolderView o ListView) son muy defectuosos.

Requisitos

  • Debe mostrar icono 16x16

  • Debe permitir la selección de varios archivos

  • Todo debe incrustar en la ETS (si es posible). No externo .exe

¿Alguien sabe una manera de lograr eso?

Gracias!

Respuesta

1

FileSystemObject que proporcionará las funciones necesarias para enumerar los archivos en el sistema de archivos local. Sin embargo, para obtener la imagen del ícono necesitarás usar la API de Win32 por respuesta @ seanchase o un exe externo.

Sin embargo se puede acceder al win32api a través de JavaScript en el HTA utilizando el objeto 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

encontrar una copia de esa y ya está cerca de terminar. Requiere la distribución del objeto activex con su código y el intérprete de comandos ejecutando el proceso de registro desde dentro de la HTA para que pueda violar su tercera restricción. Aunque creo que puedes basar64 para codificar el exe en el hta en una columna de datos y escribirlo en el sistema de archivos para que al menos esté incluido en un solo archivo.Si usted apoya esa opción, entonces la inclusión de un exe que haga lo mismo cumpliría con sus requisitos.

Definitivamente algunas cosas hacky que pueden ser inestables en futuras versiones del sistema operativo - diablos, ni siquiera estoy seguro de que el wshApiToolkit funcione en Windows 7, y 8 está a la vuelta de la esquina. ¡Buena suerte!

1

Se indicó que está abierto a la instalación de los componentes de ActiveX y utilizarlos en su HTA.

Si tuviera tiempo, me gustaría acercarme a esto creando componentes ActiveX utilizando Visual Studio para llamar a FindResource, LoadResource y LockResource. Esto permitirá el acceso al recurso Icono de grupo para el que luego proporcionaría interfaces ricas para iterar a través de los iconos que ofrecen la capacidad de extraer BMP (o PNG).

Este es el "cómo" me gustaría ir sobre la realización de este corto realmente de ir fuera a hacerlo.

1

Una vez que construyo una interfaz HTA similar y enfrenté el mismo problema. Resolví el problema creando una galería de iconos personalizada y convirtiendo las imágenes usando base64. Puede lograr lo mismo al convertir o usar sprite. Muchas UI lo hacen, incluso java.swing tiene su propia colección embbebed. Como habrás notado, leer desde * .dll puede acelerar la aplicación

Cuestiones relacionadas