System.Windows.Forms.Screen.DeviceName gibt Müll unter Windows XP

8

Mein 3.5 .NET Framework-Programm verarbeitet mehrere Monitore, daher verwende ich Screen.DeviceName , um zwischen verschiedenen Monitoren zu unterscheiden (kann nicht nur Referenzen auf die Instanzen des Screen -Objekts vergleichen - verschiedene Instanzen können auf denselben Bildschirm verweisen).

Das Programm funktioniert unter Windows 7 kein Problem, aber unter Windows XP SP3 mit allen installierten .NET Frameworks würde es nach dem Zufallsprinzip seltsame Dinge tun, als würde es nicht erkennen, dass die beiden gegebenen Bildschirme tatsächlich der gleiche Bildschirm sind sollte in der Lage sein zu erkennen, wie sie identische DeviceName s haben sollten.

Was ist das Problem und wie behebe ich es?

    
GSerg 07.09.2012, 14:16
quelle

1 Antwort

13

Es scheint irgendwo im Framework oder in Windows XP einen Fehler zu geben.

Wenn Sie ein Screen.DeviceName unter Windows 7 ablegen, erhalten Sie etwas wie

%Vor%

Wenn Sie jedoch unter Windows XP dasselbe tun, erhalten Sie etwas wie

%Vor%

Anscheinend ist Microsoft auf den Fehler aufmerksam geworden, also haben sie eine Notiz in den Dokumentation :

  

Diese Zeichenfolge enthält möglicherweise nicht druckbare Zeichen.

Und das wäre vollkommen in Ordnung, wenn die nicht druckbaren Zeichen jedes Mal gleich wären.
Aber sie sind nicht , weil sie in Wirklichkeit Müll sind, zufälliger Speicherinhalt, der danach geht das abschließende Nullzeichen.

Wenn Sie nur eine zwischengespeicherte Instanz des Objekts Screen erstellen und die Eigenschaft DeviceName mehrere Male aufrufen, ist der Müll jedes Mal gleich, weil das Objekt Screen den Namen selbst zwischenspeichert. Wenn Sie jedoch für jede Anfrage eine neue Instanz des Objekts Screen erstellen, ist der Müll wahrscheinlich für diese Instanzen unterschiedlich, auch wenn sie sich auf dasselbe Gerät beziehen:

%Vor%

Wenn Sie dieses Snippet unter Windows XP ausführen, erhalten Sie Folgendes:

Beachten Sie, dass Sie hier mindestens drei Versionen von DeviceName haben.

Unter Windows 7 hingegen wird der Müll-Teil entfernt.

Aus diesem Grund erkennt der Code Bildschirme nicht - die Gerätenamen sind jedes Mal anders.

Um das zu beheben, beschneiden Sie die Zeichenfolge DeviceName nach dem ersten Zeichen '%code%' .

    
GSerg 07.09.2012, 14:18
quelle

Tags und Links