Windows — Как получить местоположение и индекс значка в & quot; .lnk & quot; ярлык с SHGetFileInfo в переполнении стека

Я использую C ++ (VS 2012) на Win7x64 и пытаюсь получить местоположение и индекс значка, используя 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, сделав его «пустой» строкой.

Я также заметил, что когда я выбираю другой значок из другого исполняемого файла, он, кажется, работает нормально. Но когда я затем создаю ярлык для этого другого исполняемого файла и использую значок из него, который работал до того, как он снова возвращает эту «пустую» строку.

Кажется, что это работает как-то перекрещиваясь с расположением исполняемого файла и значка, но при значке, взятом из одного и того же исполняемого файла, всегда кажется, что это странное поведение. Единственным исключением является индекс значка.

Не имеет значения, имеет ли исполняемый файл только один или несколько значков, но когда я использую значок с индексом больше 0, он правильно заполняет расположение и индекс, даже если местоположение исполняемого файла и значок в ярлыке то же самое.

Почему SHGetFileInfo заполняется icon.szDisplayName в виде «пустой» строки, когда в ярлыке расположение значка совпадает с исполняемым файлом, а индекс равен 0?

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]