13

関連するシステム アイコンを含むファイルのリストを表示する必要がある HTA アプリケーションを作成しています。
ファイルを一覧表示するために使用FileSystemObjectしていますが、アイコンを取得する方法がないようです...

ファイルのアイコンを .ico に保存できるスクリプトを VBS で見つけました。
ファイル (PE リソース ファイル、.exe または dll) を読み取り、アイコン データを解析します。そのスクリプトを変更して、アイコンのバイトを返し、base64 に変換し、base64 画像を HTML に埋め込むようにしました。元のスクリプトは次のとおりです: http://gilpin.us/IconSiphon/

問題

  1. ) ほとんどの場合、.ico には複数のアイコン (多くのサイズと色深度) が含まれていますが、どのアイコンを使用するかを指定する方法はありません (16x16 のアイコンが必要なため)。

  2. ) すべてのアイコンが表示されるわけではありません

  3. )exeとdllを読み取るため、多くのファイルで遅くなる可能性があります(ただし、それで問題ありません。すでにフェッチされたアイコンをキャッシュできます)

ActiveX コントロールもいくつか試しましたが、どれも正しく動作していないようです。Microsoft が提供するもの (ShellFolderView または ListView) でさえ、非常にバグがあります。

要件

  • 16x16 のアイコンを表示する必要があります

  • 複数のファイルを選択できるようにする必要があります

  • すべてを hta に埋め込む必要があります (可能な場合)。外部 .exe なし

誰もそれを達成する方法を知っていますか?

ありがとう!

4

4 に答える 4

1

filesystemobjectは、ローカルファイルシステム上のファイルを列挙するために必要な関数を提供します。ただし、アイコンイメージを取得するには、@seanchaseの応答ごとにwin32apiまたは外部exeを使用する必要があります。

ただし、wshApiToolkitactivexオブジェクトを使用して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

そのコピーを見つければ、もうすぐ完了です。3番目の制約に違反する可能性があるため、HTA内から登録プロセスを実行するコードとシェルとともにActiveXオブジェクトを配布する必要があります。exeをdataurlのhtaにbase64エンコードし、それをファイルシステムに書き戻して、少なくとも1つのファイルにバンドルできるようにすることはできると思います。そのオプションをサポートしている場合は、同じことを行うexeを埋め込むことで要件を満たすことができます。

確かに、将来のOSバージョンでは不安定になる可能性のあるハッキーなものがいくつかあります-wshApiToolkitがWindows 7で動作するかどうかさえわかりませんが、8はもうすぐです。幸運を!

于 2012-06-21T04:21:21.500 に答える
1

SHGFI_ICON フラグを指定して SHGetFileInfo() を使用します。

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

于 2012-03-27T17:13:24.200 に答える
1

あなたは、ActiveX コンポーネントをインストールし、HTA でそれらを使用することにオープンであることを示しました。

時間があれば、Visual Studio を使用して ActiveX コンポーネントを作成しFindResource、. これらにより、グループ アイコン リソースへのアクセスが可能になり、そのために豊富なインターフェイスを提供して、BMP (または PNG) を抽出する機能を提供するアイコンを反復処理します。LoadResourceLockResource

これは、私が実際にそれをやろうとせずに達成するための「方法」です。

于 2012-10-03T06:40:16.947 に答える
1

似たような HTA インターフェイスを構築すると、同じ問題に直面しました。カスタム アイコン ギャラリーを作成し、base64 を使用して画像を変換することで問題を解決しました。スプライトを変換または使用することで、同じことを実現できます。多くの UI がそれを行い、java.swing でさえ独自のコレクションが埋め込まれています。お気づきのとおり、*.dll から読み取ると、アプリケーションの速度が低下する可能性があります

于 2013-05-29T16:14:59.777 に答える