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% 缩放,你会得到不同的值。
我刚刚编写了一个简单的 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% 缩放,你会得到不同的值。