Как получить разрешение экрана из приложения Winform C #? - PullRequest
30 голосов
/ 08 марта 2010

Как узнать разрешение экрана, на котором запущено мое приложение C # Winform?

Ответы [ 4 ]

70 голосов
/ 08 марта 2010

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

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

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

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

7 голосов
/ 13 февраля 2016

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

В большинстве случаев это не проблема - обычно вы хотите, чтобы Windows и .NET это делали. Однако в том случае, когда вам действительно необходимо знать фактическое количество пикселей на экране (например, вы хотите рисовать непосредственно на настольном компьютере), вы можете сделать следующее. Я только попробовал это на 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 голосов
/ 08 марта 2010

Используйте класс Screen и запросите свойство Bounds . Класс Screen имеет статическое свойство для Основной экран и другое статическое свойство, которое возвращает список всех экранов, подключенных к системе .

0 голосов
/ 12 июня 2015
Screen.PrimaryScreen.WorkingArea.Size()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...