Using the Low-Level Monitor Configuration Functions

Before using the low-level monitor configuration functions, you should be familiar with these standards:

  • Display Data Channel Command Interface (DDC/CI)
  • VESA Monitor Control Command Set (MCCS)

The low-level functions work by getting and setting the values of Virtual Control Panel (VCP) codes. A VCP code can be continuous or noncontinuous. Continuous codes can assume any value between zero and a vendor-specific maximum value. Noncontinuous codes support a defined set of values, which is also specific to the vendor.

To use the low-level monitor configuration functions, perform the following steps:

  1. Obtain an HMONITOR handle by calling EnumDisplayMonitors or MonitorFromWindow.
  2. Call GetNumberOfPhysicalMonitorsFromHMONITOR to get the number of physical monitors associated with the HMONITOR handle.
  3. Call GetPhysicalMonitorsFromHMONITOR to get a list of handles to the physical monitors.
  4. Call GetCapabilitiesStringLength to get the length of a monitor's DDC/CI capabilities string. The capabilities string is an ASCII string that contains static information about the monitor. One part of the string lists the VCP codes that the monitor supports. The string also lists the supported values of the noncontinuous VCP codes.
  5. Allocate a buffer to hold the capabilities string and call CapabilitiesRequestAndCapabilitiesReply to get the string.
  6. Parse the capabilities string to determine which VCP codes the monitor supports.
  7. For a continuous VCP code, call GetVCPFeatureAndVCPFeatureReply to get the current and maximum values of the code. For a noncontinuous VCP code, parse the capabilities string to get the supported values.
  8. Call SetVCPFeature to set a new value for a VCP code.

Using Monitor Configuration