2011-08-26 20 views
13

関連するシステムアイコンと共にファイルのリストを表示する必要があるHTAアプリケーションを構築しています。
私は.ICOにファイルのアイコンを保存することができますVBSでスクリプトを見つけた...HTA(HTML/Javascript/VBScript)でファイルの関連アイコンを取得する方法

をファイルを一覧表示するFileSystemObjectを使用しますが、アイコンを取得する方法がありませんあるようですよ。
ファイル(PEリソースファイル、.exeまたはdll)を読み取り、アイコンデータを解析します。 このスクリプトを修正して、アイコンのバイトを返し、base64に変換し、HTMLで埋め込みbase64イメージを使用しました。 ここでは、元のスクリプトです:http://gilpin.us/IconSiphon/

問題.icoファイルは、複数のアイコン(多くのサイズと色深度が含まれているほとんどのケースで

  1. ))が、私は(使用するかを指定することができます方法はありません私は16x16のアイコンが必要です)。それはexeファイルとDLLを読み込むよう

  2. )すべてのアイコンが

  3. を表示されるわけではありませんが)多くのファイルと遅くなることでした(しかし、私はそれでOKだけど、私はすでにフェッチされたアイコンをキャッシュすることができます)

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

要件

  • すべては(可能であれば)HTAに埋め込むしなければならない複数のファイルの選択を許可する必要があり、16×16のアイコン

  • を表示する必要があります。外部のEXEファイルなし

これを達成する方法を知っている人はいますか?

ありがとうございます!

答えて

1

FileSystemObjectオブジェクトは、ローカルのファイルシステム上のファイルを列挙するためのあなたに必要な機能を提供します。しかし、アイコン画像を取得するには、@ seanchaseの応答ごとにwin32 apiを使うか、外部のexeを使う必要があります。 http://www.google.com/search?q=wshAPIToolkit.ucATO%2F&rls=com.microsoft:en-us&ie=UTF-8&oe=UTF-8&startIndex=&startPage=1

は、そのコピーを見つけ、あなたが行われているに近いです - あなたはwshApiToolkitのActiveXオブジェクトを使用して、HTAにJavaScriptでのWin32APIにアクセスすることができますしかし

。これは、HTA内から登録プロセスを実行するコードとシェルでactivexオブジェクトを配布する必要があるため、3番目の制約に違反する可能性があります。私はあなたがbase64でexeをデータトラックのhtaにエンコードし、それをファイルシステムに書き戻すことができると信じていますが、少なくとも1つのファイルにバンドルされています。あなたがそのオプションをサポートしている場合、おそらく同じものを実行するexeを埋め込むことがrequriementsを満たすでしょう。

今後のOSバージョンでは不安定かもしれない間違いなく、Windows 7でwshApiToolkitが動作するかどうかわかりません.8はちょうどいいところです。がんばろう!

1

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

Visual Studioを使用してActiveXコンポーネントを作成してFindResource,LoadResourceおよびLockResourceを呼び出すことで、時間がかかった場合、私は自分自身でこれにアプローチします。これにより、BMP(またはPNG)を抽出する機能を提供するIconsを反復処理する豊富なインタフェースを提供するGroup Iconリソースへのアクセスが可能になります。

これは実際にやっていないということを達成するための方法です。

1

私は一度同様のHTAインターフェイスを構築し、同じ問題に直面しました。私はカスタムアイコンギャラリーを作成し、base64を使って画像を変換することでこの問題を解決しました。スプライトを変換するか、スプライトを使用しても同じ結果が得られます。多くのUIがそれを行います。java.swingにも独自のコレクションが組み込まれています。あなたが気づいたように、* .dllから読むとアプリケーションのスピードを遅くすることができます

関連する問題