Вопрос или проблема
Для приложения мне нужно знать актуальное разрешение экрана, например 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 более универсален, если у вас несколько мониторов, а второй — проще и подойдет для базовых задач. Выберите тот подход, который наилучшим образом соответствует вашим нуждам, и вы получите доступ к необходимой информации.
Если у вас остались вопросы или возникли трудности, не стесняйтесь обращаться за поддержкой.