Как я могу программно сказать панели задач Windows открыть (или закрыть) данную панель инструментов? - PullRequest
3 голосов
/ 07 декабря 2008

Я написал панель инструментов , которая работает на панели задач. К сожалению, после установки пользователь должен включить его вручную. Есть ли способ указать обозревателю открыть (или закрыть) заданную панель инструментов?

Я бы хотел, чтобы установщик NSIS включил панель инструментов после завершения установки (я понимаю, что потребуется плагин).

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

Ответы [ 6 ]

10 голосов
/ 04 мая 2009
  • Этот комментарий CodeProject делает это путем имитации нажатия клавиш
  • Vista + имеет API для этого, с ShowDeskBand и HideDeskBand
  • Редактировать: Этот код теперь может добавлять объект десктопа (из Pinvoke.net и эти два вопросов форума MSDN):

    [ComImport]
    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    [Guid("4CF504B0-DE96-11D0-8B3F-00A0C911E8E5")]
    public interface IBandSite
    {
        [PreserveSig]
        uint AddBand([In, MarshalAs(UnmanagedType.IUnknown)] Object pUnkSite);
        [PreserveSig]
        void RemoveBand(uint dwBandID);
    }
    
    
    private uint AddDeskbandToTray(Guid Deskband)
    {
        Guid IUnknown = new Guid("{00000000-0000-0000-C000-000000000046}");
        Guid ITrayBand = new Guid("{F60AD0A0-E5E1-45cb-B51A-E15B9F8B2934}");   
        Type TrayBandSiteService = Type.GetTypeFromCLSID(ITrayBand, true);
        IBandSite BandSite = Activator.CreateInstance(TrayBandSiteService) as IBandSite;
        object DeskbandObject = CoCreateInstance(Deskband, null, CLSCTX.CLSCTX_INPROC_SERVER, IUnknown);
        return BandSite.AddBand(DeskbandObject);
    }
    

И, пример использования:

Guid address_toolbar_guid = new Guid("{01E04581-4EEE-11D0-BFE9-00AA005B4383}");
uint band_id = AddDeskbandToTray(address_toolbar_guid);

Было бы разумно, чтобы аналогичный вызов RemoveBand также помог, но на данный момент я не могу заставить этот код работать. Еще одна проблема: добавленная полоса закрывается при закрытии приложения, добавившего его.

3 голосов
/ 04 мая 2009

Возможно, вы захотите проверить эту статью . Похоже, что вы можете сделать это (в любом случае «официально») в Vista, используя интерфейс ITrayDeskBand .

2 голосов
/ 07 декабря 2008

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

Побочным эффектом этого является то, что очень немногие пользователи даже включают панель рабочего стола WMP по умолчанию.

1 голос
/ 09 мая 2009

Не совсем ответ на ваш вопрос, но, пожалуйста, пожалуйста: не пишите расширения оболочки (а панель задач - расширение оболочки) в .NET!

Вот почему .

По сути, вы ломаете другие приложения.

1 голос
/ 08 мая 2009

Насколько я понимаю, расположения и значения панелей задач и т. Д. Хранятся в реестре (забыли точное местоположение), поэтому, если вы найдете конкретный раздел реестра, вы можете взять его местоположение и заставить установщика вставить ключ реестра на компьютер, чтобы панель задач включен.

0 голосов
/ 23 сентября 2009

если вы хорошо проверите, группа инструментов Google существует, пока exe работает позади (GoogleDesktop.exe), поэтому, если вы настаиваете на том, как Google или панель поиска создаются, вам следует проверить еще раз TrayBandSiteService и создать службу поддержки ...

...