Подтвердить что ты не робот

Как получить разрешение экрана из приложения winform С#?

Как я могу получить разрешение экрана, на котором работает мое приложение С# Winform?

4b9b3361

Ответ 1

Вам нужна только область, которую будет использовать стандартное приложение, т.е. исключая панель задач Windows и стыковочные окна? Если это так, используйте свойство Screen.WorkingArea. В противном случае используйте Screen.Bounds.

Если есть несколько мониторов, вам нужно захватить экран из вашей формы, т.е.

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

Если вы хотите узнать, что является основным экраном экрана, используйте свойство Screen.Primary. Кроме того, вы можете получить список экранов из свойства Screen.AllScreens.

Ответ 2

Данный ответ правильный, насколько это возможно. Однако, когда вы установили размер текста на что-либо более 125%, Windows (и .NET) начнет выводить размер экрана, чтобы сделать автомасштабирование для вас.

В большинстве случаев это не проблема. Обычно вы хотите, чтобы Windows и .NET это делали. Однако в случае, когда вам действительно нужно знать фактическое количество пикселей на экране (скажем, вы хотите рисовать непосредственно на рабочем столе DC), вы можете сделать следующее. Я только пробовал это на Win10. YMMV в других версиях Windows.

До сих пор это единственный способ получить истинное количество пикселов экрана, если вы не хотите, чтобы глобально отключить понимание DPI в приложении. Обратите внимание, что этот пример получает размер первичного дисплея - вам нужно будет изменить его, чтобы получить другие экраны.

[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);

Ответ 4

Screen.PrimaryScreen.WorkingArea.Size()