Рейтинг:
26
wcb2@cornell.edu
Я подумал об очень легком обходном пути, который мог бы сработать для других. Моя основная проблема была связана с тем, как Windows кэширует значки ярлыков приложений. Это мешало мне изменить значок панели задач во время выполнения. Что, безусловно, возможно. Поэтому вместо того, чтобы иметь ярлык запуска, указывающий непосредственно на exe-файл основного приложения, я указываю ярлык на приложение запуска, которое раскрывается в основном приложении. Таким образом, главное приложение exe никогда не запускается из ярлыка. Таким образом, значок на панели задач может быть изменен во время выполнения. Это очень хорошо работает для меня.
D3athRace
Можете ли вы представить пример того, как вы это сделали? Это было бы очень кстати.
Luc Pattyn
К вашему сведению: недавно я узнал, что Windows 10 делает это по-другому: значок панели задач не зависит от значка приложения, а соответствует значку в текущей активной форме.
Рейтинг:
1
Sergey Alexandrovich Kryukov
Пожалуйста, смотрите мой комментарий к этому вопросу. Почему?
А теперь несколько заметок. Значок формы-это совсем другое дело, вы действительно можете легко изменить его во время выполнения. Это может даже иметь некоторый смысл (другой режим работы, другая часть функциональности). Значок, показанный на панели задач, - это совсем другое дело, он называется значок приложения. Поскольку ОС использует его, он должен храниться в PE-модуле (файле) каким-то универсальным способом, не специфичным для .NET. Значок приложения на самом деле является встроенным приложением манифест. Для сборки это хранится в файле модуль, тот, кто держит манифест приложения для сборки. (Visual Studio поддерживает только создание сборок с одним модулем на сборку, но компиляция на более низком уровне позволит вам иметь более одного модуля на сборку, но только один из них будет содержать манифест; он называется "основной модуль сборки".)
MSBuild использует файл значков в этом случае этап построения: http://msdn.microsoft.com/en-us/library/microsoft.build.tasks.generateapplicationmanifest.aspx[^].
Тем не менее, в отличие от значка формы, этот значок доступен только для чтения И, как вы должны знать, исполняемый модуль, загруженный для выполнения, не может быть изменен, независимо от того, насколько высоки ваши разрешения. Это важная функция защиты большинства современных ОС.
И даже если бы вы могли каким-то образом изменить этот значок (нет, я не думаю, что это возможно), это разрушило бы их цель. Элементы управления ОС полагаются на этот значок, чтобы сохранить ваше приложение хорошо узнаваемым; он не будет получать никаких уведомлений, Если вы можете изменить его, потому что это не так, как все устроено.
—СА
wcb2@cornell.edu
То, что я пытаюсь сделать, работает просто отлично, когда нет ярлыка для EXE-файла. Как только создается ярлык, предназначенный для EXE-файла, значок панели задач перестает обновляться во время выполнения. Я бы предпочел не вступать в философские дебаты о том, почему я не должен пытаться сделать это. Вместо этого я просто хотел бы знать, сделал ли кто-нибудь это успешно. И если да, то как. Спасибо!
Sergey Alexandrovich Kryukov
Это не будет "сделано успешно", я попытался объяснить, почему. И никто с тобой не спорит, с чего бы это мне? Вы принимаете ответ формально (зеленая кнопка) или нет?
—СА
wcb2@cornell.edu
Вы не предоставили решения. Скорее вы предлагаете альтернативы. Поэтому я бы не стал считать ваш ответ "решением".
В этом пункте я не согласен с тем, что это невозможно. Поэтому я продолжу пытаться разобраться в этом. Спасибо.
Sergey Alexandrovich Kryukov
Что вы хотите, если решение невозможно? И альтернатива-это не "просто".
Конечно, это полностью зависит от вас. Особенно если вы не согласны. Я все еще не понимаю, что заставляет вас думать, что это возможно. Не могли бы вы объяснить?
—СА
wcb2@cornell.edu
Если то, о чем я спрашиваю, невозможно, пожалуйста, объясните, почему это работает просто отлично, если я запускаю приложение, запустив EXE непосредственно. Приложение делает именно то, что я хочу, и значок меняется во время выполнения на панели задач! Это становится проблемой только после создания ярлыка для EXE-файла.
Sergey Alexandrovich Kryukov
Извините, я не понимаю. Что именно "работает просто отлично"? Не могли бы вы описать его? Когда значок изменяется и действительно ли это значок приложения, а не значок формы? Есть ли у вас отчетливо различающиеся значки: приложение и форма? Конечно, если я ошибаюсь, то с радостью признаю это, но мне нужны доказательства.
—СА
wcb2@cornell.edu
Это значок формы mdi. Это значок, который windows отображает на панели задач во время работы приложения. Когда я говорю это, "работает просто отлично". Я имею в виду именно это. Я могу изменить значок, который windows отображает на панели задач во время выполнения. Да, это совершенно разные файлы значков. Значок изменяется, когда пользователь меняет учетные записи через:
Me.Icon = Новая Система.Рисование.Значок(Приложение.StartupPath & "\Images\" & myIconFileNames(2%))
Sergey Alexandrovich Kryukov
Я уже говорил вам, что значки форм могут быть изменены. Не могли бы вы прочитать его еще раз? Однако на панели задач значок приложения отображается сверху. Все ваши "разногласия" исчезли. Но тогда я не вижу в этом проблемы.
И если вы даже используете MDI, и потому что вы, по-видимому, не принимаете никаких советов, вам не о чем говорить; это просто несерьезно.
Желаю вам всего наилучшего,
—СА
X7Rider
Я столкнулся с той же проблемой. Мне нужно изменить значок панели задач во время выполнения (одна единственная форма с возможностью выбора разных значков). Он работает, когда я запускаю exe - файл релизной версии. И он не работает, если я запускаю его из ярлыка (или запускаю отладочный exe-файл).
Sergey Alexandrovich Kryukov
Это решается по-другому. Вы должны иметь два или более значков в ресурсах и заменить их в управлении. Довольно легкий. Вы понимаете, в чем дело?
—СА