Вопрос или проблема
Я создаю WPF-приложение для проецирования экрана рабочего стола на беспроводной дисплей. Но эта функция доступна только в UWP, проверьте этот официальный пример от Microsoft: https://github.com/microsoft/Windows-universal-samples/tree/main/Samples/Projection/cs
Таким образом, другой способ – вызвать функцию проекции UWP-приложения из WPF-приложения, два процесса сосуществуют. Проблема заключается в том, как скрыть или свести к минимуму окно UWP. Поскольку функция проекции ProjectionManager.StartProjectingAsync()
принимает что-то вроде ApplicationView.GetForCurrentView().Id
в качестве аргументов, которые находятся в пространстве имен Windows.UI.ViewManagement
только для графического интерфейса UWP (WinRT).
Есть идеи?
Ответ или решение
Можно ли запустить UWP-приложение без его отображения?
Да, с технической точки зрения можно запустить UWP (Universal Windows Platform) приложение, не отображая его на экране. Ваша задача в данном случае будет заключаться в том, чтобы интегрировать функциональность из UWP приложения в ваше WPF (Windows Presentation Foundation) приложение. Ниже приведены основные подходы и методы, которые могут помочь вам в реализации этой функциональности.
1. Запуск UWP приложения как фона
Одним из способов запуска UWP приложения без его отображения является использование фона (background) способность UWP приложений. Если вашему приложению не требуется взаимодействовать с пользователем, вы можете запустить его в фоновом режиме, однако такой подход может столкнуться с ограничениями, связанными с необходимыми разрешениями и политиками безопасности, установленными в UWP.
2. Использование Windows.ApplicationModel
Вы можете использовать классы из пространства имен Windows.ApplicationModel
для запуска UWP приложений. Однако, чтобы начать работу с UWP приложением из WPF приложения, вам, возможно, потребуется изменить способ, которым вы совместно используете данные между двумя приложениями.
Для выполнения этой задачи вам может потребоваться использовать конструкцию AppService
. Это дает возможность двум приложениям взаимодействовать друг с другом, что позволяет вашему WPF приложению вызывать функции UWP приложения. Например, после настройки AppService
, вы можете вызвать метод ProjectionManager.StartProjectingAsync()
из вашего фонового UWP приложения.
3. Упрощенные взаимодействия с GUI
Если вам все же нужно, чтобы UWP приложение существовало в фоне для выполнения определенных функций, вы могли бы применить методы минимизации или скрытия окна:
-
Использование
ApplicationView
: Убедитесь, что вы корректно работаете сApplicationView
. Вы можете получить доступ к текущему представлению приложения с использованиемApplicationView.GetForCurrentView()
. Однако, чтобы минимизировать или скрыть UWP окно, вы можете попробовать использовать методTryResizeView
для изменения размера окна таким образом, чтобы оно занимало минимальное пространство на экране. -
Обработка UI в WPF: Обратите внимание на то, что управление UI UWP приложения не должно происходить непосредственно из WPF-приложения. Оптимальным вариантом является реализация обратного вызова (callback) или наблюдателя для обработки состояний приложения.
4. Пример реализации
Ниже приведен упрощенный код для запуска UWP приложения и минимизации его окна:
using Windows.UI.ViewManagement;
// Получите текущее окно приложения
var appView = ApplicationView.GetForCurrentView();
await appView.TryResizeViewAsync(new Size(1, 1)); // Изменяем размер окна до минимума
// Запуск UWP приложения через AppService
Заключение
Запустить UWP приложение без его отображения возможно, однако это требует определенного уровня интеграции между приложениями и может предполагать использование фоновых служб или AppService
. Если у вас есть доступ к необходимым API и разрешениям, у вас есть все шансы успешно реализовать эту функциональность.
Совместное использование функций UWP с WPF приложением открывает перед разработчиками новые возможности, но всегда учитывайте практики безопасности и политику конфиденциальности, когда вы работаете с пользовательским интерфейсом и фоновыми процессами.