[win] иконка ярлыка

feliks28

Можно ли для ярлыка типа "program.exe target.something" брать присвоенную target.something иконку и накладывать на нее частично прозрачную маску из program.exe?
Возможность вносить исправления в код program.exe есть.
Например:

klyv

Можно.

feliks28

И как?

mkrec

какие проблемы: берешь из program.exe иконку, накладываешь в редакторе на стандартную иконку и делаешь результат стандартным
или ты что-то другое хотел? тогда поясни

feliks28

Есть набор ярлыков. Часть открываются по умолчанию, часть другой программой. Нужно их визуально различать.
Так же нужен вариант, прозрачный для пользователя, не умеющего работать с иконками. Вариант приложить мануал по правке иконок - не вариант

mkrec

ну, значит, наоборот, надо написать прогу, которая выискивает стандартный ярлык, выдергивает ярлык из program.exe, накладывает их и засовывает назад в program.exe. Запускать эту прогу при установке приложения.

klyv

Проанализируй то, как это сделано с обычными ярлыками (копай реестр по ключу .lnk и MSDN) и сделай так же.

feliks28

И если 20 ярлыков, то 20 копий приложения делать? %)

feliks28

Честно говоря, пока твой ответ не вселяет в меня уверенность, что потратив кучу времени на копание и гугление я получу нужный результат.
Есть положительный личный опыт по моему вопросу?

klyv

Есть уверенность, что он будет, если начать
Сейчас самому копать не хочется. Но ведь с иконками, SMB-шарами и ещё чем-то оно же есть в винде - значит, как-то оно обрабатывается. Значит, можно обрабатывать и самому.

feliks28

значит, как-то оно обрабатывается. Значит, можно обрабатывать и самому.
Вот то что можно обрабатывать самому, если умеет система - это как раз не факт.
Иначе мы уже не об изменении кода program.exe говорим, а о внедрении в систему...

mkrec

Нужно, чтобы система любому ярлыку типа "a.exe %1" давала иконку, содержащую комбинацию иконки a.exe и иконки %1? Если любому - то мне кажется, задача разумными усилиями не решается.

feliks28

Ну да. Вопрос то был задан в надежде не задавался ли кто схожим вопросом и инкапсулирован ли у винды этот "ярлычный" функционал или присутствует где-нибудь в библиотеках.

klyv

Иначе мы уже не об изменении кода program.exe говорим, а о внедрении в систему...
Я 100% уверен, что только изменением кода program.exe проблему не решить.
Отображает иконки explorer (другие программы основываются на том же и информацию о том, что отображать, он берёт из реестра. Потому править реестр точно надо будет.
При отображении иконок для мягких ссылок и для расшаренных папок, используется общий алгоритм. Он подобен тому, что хочешь ты реализовать. Я предлагаю только воспользоваться им вместо изобретения чего-то своего трёхколёсного.

feliks28

Я и говорю, что нет уверенности, что этот велосипед не закрыт в гараже.

agaaaa

TortoiseSVN умеет добавлять свой оверлейный значок к папочкам. Как делает - не знаю.

feliks28

Данке. Нашел у них в исходниках:

// "The Shell calls IShellIconOverlayIdentifier::GetOverlayInfo to request the
// location of the handler's icon overlay. The icon overlay handler returns
// the name of the file containing the overlay image, and its index within
// that file. The Shell then adds the icon overlay to the system image list."
и нагуглил howto
Оставить комментарий
Имя или ник:
Комментарий: