Скрипт 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}