2012-04-02 58 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()); 
    } 
} 

我在桌面上的調試器外部以釋放模式運行程序,然後從我的較低分辨率筆記本電腦上連接,並且數字發生變化以反映較低的分辨率。