powershell

您所在的位置:网站首页 cmd命令修改分辨率 powershell

powershell

2024-07-12 04:46| 来源: 网络整理| 查看: 265

我正在尝试通过脚本(Powershell)设置屏幕分辨率。 我找到了 cmdlet Set-DisplayResolution,它应该适用于 Server 2012/R2 和 8/8.1(在这些版本中它不起作用),但它也不适用于 Windows 10 PS 5.0。

我也看了

Add-Type -AssemblyName System.Windows.Forms [System.Windows.Forms.Screen]::AllScreens

[System.Windows.Forms.Screen]::PrimaryScreen

但它显示了奇怪的输出:

BitsPerPixel : 32 Bounds : {X=0,Y=0,Width=2000,Height=1333} DeviceName : \\.\DISPLAY1 Primary : True WorkingArea : {X=0,Y=0,Width=2000,Height=1293}

我运行的分辨率为 3000x2000。即使我将显示器更改为 1920x1080,输出也保持不变。

经过较长时间的搜索,我发现 this script ,它使用 win32 API 完成这项工作。有没有更方便的方法来执行此操作,因为此 Set-DisplayResolution 仅在 Windows 10 安装上运行?

我还想设置 Windows 10 的 UI 缩放比例(例如 150%)。 当然,我想知道为什么 [System.Windows.Forms.Screen] 的 AllScreens 和 PrimaryScreen 方法不是功能正常。

最佳答案

请参阅以下脚本来更改 Windows 10 上的显示分辨率。Windows 10 不支持 PowerShell 服务器核心。您可以使用以下脚本 重要:您可以在脚本末尾提供显示分辨率 目前设置为Set-ScreenResolution -Width 1920 -Height 1080。您可以更改这些值。复制此完整脚本并另存为 Set-ScreenResolution.ps1 并使用 PowerShell 执行。确保您以管理员身份运行 powershell

Function Set-ScreenResolution { param ( [Parameter(Mandatory=$true, Position = 0)] [int] $Width, [Parameter(Mandatory=$true, Position = 1)] [int] $Height ) $pinvokeCode = @" using System; using System.Runtime.InteropServices; namespace Resolution { [StructLayout(LayoutKind.Sequential)] public struct DEVMODE1 { [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public string dmDeviceName; public short dmSpecVersion; public short dmDriverVersion; public short dmSize; public short dmDriverExtra; public int dmFields; public short dmOrientation; public short dmPaperSize; public short dmPaperLength; public short dmPaperWidth; public short dmScale; public short dmCopies; public short dmDefaultSource; public short dmPrintQuality; public short dmColor; public short dmDuplex; public short dmYResolution; public short dmTTOption; public short dmCollate; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public string dmFormName; public short dmLogPixels; public short dmBitsPerPel; public int dmPelsWidth; public int dmPelsHeight; public int dmDisplayFlags; public int dmDisplayFrequency; public int dmICMMethod; public int dmICMIntent; public int dmMediaType; public int dmDitherType; public int dmReserved1; public int dmReserved2; public int dmPanningWidth; public int dmPanningHeight; }; class User_32 { [DllImport("user32.dll")] public static extern int EnumDisplaySettings(string deviceName, int modeNum, ref DEVMODE1 devMode); [DllImport("user32.dll")] public static extern int ChangeDisplaySettings(ref DEVMODE1 devMode, int flags); public const int ENUM_CURRENT_SETTINGS = -1; public const int CDS_UPDATEREGISTRY = 0x01; public const int CDS_TEST = 0x02; public const int DISP_CHANGE_SUCCESSFUL = 0; public const int DISP_CHANGE_RESTART = 1; public const int DISP_CHANGE_FAILED = -1; } public class PrmaryScreenResolution { static public string ChangeResolution(int width, int height) { DEVMODE1 dm = GetDevMode1(); if (0 != User_32.EnumDisplaySettings(null, User_32.ENUM_CURRENT_SETTINGS, ref dm)) { dm.dmPelsWidth = width; dm.dmPelsHeight = height; int iRet = User_32.ChangeDisplaySettings(ref dm, User_32.CDS_TEST); if (iRet == User_32.DISP_CHANGE_FAILED) { return "Unable To Process Your Request. Sorry For This Inconvenience."; } else { iRet = User_32.ChangeDisplaySettings(ref dm, User_32.CDS_UPDATEREGISTRY); switch (iRet) { case User_32.DISP_CHANGE_SUCCESSFUL: { return "Success"; } case User_32.DISP_CHANGE_RESTART: { return "You Need To Reboot For The Change To Happen.\n If You Feel Any Problem After Rebooting Your Machine\nThen Try To Change Resolution In Safe Mode."; } default: { return "Failed To Change The Resolution"; } } } } else { return "Failed To Change The Resolution."; } } private static DEVMODE1 GetDevMode1() { DEVMODE1 dm = new DEVMODE1(); dm.dmDeviceName = new String(new char[32]); dm.dmFormName = new String(new char[32]); dm.dmSize = (short)Marshal.SizeOf(dm); return dm; } } } "@ Add-Type $pinvokeCode -ErrorAction SilentlyContinue [Resolution.PrmaryScreenResolution]::ChangeResolution($width,$height) } Set-ScreenResolution -Width 1920 -Height 1080

关于powershell - 在 Windows 10 上设置屏幕分辨率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37678996/



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3