Screen.AllScreens не меняется при подключении по RDP - PullRequest
0 голосов
/ 02 апреля 2012

У меня есть настольный ПК с разрешением 2560 x 1440 и нетбук с разрешением 1024 x 600.

Когда я подключаю RDP-соединение с нетбуком к рабочему столу, экран рабочего стола представляется в разрешении 1024х600, поскольку нетбук не позволяет больше. Таким образом, происходит некоторое изменение масштаба окон, и какой-то «виртуальный экран» только что изменил свой размер с 2560x1440 до 1024x600.

Однако свойство System.Windows.Forms.Screen.AllScreens не отражает это изменение, его отдельный элемент массива остается равным 2560 x 1440.

Как я могу обнаружить «изменение размера виртуального экрана» в .NET, используя WinForms или WPF?

Спасибо

Изменить:

Я забыл сказать, что свойство AllScreens меняет свое значение при отладке в Visual Studio (с EXE-файлом хоста vshost.exe), но как только я запускаю программу без отладчика, свойство AllScreens делает не отражает изменение размера экрана.

1 Ответ

1 голос
/ 03 апреля 2012

Мне удалось обнаружить изменения разрешения экрана как на настольном компьютере, так и на удаленном ноутбуке, подключающемся через удаленный рабочий стол, а также заставить его сообщать правильные значения разрешения следующим способом:

Я только что создалпример программы WinForms, которая обрабатывает это событие:

Microsoft.Win32.SystemEvents.DisplaySettingsChanged += 
     SystemEvents_DisplaySettingsChanged;

В моем тесте у меня был список, в котором отображалась информация при изменении экрана:

void SystemEvents_DisplaySettingsChanged(object sender, EventArgs e)
{
    foreach (var screen in System.Windows.Forms.Screen.AllScreens)
    {
        listBox1.Items.Add("Device Name: " + screen.DeviceName);
        listBox1.Items.Add("Bounds: " +
            screen.Bounds.ToString());
        listBox1.Items.Add("Type: " +
            screen.GetType().ToString());
        listBox1.Items.Add("Working Area: " +
            screen.WorkingArea.ToString());
        listBox1.Items.Add("Primary Screen: " +
            screen.Primary.ToString());
    }
}

Я запустил программу в режиме выпуска за пределамиотладчик на моем рабочем столе, а затем подключился к ноутбуку с более низким разрешением, и цифры изменились, чтобы отразить более низкое разрешение.

...