Skip to content

Instantly share code, notes, and snippets.

@jonitis
Created May 23, 2018 06:55
Show Gist options
  • Save jonitis/c12ec3bc8a21b62241e17dd7586c0b85 to your computer and use it in GitHub Desktop.
Save jonitis/c12ec3bc8a21b62241e17dd7586c0b85 to your computer and use it in GitHub Desktop.
#include <cstdio>
#include <Windows.h>
static void PrintDisplayDeviceStateFlags(DWORD flags)
{
if (flags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP)
printf(" ATTACHED_TO_DESKTOP\n");
if (flags & DISPLAY_DEVICE_MULTI_DRIVER)
printf(" MULTI_DRIVER\n");
if (flags & DISPLAY_DEVICE_PRIMARY_DEVICE)
printf(" PRIMARY_DEVICE\n");
if (flags & DISPLAY_DEVICE_MIRRORING_DRIVER)
printf(" MIRRORING_DRIVER\n");
if (flags & DISPLAY_DEVICE_VGA_COMPATIBLE)
printf(" VGA_COMPATIBLE\n");
}
static void Win32EnumDisplayDevices()
{
DWORD displayAdapterIndex = 0;
while (true) {
DISPLAY_DEVICE displayAdapter{};
displayAdapter.cb = sizeof(displayAdapter);
const auto adapterOk = EnumDisplayDevices(nullptr, displayAdapterIndex, &displayAdapter, EDD_GET_DEVICE_INTERFACE_NAME);
if (!adapterOk)
break;
printf("Display adapter %u:\n", displayAdapterIndex);
printf(" DeviceName = %ls\n", displayAdapter.DeviceName);
printf(" DeviceString = %ls\n", displayAdapter.DeviceString);
printf(" StateFlags = 0x%08x\n", displayAdapter.StateFlags);
PrintDisplayDeviceStateFlags(displayAdapter.StateFlags);
printf(" DeviceId = %ls\n", displayAdapter.DeviceID);
printf(" DeviceKey = %ls\n", displayAdapter.DeviceKey);
DWORD displayMonitorIndex = 0;
while (true) {
{
DISPLAY_DEVICE displayMonitor{};
displayMonitor.cb = sizeof(displayMonitor);
const auto monitorOk = EnumDisplayDevices(displayAdapter.DeviceName, displayMonitorIndex, &displayMonitor, 0);
if (!monitorOk)
break;
printf(" Display monitor %u:\n", displayMonitorIndex);
printf(" DeviceName = %ls\n", displayMonitor.DeviceName);
printf(" DeviceString = %ls\n", displayMonitor.DeviceString);
printf(" StateFlags = 0x%08x\n", displayMonitor.StateFlags);
PrintDisplayDeviceStateFlags(displayMonitor.StateFlags);
printf(" DeviceId = %ls\n", displayMonitor.DeviceID);
printf(" DeviceKey = %ls\n", displayMonitor.DeviceKey);
}
{
DISPLAY_DEVICE displayMonitor{};
displayMonitor.cb = sizeof(displayMonitor);
const auto monitorOk = EnumDisplayDevices(displayAdapter.DeviceName, displayMonitorIndex, &displayMonitor, EDD_GET_DEVICE_INTERFACE_NAME);
if (!monitorOk)
break;
printf(" DeviceId[DEVICE_INTERFACE_NAME] = %ls\n", displayMonitor.DeviceID);
}
displayMonitorIndex++;
}
displayAdapterIndex++;
}
}
int main()
{
Win32EnumDisplayDevices();
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment