2

Win7x64 で C++ (VS 2012) を使用しており、次のように使用SHGetFileInfoしてアイコンの場所とインデックスを取得しようとしています。SHGFI_ICONLOCATION

SHFILEINFO info;
memset(&info, 0, sizeof(info));
DWORD_PTR result = SHGetFileInfo(_T("C:\\Users\\Admin\\Desktop\\test.lnk"), 0, &info, sizeof(SHFILEINFO),  SHGFI_ICONLOCATION);

結果として 1 を取得し、info.szDisplayName を調べた後、次のように表示されます。

0x0022CDE0  00 00 3a 00 5c 00 50 00 72 00 6f 00  ..:.\.P.r.o.
0x0022CDEC  67 00 72 00 61 00 6d 00 20 00 46 00  g.r.a.m. .F.    
0x0022CDF8  69 00 6c 00 65 00 73 00 20 00 28 00  i.l.e.s. .(.
0x0022CE04  78 00 38 00 36 00 29 00 5c 00 54 00  x.8.6.).\.T.
0x0022CE10  65 00 73 00 74 00 5c 00 54 00 65 00  e.s.t.\.T.e.
0x0022CE1C  73 00 74 00 2e 00 65 00 78 00 65 00  s.t...e.x.e.
0x0022CE28  00 00 00 00 00 00 00 00 00 00 00 00  ............
0x0022CE34  00 00 00 00 00 00 00 00 00 00 00 00  ............

私が奇妙に思うinfo.szDisplayNameのは、最初の 00 00 のために文字列が空に見えるにもかかわらず、への呼び出しがSHGetFileInfoパス全体を正しく入力し、その中のドライブ文字を 00 00 に置き換えて「空」にすることです。ストリング。

また、別の実行可能ファイルから別のアイコンを選択すると、問題なく動作するように見えることにも気付きました。しかし、その別の実行可能ファイルへのショートカットを作成し、そのアイコンを使用すると、この「空の」文字列が再び返されます。

実行可能ファイルとアイコンの場所が交差しているように見えますが、アイコンが同じ実行可能ファイルからのものであるため、常にこの奇妙な動作を示すようです。これに対する唯一の例外は、アイコンのインデックスです。

実行可能ファイルのアイコンが 1 つだけか多数かは問題ではありませんが、インデックスが 0 より大きいアイコンを使用すると、実行可能ファイルとアイコンの場所が異なる場合でも、場所とインデックスが正しく入力されます。ショートカットでも同じです。

icon.szDisplayNameショートカットのアイコンの場所が実行可能ファイルと同じで、インデックスが 0 の場合に、SHGetFileInfo が「空の」文字列として入力されるのはなぜですか?

4

0 に答える 0