win10 修改分辨率powershell脚本

将下面脚本保存为 1.ps1

然后右这个文件,菜单 使用 PowerShell 运行

Function Set-Resolution
{
    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 "Ok"; 
                            //} 
                            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-Resolution 1440 900

在最后面调用

Set-Resolution 1440 900 即可,示例是1440X900,你可以改成其它数值
点赞