Как разместить свою настраиваемую панель инструментов (DeskBand?) на панели задач в Windows 7 win WPF?

Как разместить настраиваемую панель инструментов на панели задач в Windows 7 перед панелью задач? Существует популярное приложение под названием Pokki, которое делает это. введите здесь описание изображенияИнтересно, как мне сделать то же самое?

Edit1: мне нужен 100%-й путь к настраиваемой панели инструментов (DeskBand?) для Windows 7. Я не ищу решение для закрепления приложения, а способ создать собственное решение, способное обрабатывать свои собственные сообщения и отображать их. собственные значки. Способ С# очень ценится.

Edit2: путь WPF очень ценится.


person Artem    schedule 15.12.2012    source источник
comment
То, что вы ищете, - это рабочий стол, но рабочий стол в С# не поддерживается. Вы должны использовать C или C++   -  person Raymond Chen    schedule 17.12.2012
comment
Дело не только в том, что deskbands не поддерживаются из коробки в C# (вы, вероятно, могли бы вызвать некоторые методы user32 с помощью PInvoke), но и в том, что использование управляемого кода (.net) для написания каких-либо расширений оболочки — ужасная, ужасная идея. Прочтите это обсуждение, в котором рассматривается множество проблем, связанных с написанием расширений оболочки. social.msdn.microsoft .com/forums/en-US/netfxbcl/thread/   -  person AkselK    schedule 18.12.2012


Ответы (2)


Вы получите множество советов не делать это в C#. Я не могу порекомендовать иначе, шансы, что ваш десктоп не будет работать, велики. Проблема заключается в проблеме внедрения версии CLR, процесс (например, explorer.exe) может иметь только одну загруженную версию CLR. И ваш десктоп не будет работать, если это неправильная версия.

В .NET 4.0 были добавлены очень конкретные меры противодействия этой проблеме, его CLR поддерживает внутрипроцессные параллельные версии CLR. Другими словами, в одном процессе загружено более одной среды CLR. Эта функция работает в этом конкретном сценарии: COM-сервер, которому нужна среда CLR, поскольку она написана в управляемом коде. Таким образом, абсолютным требованием является то, что вы должны написать расширение, ориентированное на .NET 4.0 или выше.

Но все еще существует устаревшая проблема и основная причина того, что Microsoft до сих пор не поддерживает этот сценарий для расширений оболочки. Есть проблема «кто придет первым». Несмотря на предупреждение не делать этого, существуют расширения оболочки, которые используют управляемый код и нацелены на CLR версии 2. Если такое расширение загружается раньше вашего, это совершенно случайное событие, поскольку оно зависит от порядка ключей в реестре, Explorer может сначала загрузить CLR 2. Что затем препятствует работе функции параллельной работы в процессе, она может закончиться только тогда, когда сначала будет загружена CLR версии 4.

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

Пройдет много времени, прежде чем эту проблему можно будет полностью отбросить. На самом деле Windows должна прекратить поддержку версий .NET до .NET 4, чтобы иметь гарантию. Windows 8 начала с того, что .NET 3.5 не была установлена ​​по умолчанию, но все же ее очень легко добавить. Так что сделайте это много времени, десятилетие или больше.

Что ж, будьте осторожны, вы можете заставить его работать на C #, если не беспокоитесь о случайных сбоях. Затем вы погрузитесь в очень неясные детали COM-интерфейса, чтобы выжить в них, требуются навыки черного пояса, знание того, как правильно объявить интерфейс [ComImport]. Это не то, что вы должны решать сами, это уже сделали другие. У меня нет привычки рекомендовать продукты, но я не могу не рекомендовать EZShellExtensions, библиотека, специально разработанная для помощи в написании расширений оболочки на C#. Поддержка десктопов — одна из рекламируемых функций. Используйте пробную версию, чтобы поработать с этим, чтобы увидеть, сможете ли вы довести это до конца.

person Hans Passant    schedule 22.12.2012

Следующий пример может помочь:

http://www.codeproject.com/Articles/185512/Programmatically-PIN-shortcut-onto-Taskbar-on-Win7

person PeterJ    schedule 15.12.2012