Скрипт 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   2   2016-03-13 00:49:10

3 ответа:

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

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

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

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

Это странно.

Почему Microsoft предоставила только командлетGet-DisplayResolution с серверным ядром?

Это издание поставляется без кнопки запуска... и согласно комментарию выше о возвращенном размере дисплея (минус start-bar); я не удивлюсь, если услышу, что командлет использует ту же библиотеку кода .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}