Как создавать ярлыки средствами С++, WinAPI

351
26 ноября 2016, 19:06

Пишу инсталлятор, который, как принято, должен создавать ярлык на рабочем столе и группу в меню Пуск. Находил в сети много вариантов одной и той же функции создания ярлыков, которая основывается на Shellapi. MinGW при компиляции кода с этой функцией пишет "undefined reference to CoCreateInstance@20'" и "undefined reference toIID_IPersistFile'", при этом в коде ничего не подчёркивая красным. Простой SHCreateShortcut() он тоже не понимает. Очень критична статическая компиляция!

Собственно вопрос: неужели кроме как через Шелл никак не создать ярлык? Нельзя ли просто WriteFile(..."Link.lnk"...), предварительно записав в переменную-буфер создаваемого файла нужные пути и наименования после определённой последовательности байт, которая отвечает за идентификацию параметров ярлыка? Если так можно, подскажите пожалуйста эти последовательности (маркеры). Или может есть другие пути создания ярлыков?

Answer 1

Видите ли, без Shell..., наверное, можно - как-то же MS это делают :)? только это будет сложно и непереносимо - теоретически формат может и поменяться.

У вас же, похоже, проблема просто в том, что к проекту не подключена нужная библиотека (насколько я помню, Shell32.lib).

READ ALSO
Считывание пробела

Считывание пробела

Добрый деньИзучаю инструкцию SWITCH

192
zlib сжатие потока

zlib сжатие потока

На первый write все хорошо, 2 и следующие возвращают Z_BUF_ERROR

188
Сборка Boost - не может найти файл corecrt.h

Сборка Boost - не может найти файл corecrt.h

Нужно срочно собрать Boost 1_62_0 на Windows 7 x64 SP1Нет файла corecrt

278
Регулярные выражения в qt

Регулярные выражения в qt

Суть проблемы: Написал я регулярное выражение, которое ищет '{' и оглядывается назад, чтобы посмотреть, нет ли там признака коментариев, и когда...

208