Как узнать, как в настоящее время используется устройство отображения, из информации об устройстве.Результаты FindAllAsync для прогнозирования

#c# #windows #visual-studio #uwp #projection

Вопрос:

Я пытаюсь выяснить дисплей, который пользователь в настоящее время использует в качестве основного дисплея для компьютера/ноутбука, чтобы я мог показать пользователю доступные дисплеи, которые поддерживают проекцию и могут использоваться с помощью ProjectionManager API. Пожалуйста, помните, что это для приложения UWP.

     DeviceInformationCollection displayDevices = DeviceInformation.FindAllAsync(ProjectionManager.GetDeviceSelector());
 

DeviceInformation.FindAllAsync(...) возвращает коллекцию DeviceInformation . DeviceInformation имеет Pairing свойство, но оно всегда возвращает значение false (даже для основного отображения).

Есть ли какие-либо другие API, которые я могу использовать для получения основного дисплея/используемого в настоящее время дисплея?

Например:

  1. Данные DeviceId , которые я получаю, DeviceInformation могут использоваться BluetoothDevice.FromIdAsync(String DeviceId) для конкретных требований API Bluetooth, таких как — Connected статус.
  2. Могу ли я получить идентификатор дисплея, используемый в настоящее 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. Большое спасибо за ответ и официальную ссылку на код. Скоро проверю и дам вам знать о моих отзывах.