Я пытаюсь создать "гаджет" как приложение с помощью WPF. Цель состоит в том, чтобы получить то же поведение как нормальный гаджет Windows 7:
Я смог выполнить первые четыре цели, но не мог найти решение пятой проблемы. Самое близкое я приехал, при помощи служебного класса от Как дела прикрепления AppBar (для экранирования края, как WinAmp) в WPF?, но это превращает приложение на "панель инструментов", таким образом, высылая приложения из части экрана, куда мой гаджет GUI помещается.
Я вижу, что подобные вопросы задали ранее на Stackoverflow, но они вымерли, прежде чем решение было найдено. Регистрация так или иначе в надежде, что существует теперь кто-то там со знанием для решения этого =)
Попробуйте установить Topmost на true, и когда ваше приложение теряет фокус, вы можете установить Opacity на 0.
Я сделал этот Xaml:
<Window x:Class="OpacTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Topmost="True" Background="Transparent" ShowInTaskbar="False" AllowsTransparency="True" WindowStyle="None" Width="400" Height="300">
<Grid>
<Border Background="Black" CornerRadius="5" />
</Grid>
</Window>
Я сделал это в C # для Window:
protected override void OnActivated(EventArgs e)
{
base.OnActivated(e);
Opacity = 1;
}
protected override void OnDeactivated(EventArgs e)
{
base.OnDeactivated(e);
Opacity = 0;
}
Это поможет вам сделать часть пути к этому; вам нужен способ узнать, находится ли рабочий стол в фокусе.
Готов поспорить, вы могли бы сделать это, подключившись к событию WndProc в окне рабочего стола и ища WM_ACTIVATE.
Вы можете:
Вы можете реализовать реальный гаджет Windows с помощью WPF, создав XBAP. Просто добавьте мини-файл.xml и файл .html, содержащий только IFRAME, загружающего XBAP. Таким образом, ваше приложение WPF фактически будет гаджетом и будет автоматически следовать всем правилам.
Другим вариантом является использование Styler боковой панели Windows. Это требует установки дополнительного программного обеспечения рядом с вашим, но также позволяет вам делать то, что вы не можете делать в песочнице XBAP без сертификатов подписи кода, авторизации пользователей и т. Д.
Третий вариант - создать гаджет, который использует что-то узнаваемое в HTML (например, определенный цвет фона), затем, когда запустится .exe, выполните поиск hWnd в проводнике с атрибутами, которые вы ищете, введите себя в процесс Explorer.exe и установите окно в качестве его дочернего.
Вариант третьего варианта заключается в том, чтобы не внедрять в Explorer.exe а поддерживать индекс Z и местоположение (с помощью SetWindowPos) для отслеживания индекса Z и местоположения найденного hWnd.
Так много вариантов...