我刚刚写了一个简单的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
出错?#34; Bounds"值?
答案 0 :(得分:1)
嗯,我没有确切地知道为什么我会得到如此奇怪的结果......但我确实找到了另一种看似更简单且看似准确的方法。
$vc = Get-WmiObject -class "Win32_VideoController"
$vc.CurrentHorizontalResolution
$vc.CurrentVerticalResolution
这将打印当前的屏幕分辨率,似乎给了我准确的结果,这正是我实际需要的。如果有人弄清楚可能导致其他方法产生不准确结果的原因,我仍然真的想知道为什么会发生这种情况......
答案 1 :(得分:1)
这是因为该命令为您提供了缩放分辨率。如果你运行的是3840 x 2160,但是你没有100%缩放,那么你将获得不同的价值。
答案 2 :(得分:-1)
这很奇怪。
为什么Microsoft只提供了带有服务器核心的Get-DisplayResolution cmdlet?
该版本没有开始按钮......并根据上面的评论返回显示尺寸(减去开始条);听到cmdlet使用相同的.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}