Панель инструментов на панели задач Windows XP и Vista

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

Текущий я использую:

SHLoadInProc(__uuidof(MyBandLoader))

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

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

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


person Eirik Nygaard    schedule 04.12.2008    source источник
comment
Вы нашли ответ на это? Я пытаюсь сделать то же самое (автоматически включить панель инструментов из установщика NSIS)   -  person Chris Thompson    schedule 07.12.2008


Ответы (3)


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

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

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

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

person user6586    schedule 14.01.2009

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

person Eirik Nygaard    schedule 05.12.2008

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

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

person philk    schedule 22.11.2010