Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Chcete-li zobrazit výčet všech zařízení v počítači, zavolejte funkci EnumDisplayDevices. Vrácené informace také označují, který monitor je součástí plochy.
Chcete-li vytvořit výčet zařízení na ploše, která protínají oblast výřezu, zavolejte EnumDisplayMonitors. Tím se vrátí popisovač HMONITOR pro každý monitor, který se používá s GetMonitorInfo. Chcete-li zobrazit výčet všech zařízení na virtuální obrazovce, použijte EnumDisplayMonitors. jak je znázorněno v následujícím kódu:
EnumDisplayMonitors(NULL, NULL, MyInfoEnumProc, 0);
Chcete-li získat informace o zobrazovacím zařízení, použijte EnumDisplaySettings nebo EnumDisplaySettingsEx.
Funkce ChangeDisplaySettingsEx slouží k řízení zobrazovaných zařízení v počítači. Může upravit konfiguraci zařízení, například určit umístění monitoru na virtuální ploše a změnit bitovou hloubku libovolného displeje. Aplikace tuto funkci obvykle nepoužívá. Chcete-li přidat monitor zobrazení do systému s více monitory programově, nastavte DEVMODE.dmFields na DM_POSITION a zadejte pozici (pomocí DEVMODE.dmPosition) pro monitor, který přidáváte, který sousedí s alespoň jedním pixelem oblasti zobrazení existujícího monitoru. Pokud chcete monitorování odpojit, nastavte DEVMODE.dmFields na DM_POSITION a nastavte DEVMODE.dmPelsWidth a DEVMODE.dmPelsHeight na nulu.
Následující kód ukazuje, jak odpojit všechna sekundární zařízení zobrazení z plochy:
void DetachDisplay()
{
BOOL FoundSecondaryDisp = FALSE;
DWORD DispNum = 0;
DISPLAY_DEVICE DisplayDevice;
LONG Result;
TCHAR szTemp[200];
int i = 0;
DEVMODE defaultMode;
// initialize DisplayDevice
ZeroMemory(&DisplayDevice, sizeof(DisplayDevice));
DisplayDevice.cb = sizeof(DisplayDevice);
// get all display devices
while (EnumDisplayDevices(NULL, DispNum, &DisplayDevice, 0))
{
ZeroMemory(&defaultMode, sizeof(DEVMODE));
defaultMode.dmSize = sizeof(DEVMODE);
if ( !EnumDisplaySettings((LPSTR)DisplayDevice.DeviceName, ENUM_REGISTRY_SETTINGS, &defaultMode) )
OutputDebugString("Store default failed\n");
if ((DisplayDevice.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP) &&
!(DisplayDevice.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE))
{
DEVMODE DevMode;
ZeroMemory(&DevMode, sizeof(DevMode));
DevMode.dmSize = sizeof(DevMode);
DevMode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL | DM_POSITION
| DM_DISPLAYFREQUENCY | DM_DISPLAYFLAGS ;
Result = ChangeDisplaySettingsEx((LPSTR)DisplayDevice.DeviceName,
&DevMode,
NULL,
CDS_UPDATEREGISTRY,
NULL);
//The code below shows how to re-attach the secondary displays to the desktop
//ChangeDisplaySettingsEx((LPSTR)DisplayDevice.DeviceName,
// &defaultMode,
// NULL,
// CDS_UPDATEREGISTRY,
// NULL);
}
// Reinit DisplayDevice just to be extra clean
ZeroMemory(&DisplayDevice, sizeof(DisplayDevice));
DisplayDevice.cb = sizeof(DisplayDevice);
DispNum++;
} // end while for all display devices
}
Pro každé zobrazovací zařízení může aplikace ukládat informace v registru, které popisují parametry konfigurace zařízení a také parametry umístění. Aplikace může také určit, která zobrazení jsou součástí plochy a které nejsou, prostřednictvím příznaku DISPLAY_DEVICE_ATTACHED_TO_DESKTOP ve struktuře DISPLAY_DEVICE. Jakmile jsou všechny informace o konfiguraci uloženy v registru, může aplikace volat ChangeDisplaySettingsEx dynamicky měnit nastavení bez nutnosti restartování.