プログラムでWindows実行可能ファイル(PEファイル= dll、exe、com ..)のデフォルトアイコンを見つける必要があります。リソースをウォークスルーして、アイコンとは何か、カーソルとは何かを識別する方法は知っていますが、私が知る限り、どのアイコンもデフォルトとしてマークされていません。それで、誰かがデフォルトのアイコンを見つける方法を知っていますか?さらに、Windows API呼び出しを使用したくないので、関数を自分でコーディングしたいと思います。問題は、すべてのアイコンのどれがデフォルトのアイコンかわからないことです。
2 に答える
何度も検索したところ、デフォルトのアイコンはIDが最も小さいアイコンではないことがわかりました。
Windowsは、さまざまな目的で1つのアイコンのいくつかのサイズを使用します。詳細については、こちらをご覧ください。ただし、重要な情報は次のとおりです。
システムがアイコンを表示するとき、.exeまたは.dllファイルから適切なアイコン画像を抽出する必要があります。システムは、次の手順を使用してアイコン画像を選択します。
RT_GROUP_ICONリソースを選択します。そのようなリソースが複数存在する場合、システムはリソーススクリプトにリストされている最初のリソースを使用します。
RT_GROUP_ICONリソースから適切なRT_ICONイメージを選択します。複数の画像が存在する場合、システムは次の基準を使用して画像を選択します。
要求されたサイズに最も近いサイズの画像が選択されます。
そのサイズの画像が2つ以上存在する場合は、ディスプレイの色深度に一致する画像が選択されます。
ディスプレイの色深度と正確に一致する画像がない場合は、ディスプレイの色深度を超えない最大の色深度を持つ画像が選択されます。すべてが色深度を超える場合は、色深度が最も低いものが選択されます。
注:システムは、8bpp以上のすべての色深度を同等として扱います。したがって、16x16256色画像と16x1616色画像を同じリソースに含める利点はありません。システムは最初に検出した画像を選択するだけです。ディスプレイが8bppモードの場合、システムは256色のアイコンではなく16色のアイコンを選択し、システムのデフォルトパレットを使用してすべてのアイコンを表示します。
要求されたサイズは16x16であるため(システムの小さいアイコンサイズ、つまりデフォルトのアイコンサイズであるため)、デフォルトのアイコンは、サイズが最小の最初のアイコングループのアイコン(16x16以上の小さいアイコン)であると言えます。存在することができます)最高の色深度で。
編集:小さな修正。16x16より小さいサイズのアイコンがリソースに含まれているようですが、これは、ファイルにデフォルトのアイコンがなく、システムが代わりに独自のアイコンを提供していることを示しています。
最初に見つけたものがデフォルトです。
デフォルトのアイコンは、IDが最も小さいアイコンであるため、定義上、リソースを列挙するときに最初に検出されるアイコンです。