Панель инструментов на Windows XP и Vista панели задач - PullRequest
1 голос
/ 04 декабря 2008

Я создал панель инструментов, которую я хочу включить из приложения systray, написанного на C #, фактическое включение панели инструментов выполняется из части C ++ с использованием [DLLImport].

Ток, который я использую:

SHLoadInProc(__uuidof(MyBandLoader))

но в Vista это не работает (SHLoadInProc больше не реализован) и в Windows XP SP2 с IE6 (панель быстрого запуска исчезает после перезагрузки).

В Vista я пытался использовать: CocreateInstance () и BandSite-> AddBand (), но использование gull панели инструментов dll дало мне либо ошибку сегментации, либо адресную строку.

Есть ли другой способ включить панель инструментов из другой программы в XP и Vista?

Ответы [ 3 ]

1 голос
/ 14 января 2009

В Vista есть новый плохо документированный интерфейс под названием ITrayDeskBand.

Создайте экземпляр этого через CoCreateInstance, а затем вызовите ShowDeskBand ([CLSID вашей панели инструментов]) для возвращаемого указателя (в C ++ - я не уверен, как вы можете создать все соответствующие биты для PInvoke в C # - может быть проще написать простой C ++ dll для предоставления этой функции)

Это работает только в Vista, однако в XP вам нужно продолжить с описанным выше методом SHLoadInProc, поэтому вам нужно протестировать версию ОС и сделать соответствующую вещь.

Будьте осторожны, если вы поднимаете код из этой статьи о проекте кода - он полон тонких ошибок, хотя многие из них обсуждаются в комментариях

0 голосов
/ 22 ноября 2010

Никогда не следует использовать .Net для создания каких-либо объектов COM внутри процесса Explorer. Это просто не будет работать, если есть другой компонент .net, использующий другую версию фреймворка, уже загруженную в процесс explors. Только один .net Framework для каждого процесса. MS не должна была публиковать примеры разработки настольных лент на любом языке .net.

Единственный способ в Vista a up - использовать интерфейс ITrayDeskBand для отображения панели инструментов. Тем не менее, это отобразит окно подтверждения для пользователя, и он может отказаться от показа панели инструментов.

0 голосов
/ 05 декабря 2008

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

...