Comment obtenir L'icône associée à un fichier dans HTA (HTML / Javascript/VBScript)

je suis en train de construire une application HTA dans laquelle je dois afficher une liste de fichiers avec leur icône de système associée.

Je suis à l'aide de FileSystemObject pour lister les fichiers, mais il semble y avoir aucun moyen d'obtenir de l'icône...

j'ai trouvé un script en VBS qui peut sauver l'icône d'un fichier dans une .ico .

Il a lu le fichier (PE resource file,.exe ou dll) et analyser les données de l'icône. J'ai modifié ce script pour retourner les octets de l'icône, le convertir en base64 et utiliser embed base64 des images dans le HTML. Voici le script original: http://gilpin.us/IconSiphon/

Problème

  1. ) dans la plupart des cas le .ico contient plusieurs icônes (plusieurs tailles et la profondeur de couleur), mais il n'y a aucun moyen que je puisse spécifier lequel utiliser (car j'ai besoin d'icônes 16x16).

  2. ) toutes les icônes ne sont pas affichées

  3. ) pourrait être lent avec beaucoup de fichier comme il lire exe et dll (mais je suis d'accord avec cela, Je peux cache déjà récupéré icône)

j'ai aussi essayé un contrôle ActiveX mais aucun ne semble fonctionner correctement. Même ceux fournis par microsoft (ShellFolderView ou ListView) sont très bogués.

exigences

  • Doit affichage de l'icône 16x16

  • doit permettre la sélection de plusieurs fichiers

  • Tout doit être intégrer dans l'ets (si possible). Aucune externes .exe

est ce que quelqu'un connait un moyen pour y parvenir?

Merci!

13
demandé sur Dr.Molle 2011-08-26 04:09:34

4 réponses

utilisez Shgtefileinfo () avec le drapeau SHGFI_ICON.

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

1
répondu Sean Chase 2012-03-27 17:13:24

le filesystemobject vous fournira les fonctions nécessaires pour énumérer les fichiers du système de fichiers local. Toutefois, pour obtenir l'image de l'icône, vous devrez utiliser la réponse de l'api win32 per @seanchase ou un exe externe.

cependant vous pouvez accéder au win32api via javascript dans le hta en utilisant l'objet 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

trouvez une copie de cela et vous êtes sur le point d'être fait. Il nécessite de distribuer l'objet activex avec votre code et shell exécutant le processus d'enregistrement à partir de L'HTA afin que cela puisse violer votre troisième contrainte. Bien que je crois que vous pouvez base64 Encoder l'exe dans le hta dans un datarul et l'écrire dans le système de fichiers alors elle serait au moins regroupée en un seul fichier. Si vous supportez cette option, alors peut-être que l'intégration d'un exe qui fait la même chose satisferait vos exigences.

Definitely some hacky stuff that may be unstable on future OS versions - heck Je ne suis même pas sûr que le wshApiToolkit fonctionne sur windows 7, et 8 est juste au coin. Bonne chance!

1
répondu Marcus Pope 2012-06-21 04:21:21

vous avez indiqué que vous êtes ouvert à l'installation de composants ActiveX et à leur utilisation dans votre HTA.

si j'avais le temps, je m'en approcherais moi - même en créant des composants ActiveX en utilisant Visual Studio pour appeler FindResource,LoadResource et LockResource. Ceux-ci permettront l'accès à la ressource D'icône de groupe pour lequel je fournirais alors des interfaces riches pour itérer à travers les icônes offrant la possibilité d'extraire des bmp (ou png).

C'est "comment" je m'y prendrais pour y arriver à court d'aller hors de le faire.

1
répondu Stephen Quan 2012-10-03 06:40:16

une fois que j'ai construit une interface HTA similaire et que j'ai fait face au même problème. J'ai résolu le problème en créant une galerie d'icônes personnalisée et en convertissant les images en utilisant base64. Vous pouvez obtenir la même chose en convertissant ou en utilisant sprite. Beaucoup D'UI le font, même java.swing a sa propre collection embbebed. Comme vous l'avez remarqué, la lecture *.dll peut accélérer l'application

1
répondu 2013-05-29 16:14:59