Скрипт PowerShell, возвращающий неправильное разрешение экрана

Я только что написал простой скрипт PowerShell, чтобы получить разрешение экрана моего монитора, но, похоже, он возвращает неправильные значения.

# Returns an screen width and screen height of maximum screen resolution
function Get-ScreenSize {
    $screen = [System.Windows.Forms.Screen]::PrimaryScreen
    $width  = $screen.Bounds.Width
    $height = $screen.Bounds.Height
    return $width, $height
}

Get-ScreenSize

Я запускаю этот скрипт на мониторе 4k с разрешением 3840 x 2160, но он дает мне следующий вывод:

1536

+864

Есть ли что-нибудь, что могло бы вызвать System.Windows.Forms.Screen получить неправильные значения "границ"?

3 ответа

Решение

Это потому, что эта команда дает вам масштабированное разрешение. Если вы используете 3840 x 2160, но не используете 100% масштабирование, вы получите другое значение.

Ну, я не совсем понял, почему я получаю такие странные результаты... но я нашел другой подход, который на самом деле кажется более простым и точным.

$vc = Get-WmiObject -class "Win32_VideoController"
$vc.CurrentHorizontalResolution
$vc.CurrentVerticalResolution

Это распечатает текущее разрешение экрана и даст мне точные результаты, которые я и искал. Если кто-нибудь выяснит, что может привести к тому, что другой подход приведет к неточным результатам, я все же очень хотел бы знать, почему это происходит...

Это странно.

С какой стати Microsoft предоставила только командлет Get-DisplayResolution с Server Core?

Эта редакция поставляется без кнопки "Пуск"... и в соответствии с приведенным выше комментарием о возвращенном размере дисплея (без стартовой панели); Я не удивлюсь, узнав, что командлет использует ту же библиотеку кода.NET.

Быстрый поиск в моем HKLM\SYSTEM\CurrentControlSet\Control перечисляет несколько клавиш для мониторов и значений на экран, но ничего полезного.


Изменить: см. Q7967699.

PS D:\Scripts> Add-Type -AssemblyName System.Windows.Forms

PS D:\Scripts> [System.Windows.Forms.Screen]::AllScreens


BitsPerPixel : 32
Bounds       : {X=0,Y=0,Width=3840,Height=2160}
DeviceName   : \\.\DISPLAY1
Primary      : True
WorkingArea  : {X=0,Y=0,Width=3840,Height=2120}
Другие вопросы по тегам