PowerShell脚本返回错误的屏幕分辨率

时间:2016-03-12 21:49:11

标签: winforms powershell winapi screen-resolution

我刚刚写了一个简单的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"值?

3 个答案:

答案 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}