25 Şubat 2020 Salı

EnumDisplaySettings metodu - Belirtilen Ekranın Ayarlarını Okur

Giriş
Belirtilen ekranın ayarlarını DEVMODE yapısına doldurur. Açıklaması şöyle
Monitors are sending EDID data which contains some information about the display, including its physical dimensions.
Örnek
Ayarları okuyup değiştirmek için şöyle yaparız
#include <windows.h>

int main()
{
  for (DWORD devNum = 0; ; devNum++)
  {
    DISPLAY_DEVICE dev = {0};
    dev.cb = sizeof(DISPLAY_DEVICE);

    if (!EnumDisplayDevices(NULL, devNum, &dev, EDD_GET_DEVICE_INTERFACE_NAME))
      break;

    wprintf(L"Display name: %s \n", dev.DeviceName);

    DEVMODE dMode = { 0 };
    dMode.dmSize = sizeof(dMode);

    if (!EnumDisplaySettings(dev.DeviceName, ENUM_CURRENT_SETTINGS, &dMode))
    {
      wprintf(L"EnumDisplaySettings error: %d \n", GetLastError());
      continue;
    }
    wprintf(L"Display old settings: \n");
    wprintf(L"dmBitsPerPel: %d \n", dMode.dmBitsPerPel);
    wprintf(L"dmPelsWidth: %d \n", dMode.dmPelsWidth);
    wprintf(L"dmPelsHeight: %d \n", dMode.dmPelsHeight);
    wprintf(L"dmDisplayFlags: %x \n", dMode.dmDisplayFlags);
    wprintf(L"dmDisplayFrequency: %d \n", dMode.dmDisplayFrequency);

    dMode.dmPelsWidth = 800;
    dMode.dmPelsHeight = 600;
    ChangeDisplaySettingsEx(dev.DeviceName, &dMode, NULL, 0, NULL);
    ...
  }

  getchar();
}
Daha sonra yeni ayarları yazdırmak için şöyle yaparız
#include <windows.h>

int main()
{
  for (DWORD devNum = 0; ; devNum++)
  {
    ...
    DEVMODE dModeNew = { 0 };
    dModeNew.dmSize = sizeof(DEVMODE);
    if (!EnumDisplaySettings(dev.DeviceName, ENUM_CURRENT_SETTINGS, &dModeNew))
    {
      wprintf(L"EnumDisplaySettings error: %d \n", GetLastError());
      continue;
    }

    wprintf(L"Display new settings: \n");
    wprintf(L"dmBitsPerPel: %d \n", dModeNew.dmBitsPerPel);
    wprintf(L"dmPelsWidth: %d \n", dModeNew.dmPelsWidth);
    wprintf(L"dmPelsHeight: %d \n", dModeNew.dmPelsHeight);
    wprintf(L"dmDisplayFlags: %x \n", dModeNew.dmDisplayFlags);
    wprintf(L"dmDisplayFrequency: %d \n", dModeNew.dmDisplayFrequency);

  }

  getchar();
}

Hiç yorum yok:

Yorum Gönder