2009-02-24 4 views
5

プロセスに影響を与えることはできますか?
私はアプリケーションを.NET 3.5/VS2008でビルドしています。私はwin32の.resファイルで複数のアイコンをアプリケーションに埋め込んでいます。これはVS2008のプロジェクトのプロパティボックスで行われます。 - .icoファイルを指定する代わりに、ボックスにチェックを付けて.resファイルを指定します。 .resファイルには複数のアイコンがあります。私が意味することはhereを参照してください。Vistaは自分のアプリケーションに関連付けられたドキュメントのアイコンをどのように生成しますか?

各アイコンには、256x256xRGB(PNG Cmopressed)の「Vistaグレード」イメージ、256x256x32ビットイメージ、48x48,32x32、および16x16イメージの通常のカスケードが含まれています。 Explorerで結果のexeファイルを見ると、256x256の大きな美しいビッグイメージが表示されます。

私は、Vistaのエクスプローラで右クリック> "Open With ..."> Set Default Programクリックストリームを使用してファイル拡張子をアプリケーションに関連付けることができます。しかし、ドキュメントの横に表示されるアイコンは、折りたたまれたコーナーを持つ白い紙のように見える上にオーバーレイされた小さなアイコンのアプリアイコンです。

「小さなアイコン」のバージョンで表示されていると、元の画像が小さく見えるようになります。それは恐ろしく見えます。

折りたたまれた紙を完全に省略することも、少なくとも重ねた画像を重ねることも可能です。たとえば、C#ファイルのアイコンには、折りたたまれた用紙がありますが、C#エンブレムは大きく見えます。どのように私はこれを得ることができますか? WinZip 12がインストールされているときの.zipファイルのアイコンは大きく、目に見え、折り畳まれた用紙はありません。

ドキュメントアイコンはアプリケーションアイコンと異なるのですか?私のアプリに関連付けられたドキュメントにVistaが使用するアイコンを登録するためには、私のアプリには何かがありますか?

答えて

13

ファイル拡張子のアイコンとファイルの関連付けは、レジストリに一覧表示されています。より具体的には、HKEY_CLASSES_ROOT\.extのエントリには、コンテンツタイプ、知覚タイプが含まれ、(Default)には実際の関連が入ります。たとえば、.csファイルのデフォルト値はVisualStudio.cs.9.0です(VS 2008があります)。 HKEY_CLASSES_ROOT\VisualStudio.cs.9.0をチェックすると、このファイルタイプに関連付けられている実際のアイコン、プログラム、およびコマンドを確認できます。特に、HKEY_CLASSES_ROOT\VisualStudio.cs.9.0\DefaultIconは、このタイプのファイルに対してどのアイコンを表示するかをExplorerに知らせるエントリです。バイナリとそのバイナリ内のリソースIDを指しています。

右クリック - > Open With ...を使用してファイルタイプをプログラムに関連付けると、デフォルトのアイコンが指定されないため、エクスプローラはアプリのアイコンを取得して一般的なドキュメントアイコン。

正しいアプローチは、ファイルタイプをアプリケーションとアイコンに関連付けるための適切なレジストリエントリをセットアップの一部として含めることです。含まなければならない正確なレジストリ値は、そのファイルタイプのコンテキストメニューに追加するコマンドに依存しますが、少なくともOpenコマンドが必要です。 .csファイルの場合は、HKEY_CLASSES_ROOT\VisualStudio.cs.9.0\Shell\Commands\Openのエントリに(Default)という値があり、Openコマンドが呼び出されたときに起動するアプリケーションが含まれていることがわかります。 HKEY_CURRENT_USER\Software\ClassesHKEY_LOCAL_MACHINE\Software\ClassesHKEY_CLASSES_ROOTは、2つのレジストリブランチのマッピングされたビューである点に注意してください

(あなたは今のところddeexec一部を無視することができます)。ファイルの関連付けをすべてのユーザーにしたい場合は、HKEY_LOCAL_MACHINEに書き込む必要があります。これを行うには、あなたの設定を管理者として実行する必要があります。それ以外の場合は、HKEY_CLASSES_ROOTへの書き込みを試みると、アクセスが拒否されたか、またはHKEY_CURRENT_USERへの書き込みが失敗し、現在のユーザーに対してのみ関連付けが行われます。(どちらが正確に起こるかは、OSのようないくつかの項目によって異なりますが、ユーザが管理者であるかどうかは問いません)

これについては、MSDNのCustomizing File Types (Files Associations)セクションを参照してください。特に、File TypesRegistering Programs with Client Programsは、これを正確に行う方法の基本を提供します。

+0

WOW!素晴らしい答え。完璧!ちょうど私が探していたもの! – Cheeso

関連する問題