Скрипт 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 получить неправильные значения "границ"?

746   3  

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}

Comments

    Ничего не найдено.