2012-04-02 10 views
0

Ich habe einen Desktop-PC mit einer Auflösung von 2560 x 1440 und ein Netbook mit einer Auflösung von 1024 x 600.Screen.AllScreens ändert sich nicht beim Verbinden mit RDP

Wenn ich RDP-Verbindung mit dem Netbook auf dem Desktop, wird der Bildschirm des Desktops in 1024x600 präsentiert, da das Netbook nicht mehr erlaubt. Also, es gibt einige Skalierung der Fenster, und eine Art "virtueller Bildschirm" hat gerade seine Größe von 2560x1440 zu 1024x600 geändert.

jedoch die System.Windows.Forms.Screen.AllScreens Eigenschaft nicht über diese Änderung widerzuspiegeln, seine einzelnen Array-Element bei 2560 bleibt x 1440.

Wie kann ich die ‚virtuelle Bildschirmgröße ändern‘ in .NET erkennen, WinForms oder WPF?

Danke

Edit:

ich vergaß zu sagen, die AllScreens Eigenschaft ändert seinen Wert, wenn ich in Visual Studio debuggen (mit dem vshost.exe Host EXE), aber sobald ich Wenn Sie das Programm ohne Debugger ausführen, spiegelt die AllScreens-Eigenschaft die Änderung der Bildschirmgröße nicht wider.

Antwort

1

konnte ich die Bildschirmauflösung ändert sich von sowohl dem Desktop-Computer und von einem entfernten Laptop eine Verbindung über Remote-Desktop sowie mit ihm die richtige Auflösung Zahlen durch die folgende Technik berichten erkennen:

Ich habe gerade eine Probe WinForms Programm, das dieses Ereignis behandelt:

Microsoft.Win32.SystemEvents.DisplaySettingsChanged += 
    SystemEvents_DisplaySettingsChanged; 

In meinem Test habe ich ein Listenfeld, das die Informationen angezeigt, wenn der Bildschirm geändert:

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

Ich lief das Programm im Freigabemodus außerhalb des Debuggers auf meinem Desktop und dann von meinem Laptop mit niedrigerer Auflösung verbunden und die Nummern geändert, um die niedrigere Auflösung zu reflektieren.