Suchen Sie nach einer zuverlässigen Zuordnung von Forms.Screen.DeviceName zum Überwachen von EDID-Informationen

Ich entwickle eine Anwendung, die Informationen aus den EDID-Blöcken (Monitormodell, ID, S / N usw.) in einem Dialogfeld auf dem entsprechenden Monitor anzeigt.

Dieser Code Ermittelt die EDID-Informationen für Displays. Es extrahiert die EDID-Informationen durch Auflisten der DISPLAY-Tasten unterHKLM \ SYSTEM \ CurrentControlSet \ Enum \ DISPLAY \ [Monitor] \ [PnPID] \ Geräteparameter \ EDID.

Aktualisieren: Der obige Code beruht auf "Nebenwirkungen" der PnP-Nutzung der Registrierung. Ich benutze jetzt dieSetupAPI um Monitore aufzulisten, die das Anschließen / Entfernen von Monitoren korrekt handhaben (im Gegensatz zum Code aus dem obigen Link).

Ich versuche, jeden Bildschirm in Windows.Forms.Screen.AllScreens [] (\\. \ DISPLAY1, \\. \ DISPLAY2 usw.) mit den Einträgen zu korrelieren, die von der obigen Registrierungsprüfung zurückgegeben wurden.

Hinweis: Im folgenden Codeblock wurde DisplayDetails.GetMonitorDetails () jetzt mit dem SetupAPI durch stabileren Registrierungs-Enumerationscode ersetzt, die zurückgegebenen Daten sind jedoch dieselben.

z.B.

<code>private void Form1_Load(object sender, EventArgs e)
{
    Console.WriteLine("Polling displays on {0}:", System.Environment.MachineName);
    int i = 0;
    foreach ( DisplayDetails dd in DisplayDetails.GetMonitorDetails())
    {
        Console.WriteLine( "Info: Model: {0}, MonitorID: {1}, PnPID: {2}, Serial#:{3}", dd.Model, dd.MonitorID, dd.PnPID, dd.SerialNumber );
        Console.WriteLine( "Does this correlate to Screen: {0}?", Screen.AllScreens[i++].DeviceName );
    }
}
</code>
Ausgabe:

Info: Modell: DELL P2411H, Monitor-ID: DELA06E, PnPID: 5 & 2e2fefea & 0 & UID1078018, Seriennummer: F8NDP0C ... PU

Entspricht dies Bildschirm: \\. \ DISPLAY1?

Info: Modell: DELL P2411H, Monitor-ID: DELA06E, PnPID: 5 & 2e2fefea & 0 & UID1078019, Seriennummer: F8NDP0C ... AU

Entspricht dies Bildschirm: \\. \ DISPLAY2?

Antwort: NEIN

Beim Testen habe ich festgestellt, dass diese nicht zuverlässig korrelieren (ich habe ein System, bei dem die erste aufgeführte Anzeige \\. \ DISPLAY2 ist).

Meine Frage:Gibt es eine Möglichkeit, die EDID-Informationen für einen bestimmten Forms.Screen zuverlässig abzurufen? Ich kann den EDID-Block abrufen, habe jedoch keinen Pfad gefunden, der dies mit dem Formular der obersten Ebene der Benutzeroberfläche in Verbindung bringt. Es ist unerwünscht, den Benutzer zur Eingabe aufzufordern, da in meinem Anwendungsfall die beiden (oder mehr) Monitore wahrscheinlich dasselbe Modell und dieselbe Auflösung aufweisen und sich in der S / N nur um einige Ziffern unterscheiden.

Ich habe nach Pfaden gesucht, die der Forms.Screen-API, Win32 EnumDisplay und anderen Registrierungs-GUIDs (PnP und treiberbezogen) folgen, habe aber keine vielversprechenden Pfade gefunden.

Ich habe auch die WMI Win32_DesktopMonitor-API (Windows 7) untersucht, es scheinen jedoch keine weiteren Informationen vorhanden zu sein, die mir helfen könnten, sie mit den Einträgen in Windows.Forms.Screen.AllScreens [] zu korrelieren.

Ich vermute, wenn es eine Möglichkeit gibt, dies zu tun, ist es durch die SetupAPI, aber ich habe es noch nicht gefunden.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage