Comment récupérer la résolution D'écran à partir D'une application c # winform?

Comment puis-je récupérer la résolution d'écran sur laquelle mon application C# Winform s'exécute?

27
demandé sur etoisarobot 2010-03-08 19:16:30

4 réponses

Avez-vous juste besoin de la zone qu'une application standard utiliserait, c'est-à-dire à l'exclusion de la barre des tâches Windows et des fenêtres ancrées? Si c'est le cas, utilisez l'écran .Propriété WorkingArea . Sinon, utilisez l'écran .Limites .

S'il y a plusieurs moniteurs, vous devez cliquer sur l'écran de votre formulaire, c'est à dire

Form myForm;
Screen myScreen = Screen.FromControl(myForm);
Rectangle area = myScreen.WorkingArea;

Si vous voulez savoir quel est l'écran d'affichage principal, utilisez l'écran .Propriété primaire . En outre, vous pouvez obtenir une liste d'écrans de la écran.AllScreens propriété.

66
répondu Paul Williams 2015-08-12 20:58:27

La réponse donnée est correcte, dans la mesure où elle va. Cependant, lorsque vous avez défini la taille de votre texte sur quelque chose de plus de 125%, Windows (et.NET) commencent à fib sur la taille de l'écran afin de faire une mise à l'échelle automatique pour vous.

La plupart du temps, ce n'est pas un problème - vous voulez généralement que Windows et.NET le fassent. Toutefois, dans le cas où vous avez vraiment, vraiment besoin de connaître le nombre réel de pixels sur l'écran (par exemple, vous voulez peindre directement sur le bureau DC), vous pouvez faire le suivant. J'ai seulement essayé cela sur Win10. YMMV sur les autres versions de Windows.

Jusqu'à présent, c'est le seul moyen que j'ai trouvé pour obtenir un vrai nombre de pixels d'écran si vous ne voulez pas désactiver globalement la sensibilisation DPI dans votre application. Notez que cet exemple obtient la taille D'affichage principale-vous devrez la modifier pour obtenir d'autres écrans.

[DllImport("User32.dll")]
static extern IntPtr GetDC(IntPtr hwnd);

[DllImport("User32.dll")]
static extern int ReleaseDC(IntPtr hwnd, IntPtr dc);

[DllImport("gdi32.dll")]
static extern int GetDeviceCaps(IntPtr hdc, int nIndex);

IntPtr primary = GetDC(IntPtr.Zero);
int DESKTOPVERTRES = 117;
int DESKTOPHORZRES = 118;
int actualPixelsX = GetDeviceCaps(primary, DESKTOPHORZRES);
int actualPixelsY = GetDeviceCaps(primary, DESKTOPVERTRES);
ReleaseDC(IntPtr.Zero, primary);
6
répondu entiat 2016-02-12 22:09:05

Utilisez la classe Screen et interrogez la propriété Bounds . L'Écran classe a une propriété statique pour Écran Principal, et une autre propriété statique qui retourne une liste de tous les écrans connectés au système.

4
répondu Nick 2010-03-08 16:23:13
Screen.PrimaryScreen.WorkingArea.Size()
-1
répondu Ami Rez 2016-12-16 18:32:57