Enumerasi dan Kontrol Tampilan
Untuk menghitung semua perangkat di komputer, panggil fungsi EnumDisplayDevices . Informasi yang dikembalikan juga menunjukkan monitor mana yang merupakan bagian dari desktop.
Untuk menghitung perangkat di desktop yang berpotongan wilayah kliping, panggil EnumDisplayMonitors. Ini mengembalikan handel HMONITOR ke setiap monitor, yang digunakan dengan GetMonitorInfo. Untuk menghitung semua perangkat di layar virtual, gunakan EnumDisplayMonitors. seperti yang ditunjukkan dalam kode berikut:
EnumDisplayMonitors(NULL, NULL, MyInfoEnumProc, 0);
Untuk mendapatkan informasi tentang perangkat tampilan, gunakan EnumDisplaySettings atau EnumDisplaySettingsEx.
Fungsi ChangeDisplaySettingsEx digunakan untuk mengontrol perangkat tampilan di komputer. Ini dapat memodifikasi konfigurasi perangkat, seperti menentukan posisi monitor di desktop virtual dan mengubah kedalaman bit tampilan apa pun. Biasanya, aplikasi tidak menggunakan fungsi ini. Untuk menambahkan monitor tampilan ke sistem multi-monitor secara terprogram, atur DEVMODE.dmFields ke DM_POSITION dan tentukan posisi (menggunakan DEVMODE.dmPosition ) untuk monitor yang Anda tambahkan yang berdekatan dengan setidaknya satu piksel area tampilan monitor yang ada. Untuk melepaskan monitor, atur DEVMODE.dmFields ke DM_POSITION dan atur DEVMODE.dmPelsWidth dan DEVMODE.dmPelsHeight ke nol.
Kode berikut menunjukkan cara melepaskan semua perangkat tampilan sekunder dari desktop:
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
}
Untuk setiap perangkat tampilan, aplikasi dapat menyimpan informasi dalam registri yang menjelaskan parameter konfigurasi untuk perangkat, serta parameter lokasi. Aplikasi ini juga dapat menentukan tampilan mana yang merupakan bagian dari desktop, dan mana yang tidak, melalui bendera DISPLAY_DEVICE_ATTACHED_TO_DESKTOP dalam struktur DISPLAY_DEVICE . Setelah semua informasi konfigurasi disimpan di registri, aplikasi dapat memanggil ChangeDisplaySettingsEx lagi untuk mengubah pengaturan secara dinamis, tanpa perlu menghidupkan ulang.
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk