80 votes

Obtenir et définir la résolution de l'écran

Comment puis-je collecter et modifier la résolution de l'écran en utilisant Visual C# ?

5 votes

1 votes

@Justin : Ajoutez SystemInformation.PrimaryMonitorSize au mélange et postez-le comme réponse.

102voto

Donut Points 32892

Pour récupération de la résolution de l'écran, vous allez vouloir utiliser la fonction System.Windows.Forms.Screen classe. Le site Screen.AllScreens peut être utilisée pour accéder à une collection de tous les affichages du système, ou vous pouvez utiliser la propriété Screen.PrimaryScreen pour accéder à l'affichage principal.

Le site Screen a une propriété appelée Bounds que vous pouvez utiliser pour déterminer la résolution de l'instance actuelle de la classe. Par exemple, pour déterminer la résolution de l'écran actuel :

Rectangle resolution = Screen.PrimaryScreen.Bounds;

Pour en changeant la résolution, les choses se compliquent un peu plus. Cet article (ou celui-ci ) fournit une mise en œuvre et une explication détaillées. J'espère que cela vous aidera.

1 votes

Merci. C'est très simple. Vous pouvez utiliser les propriétés resolution.Height et resolution.Width avec cette commande.

2 votes

Existe-t-il un moyen non Winforms de faire cela ? Par exemple, quelque chose qui fonctionnerait avec .net core ?

1 votes

J'ai besoin de la résolution de l'écran pour la capture d'écran du bureau. Après le zoom, cela ne fonctionne pas, il renvoie la résolution zoomée, donc l'image est également zoomée. Il existe une méthode pour capturer l'écran actuel dans la fenêtre de zoom.

15voto

Chaithanya Points 99

Ce code fonctionnera parfaitement dans WPF. Vous pouvez l'utiliser soit au chargement de la page, soit au clic sur un bouton.

      string screenWidth =System.Windows.SystemParameters.PrimaryScreenWidth.ToString();

      string screenHeight = System.Windows.SystemParameters.PrimaryScreenHeight.ToString();

      txtResolution.Text ="Resolution : "+screenWidth + " X " + screenHeight;

0 votes

Merci de partager les formulaires de non gain de manière !

11voto

Ak654 Points 125

En C#, voici comment obtenir la résolution Screen :

clic sur un bouton ou chargement d'un formulaire :

string screenWidth = Screen.PrimaryScreen.Bounds.Width.ToString();
string screenHeight = Screen.PrimaryScreen.Bounds.Height.ToString();
Label1.Text = ("Resolution: " + screenWidth + "x" + screenHeight);

0 votes

Très vieille question et réponse - mais cette réponse est maintenant inutile car elle ne décrit pas une solution générale en C#. Je pense qu'il s'agit de winforms, je ne suis pas sûr, mais il existe d'autres frameworks et paquets qui pourraient typiquement être utilisés à la place aujourd'hui. Vraiment, ces vieilles questions doivent être archivées, ou catégorisées en fonction des frameworks spécifiques.

4voto

Sourcephy Points 103

Réponse à partir de différentes solutions pour obtenir la résolution d'affichage

  1. Obtenez le facteur d'échelle

  2. Obtenir Screen.PrimaryScreen.Bounds.Width et Screen.PrimaryScreen.Bounds.Height en les multipliant par le résultat du facteur d'échelle.

    #region Display Resolution
    
     [DllImport("gdi32.dll", CharSet = CharSet.Auto, SetLastError = true, ExactSpelling = true)]
     public static extern int GetDeviceCaps(IntPtr hDC, int nIndex);
    
     public enum DeviceCap
     {
         VERTRES = 10,
         DESKTOPVERTRES = 117
     }
    
     public static double GetWindowsScreenScalingFactor(bool percentage = true)
     {
         //Create Graphics object from the current windows handle
         Graphics GraphicsObject = Graphics.FromHwnd(IntPtr.Zero);
         //Get Handle to the device context associated with this Graphics object
         IntPtr DeviceContextHandle = GraphicsObject.GetHdc();
         //Call GetDeviceCaps with the Handle to retrieve the Screen Height
         int LogicalScreenHeight = GetDeviceCaps(DeviceContextHandle, (int)DeviceCap.VERTRES);
         int PhysicalScreenHeight = GetDeviceCaps(DeviceContextHandle, (int)DeviceCap.DESKTOPVERTRES);
         //Divide the Screen Heights to get the scaling factor and round it to two decimals
         double ScreenScalingFactor = Math.Round(PhysicalScreenHeight / (double)LogicalScreenHeight, 2);
         //If requested as percentage - convert it
         if (percentage)
         {
             ScreenScalingFactor *= 100.0;
         }
         //Release the Handle and Dispose of the GraphicsObject object
         GraphicsObject.ReleaseHdc(DeviceContextHandle);
         GraphicsObject.Dispose();
         //Return the Scaling Factor
         return ScreenScalingFactor;
     }
    
     public static Size GetDisplayResolution()
     {
         var sf = GetWindowsScreenScalingFactor(false);
         var screenWidth = Screen.PrimaryScreen.Bounds.Width * sf;
         var screenHeight = Screen.PrimaryScreen.Bounds.Height * sf;
         return new Size((int)screenWidth, (int)screenHeight);
     }
    
     #endregion

pour vérifier la résolution de l'écran

var size = GetDisplayResolution();
Console.WriteLine("Display Resoluton: " + size.Width + "x" + size.Height);

0 votes

Cette réponse est correcte

0 votes

Comment obtenir le facteur d'échelle d'un écran qui n'est pas l'écran principal ?

0 votes

C'est remarquable ! Cependant, puis-je suggérer quelque chose ? Vous utilisez GetDeviceCaps pour obtenir la hauteur d'écran physique (PhysicalScreenHeight), puis vous faites de même pour obtenir la hauteur d'écran logique (LogicalScreenHeight), vous divisez pour obtenir un rapport, puis vous multipliez par Screen.PrimaryScreen.Bounds ... mais tout ce que vous obtenez est la hauteur d'écran physique (PhysicalScreenHeight) que vous avez déjà demandée à gdi32.dll. Ne pourriez-vous pas simplement l'appeler deux fois, une fois pour PhysicalScreenHeight et une autre pour PhysicalScreenWidth, et en rester là ?

1voto

KeithS Points 36130

Dans Winforms, il existe une classe Screen que vous pouvez utiliser pour obtenir des données sur les dimensions de l'écran et la profondeur des couleurs pour tous les écrans connectés à l'ordinateur. Voici la page de documentation : http://msdn.microsoft.com/en-us/library/system.Windows.forms.screen.aspx

Changer la résolution de l'écran est plus délicat. Il existe une classe tierce Resolution qui englobe le code natif que vous auriez autrement utilisé. Utilisez sa classe imbriquée CResolution pour définir la résolution de l'écran en fonction d'une nouvelle hauteur et d'une nouvelle largeur, mais sachez que cela ne fonctionnera que pour les combinaisons hauteur/largeur réellement prises en charge par l'écran (800x600, 1024x768, etc., et non 817x435).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X