2012-04-02 47 views
0

我有一台分辨率为2560 x 1440的台式电脑和1024 x 600分辨率的上网本。通过RDP连接时Screen.AllScreens不会改变

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

然而,System.Windows.Forms.Screen.AllScreens属性不会反映这种变化,它的单个阵列项目保持在2560 X 1440

如何检测.NET中的“虚拟屏幕尺寸的变化”,使用的WinForms或WPF?

谢谢

编辑:

我忘了说,当我在Visual Studio调试(与vshost.exe主机EXE)的AllScreens属性改变其价值,但只要我在没有调试器的情况下运行程序,AllScreens属性不反映屏幕大小的变化。

回答

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()); 
    } 
} 

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