Windows-8 comment écrire un script pour changer la résolution?

1

J'ai un yoga 2 pro qui vient avec un écran haute résolution (2k je crois). Cela pose parfois des problèmes avec les programmes qui ne s’échelonnent pas correctement, ce que je peux généralement ignorer.

Cependant, j'ai aussi un poste de travail distant sur mon ordinateur de travail, qui ne dispose que d'un écran 1080p. Cela rend le travail vraiment difficile car la session à distance est réalisée à 3200x1800. Je finis donc par changer la résolution à chaque fois en cliquant avec le bouton droit de la souris sur le bureau, puis sur Modifier la résolution, puis sélectionnez Résolution et appuyez sur Accepter, puis sur Accepter.

Existe-t-il un script que je pourrais écrire pour automatiser cela pour moi? Donc, je peux facilement basculer entre les résolutions. Des points bonus s’il existe un moyen de modifier également l’échelle de la police !!!

J'ai fait des recherches et trouvé des commandes Powerscript mais je ne pouvais pas les faire fonctionner ...

Modifier: Trouvé cette réponse ici qui dit PowerShell ne peut pas le faire Comment faire un script Powershell (ou autre) pour changer la résolution de l'écran?

Je suppose que je peux trouver un utilitaire en ligne. Des recommandations?

MAC
la source
1
mstsc lui-même a une option pour régler la résolution - l'avez-vous essayé? C'est sur l'onglet "Affichage".
Scott Rhee
J'utilisais l'application de bureau à distance Windows 8. Cela ne me laisse pas le faire.
MAC
@ScottRhee J'allais suggérer la même chose, mais vous m'y êtes battu. Tout client RDP décent (même ceux qui ne sont pas fabriqués par Microsoft) possède une telle option. Je l'utilise quotidiennement pour connecter mon iKM 5K à un Windows 7 box avec un écran HD normal. Je dois forcer la session RDP à utiliser la même résolution car certaines applications sur Windows détestent tout changement de résolution en cours d'exécution.
Tonny

Réponses:

0

Le script Powershell suivant définira la résolution sur une valeur spécifiée (dans mon exemple, 1280 x 1024): - Je viens de remarquer qu'il s'agit du même script référencé dans votre article lié. Cela fonctionne, je l'ai testé sur Win 8.1 Pro et Enterprise.

    Function Set-ScreenResolution { 

<# 
    .Synopsis 
        Sets the Screen Resolution of the primary monitor 
    .Description 
        Uses Pinvoke and ChangeDisplaySettings Win32API to make the change 
    .Example 
        Set-ScreenResolution -Width 1024 -Height 768         
    #> 
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 1280 1024
David de Groot
la source