Szukasz niezawodnego mapowania Forms.Screen.DeviceName do monitorowania informacji EDID

Opracowuję aplikację, która wyświetla informacje pochodzące z bloków EDID (model monitora, ID, S / N itd.) W oknie dialogowym na odpowiednim monitorze.

Ten kod działa w celu znalezienia informacji EDID dla wyświetlaczy. Wyodrębnia informacje EDID, wyliczając klawisze DISPLAY poniżejHKLM SYSTEM CurrentControlSet Enum DISPLAY [Monitor] [PnPID] Parametry urządzenia EDID.

Aktualizacja: Powyższy kod polega na „skutkach ubocznych” korzystania z rejestru przez PnP. Używam terazSetupAPI wyliczyć monitory, które poprawnie obsługują dołączane / usuwane monitory (w przeciwieństwie do kodu z powyższego linku).

Próbuję skorelować każdy ekran w Windows.Forms.Screen.AllScreens [] (DISPLAY1, DISPLAY2 itp.) Z wpisami zwróconymi z powyższej kontroli rejestru.

Uwaga: W poniższym bloku kodu DisplayDetails.GetMonitorDetails () został teraz zastąpiony bardziej niezawodnym kodem wyliczania rejestru przy użyciu SetupAPI, ale zwracane dane są takie same.

na przykład

<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>
Wydajność:

Info: Model: DELL P2411H, MonitorID: DELA06E, PnPID: 5 i 2e2fefea & 0 i UID1078018, Numer seryjny: F8NDP0C ... PU

Czy ma to związek z ekranem: DISPLAY1?

Info: Model: DELL P2411H, MonitorID: DELA06E, PnPID: 5 i 2e2fefea & 0 i UID1078019, Numer seryjny: F8NDP0C ... AU

Czy koreluje to z ekranem: DISPLAY2?

Odpowiedź: NIE

W testach odkryłem, że nie są one niezawodnie skorelowane (mam system, w którym pierwszy wyliczony ekran to: DISPLAY2).

Moje pytanie:Czy istnieje sposób na wiarygodne uzyskanie informacji EDID dla danego formularza Forms.Screen? Mogę pobrać blok EDID, ale nie znalazłem ścieżki do skorelowania tego z formularzem najwyższego poziomu interfejsu użytkownika. Monitowanie użytkownika jest niepożądane, ponieważ w moim przypadku użycia dwa (lub więcej) monitory będą prawdopodobnie tego samego modelu i rozdzielczości, a różnią się tylko kilkoma cyframi na S / N.

Szukałem ścieżek następujących po API Forms.Screen, Win32 EnumDisplay, innych identyfikatorach GUID rejestru (PnP i związanych ze sterownikami), ale nie znalazłem żadnych obiecujących ścieżek.

Zbadałem również interfejs API WMI Win32_DesktopMonitor (Windows 7), jednak wydaje się, że nie ma żadnych dodatkowych informacji, które pomogłyby mi skorelować go z wpisami Windows.Forms.Screen.AllScreens [].

Podejrzewam, że jeśli istnieje sposób, aby to zrobić, to jest to przez SetupAPI, ale jeszcze go nie znalazłem.

questionAnswers(1)

yourAnswerToTheQuestion