Comment puis-je collecter et modifier la résolution de l'écran en utilisant Visual C# ?
Merci. C'est très simple. Vous pouvez utiliser les propriétés resolution.Height et resolution.Width avec cette commande.
Comment puis-je collecter et modifier la résolution de l'écran en utilisant Visual C# ?
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.
Merci. C'est très simple. Vous pouvez utiliser les propriétés resolution.Height et resolution.Width avec cette commande.
Existe-t-il un moyen non Winforms de faire cela ? Par exemple, quelque chose qui fonctionnerait avec .net core ?
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;
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);
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.
Réponse à partir de différentes solutions pour obtenir la résolution d'affichage
Obtenez le facteur d'échelle
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);
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à ?
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 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.
5 votes
Avez-vous vu cet article de codeproject ?
1 votes
@Justin : Ajoutez SystemInformation.PrimaryMonitorSize au mélange et postez-le comme réponse.