#c# #windows #visual-studio #uwp #projection
Вопрос:
Я пытаюсь выяснить дисплей, который пользователь в настоящее время использует в качестве основного дисплея для компьютера/ноутбука, чтобы я мог показать пользователю доступные дисплеи, которые поддерживают проекцию и могут использоваться с помощью ProjectionManager
API. Пожалуйста, помните, что это для приложения UWP.
DeviceInformationCollection displayDevices = DeviceInformation.FindAllAsync(ProjectionManager.GetDeviceSelector());
DeviceInformation.FindAllAsync(...)
возвращает коллекцию DeviceInformation
. DeviceInformation
имеет Pairing
свойство, но оно всегда возвращает значение false (даже для основного отображения).
Есть ли какие-либо другие API, которые я могу использовать для получения основного дисплея/используемого в настоящее время дисплея?
Например:
- Данные
DeviceId
, которые я получаю,DeviceInformation
могут использоватьсяBluetoothDevice.FromIdAsync(String DeviceId)
для конкретных требований API Bluetooth, таких как —Connected
статус. - Могу ли я получить идентификатор дисплея, используемый в настоящее
DeviceId
время, и сопоставитьDeviceInformation.DeviceId
его с коллекцией, чтобы удалить его?
Доступно ли для чего-то подобного ProjectionManager
? Я просмотрел официальные документы, а также примеры на github и не смог найти ничего подходящего. Итак, нужна помощь. Спасибо.
Комментарии:
1.
Pairing
сообщает вам, сопряжено ли устройство (подключено) по Bluetooth/Wi-Fi или нет. Это не имеет ничего общего с основным дисплеем. Он сообщит вам, сопряжена ли беспроводная мышь, принтер или проектор2. Спасибо, что указали. Это всего лишь наблюдение, о котором я упоминал. Но здесь вопрос не в этом.
Ответ №1:
Есть ли какие-либо другие API, которые я могу использовать для получения основного дисплея/используемого в настоящее время дисплея?
ProjectionManager
не имеет такого api, который мог бы обнаружить основной дисплей или нет. но вы могли бы использовать DisplayRegion
его для обнаружения.
если вы хотите получить первичный, вы можете проверить, является ли текущий регион отображения WorkAreaOffset
{0,0}
. и у него есть свойство идентификатора устройства, вы можете использовать его для получения соответствующего монитора.
IReadOnlyList<DisplayRegion> displayRegions = ApplicationView.GetForCurrentView().WindowingEnvironment.GetDisplayRegions();
// count all the DisplayRegions that are marked as available to the app for use.
foreach (DisplayRegion displayregion in displayRegions)
{
if (displayregion.IsVisible)
{
Debug.WriteLine(displayregion.WorkAreaOffset);
}
}
Для получения текущего дисплея.
ApplicationView.GetForCurrentView().GetDisplayRegions()[0]
Для получения дополнительной информации о коде, пожалуйста, обратитесь к официальному образцу кода.
Комментарии:
1. Большое спасибо за ответ и официальную ссылку на код. Скоро проверю и дам вам знать о моих отзывах.