zmagamy się z następującym problemem na laptopy z przełączanymi grafiki (AMD Radeon 7670M + Intel 4000) w naszej aplikacji WPF:
Programowo określić, czy system ma przełączana grafika
D3DImage używamy, aby wyświetlić jakiś film pokazuje tylko czarna ramka. Dzieje się tak tylko wtedy, gdy dyskretna grafika (AMD) jest aktywna dla aplikacji (tryb ustawiony na wysoką wydajność). Z aktywną grafiką Intel (tryb ustawiony na oszczędzanie energii) działa. Wygląda na to, że nie jesteśmy sami z tym problemem. Wyszukiwanie w Google ujawniło następujące posty na forach AMD:
- URGENT: switchable graphics and resources sharing
- D3DImage do not show up when configure the switable graphics to Radeon Adapter
Znalazłem obejście korzystając D3DImage.CopyBackBuffer - wygląda na to Backbuffer rzeczywiście zawiera prawą ramkę - więc spróbuję to wyświetlić.
Ale aby zastosować to obejście tylko wtedy, gdy jest to konieczne, dochodzę do tematu tego pytania: Jak mogę się dowiedzieć, czy system faktycznie ma ma przełączalną grafikę?
Przypuszczam, że może być kilka sposobów korzystania z usługi WMI lub przeglądania rejestru, ale byłbym bardzo zadowolony, gdyby ktoś mógł wskazać mi właściwy kierunek lub nawet podać przykład, jak to zrobić.
Aktualizacja:
Próbowałem EnumDisplayDevices i System.Management.ManagementObjectSearcher. Pierwszy nie zwraca wszystkich urządzeń, podczas gdy drugi to robi. Ale może jest jeszcze lepszy sposób?