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

PowerShell script returning the wrong 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

我在分辨率设置为 3840 x 2160 的 4k 显示器上 运行 这个脚本,但它给了我以下输出:

1536

864

有什么会导致 System.Windows.Forms.Screen 获得错误的“边界”值吗?

真奇怪。

为什么 Microsoft 只提供带有 Server Core 的 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}

好吧,我并没有完全弄明白为什么我会得到如此奇怪的结果...但我确实找到了另一种方法,它实际上看起来更简单而且看起来更准确。

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

这将打印当前的屏幕分辨率,并且似乎能给我准确的结果,这正是我真正想要的。如果有人弄清楚是什么导致另一种方法产生不准确的结果,我仍然很想知道为什么会这样……

这是因为该命令为您提供了缩放分辨率。如果你是 运行 3840 x 2160 但你不是 运行 100% 缩放,你会得到不同的值。