Разрешение экрана PowerShell в Windows 11

Вопрос или проблема

Для приложения мне нужно знать актуальное разрешение экрана, например 1920 x 1200 или 2560 x 1600 в Windows 11.

Я пробовал:

Add-Type -AssemblyName System.Windows.Forms
$result = [System.Windows.Forms.Screen]::AllScreens
$result 

Но я получаю WorkingArea={X=-3840,Y=512,Width=2560,Height=1528} для 2560 x 1600 или WorkingArea={X=0,Y=0,Width=2880,Height=1728} для экрана 1920 x 1200.

Как мне прочитать значение, указанное в настройках Windows?

Спасибо

Ответ или решение

Как получить разрешение экрана в Windows 11 с помощью PowerShell

Вам нужно определить текущее разрешение экрана в Windows 11, например, 1920×1200 или 2560×1600, с использованием PowerShell? На первый взгляд, использование класса System.Windows.Forms.Screen может не дать ожидаемого результата, потому что он возвращает только рабочую область, а не полное разрешение экрана.

Решение

Для получения реального разрешения экрана в Windows 11 можно использовать метод, который сочетает в себе команды из PowerShell и API Windows для получения нужной информации. Рассмотрим, как это сделать.

Шаг 1: Получение разрешения экрана с помощью WMI

Вы можете использовать Windows Management Instrumentation (WMI) для получения информации о разрешении экрана. Рассмотрим следующий код:

# Получаем информацию о видеопараметрах через WMI
$monitor = Get-WmiObject -Namespace root\wmi -Class WmiMonitorBasicDisplayParams

foreach ($m in $monitor) {
    # Проверяем, что разрешение доступно
    if ($m.MaxHorizontalImageSize -gt 0 -and $m.MaxVerticalImageSize -gt 0) {
        # Выводим разрешение
        $width = [math]::Round($m.MaxHorizontalImageSize * 10.0)
        $height = [math]::Round($m.MaxVerticalImageSize * 10.0)
        Write-Output "$width x $height"
    }
}

Шаг 2: Другие альтернативы

Кроме WMI, вы также можете воспользоваться PowerShell и .NET для получения информации о текущем разрешении экрана. Проще говоря, можно воспользоваться пространством имен System.Windows.Forms.

Вот пример кода, который вернет текущее разрешение экрана:

# Подключаем необходимую сборку
Add-Type -AssemblyName System.Windows.Forms

# Получаем разрешение текущего экрана
$currentScreen = [System.Windows.Forms.Screen]::PrimaryScreen
$resolution = "$($currentScreen.Bounds.Width) x $($currentScreen.Bounds.Height)"
Write-Output "Текущее разрешение экрана: $resolution"

Объяснение кода

  • Add-Type -AssemblyName System.Windows.Forms: подключает сборку, необходимую для работы с формами Windows.
  • [System.Windows.Forms.Screen]::PrimaryScreen: обращается к основному экрану, что позволяет получить его размеры.
  • $currentScreen.Bounds.Width и $currentScreen.Bounds.Height: дают ширину и высоту текущего экрана соответственно.

Заключение

Используя вышеописанные методы, вы сможете точно определить разрешение вашего экрана в Windows 11. Первый вариант с помощью WMI более универсален, если у вас несколько мониторов, а второй — проще и подойдет для базовых задач. Выберите тот подход, который наилучшим образом соответствует вашим нуждам, и вы получите доступ к необходимой информации.

Если у вас остались вопросы или возникли трудности, не стесняйтесь обращаться за поддержкой.

Оцените материал
Добавить комментарий

Капча загружается...