通过RDP连接时,Screen.AllScreens不会更改

时间:2012-04-02 08:06:48

标签: wpf winforms screen remote-desktop rdp

我的台式电脑分辨率为2560 x 1440,分辨率为1024 x 600的上网本。

当我通过RDP连接上网本到桌面时,桌面屏幕以1024x600显示,因为上网本不允许更多。因此,有一些窗口的重新缩放,某种“虚拟屏幕”只是将其大小从2560x1440改为1024x600。

但是,System.Windows.Forms.Screen.AllScreens属性未反映此更改,其单个数组项目保持在2560 x 1440.

如何使用WinForms或WPF检测.NET中的“虚拟屏幕大小更改”?

谢谢

修改

我忘了说,当我在Visual Studio中调试(使用vshost.exe主机EXE)时,AllScreens属性会更改其值,但是一旦我在没有调试器的情况下运行程序,{{1属性不反映屏幕大小的变化。

1 个答案:

答案 0 :(得分:1)

我能够通过桌面计算机和通过远程桌面连接的远程笔记本电脑检测屏幕分辨率变化,并通过以下技术报告正确的分辨率数字:

我刚刚创建了一个处理此事件的示例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());
    }
}

我在桌面上的调试器外部以发布模式运行程序,然后从我的低分辨率笔记本电脑连接,数字改变以反映较低的分辨率。