Возможно ли встроить расширители боковой панели Windows в собственное.Сетевое приложение

#c# #.net #winapi #widget #windows-desktop-gadgets

#c# #.net #winapi #виджет #windows-desktop-гаджеты

Вопрос:

Я пытаюсь встроить виджеты боковой панели Windows в свои собственные.Сетевое приложение (WPF и C #), но я действительно не знаю, с чего начать. Я немного погуглил, но нашел только SDK и руководства по разработке виджетов. Я обнаружил, что в Windows есть небольшая служба, запускающая виджеты. Я подумал, что, возможно, я мог бы подделать этот сервис и предоставить его функции в моей программе, чтобы я мог запускать и показывать виджеты.

У кого-нибудь есть несколько советов о том, как это сделать? Или есть какой-то опыт в этом? Возможно, есть даже какая-то библиотека для такого рода вещей?

Если это невозможно, также можно переключиться на widged-manager с открытым исходным кодом для использования этого widgeds, но это только экстренное решение, и Windows-гаджеты были бы очень признательны.

Некоторая информация о моей системе:

Я написал какой-то небольшой windowmanager для дочерних окон в своем приложении. И поверх этого я хочу показать виджеты в каком-то HostWindow.

Любой намек будет оценен.

PS: Я был бы готов поделиться результатами, если у меня (или у нас) это заработает 🙂

Ответ №1:

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

Нельзя сказать, что это будет легко.

Вам нужно будет извлечь гаджет в какой-нибудь временный каталог, запустить что-нибудь, содержащее MSHTML (в WinForms было бы удобно использовать WebBrowser), перейти к соответствующему файлу в этом временном каталоге (обнаруженному путем синтаксического анализа gadget.xml ) и вставить в гаджет что-то похожее на объект System.

В качестве отправной точки внедрите какой-нибудь скрипт, который устанавливает System = window.external; onload и WebBrowerser.ObjectForScripting = new FakeGadgetSystem() .

FakeGadgetSystem потребуется [ComVisible(true)] и для реализации приличного количества материала. Я бы посоветовал взять один или два виджета для тестирования с помощью этого, мягко используя Gadget API, а затем медленно выполнять вызовы, которые они выполняют. Это будет долгий путь к 100% совместимости с официальной службой хостинга гаджетов.

Комментарии:

1. Что ж, звучит как отличный способ начать