public static void TestCCDExampleCode(CCD.QueryDisplayFlags queryDisplayFlags) { int resultCode; int numPathArrayElements; int numModeInfoArrayElements; // Get buffer size required to enumerate all valid paths. resultCode = CCD.GetDisplayConfigBufferSizes(queryDisplayFlags, out numPathArrayElements, out numModeInfoArrayElements); Win32Utilities.ThrowIfResultCodeNotSuccess(resultCode); CCD.DisplayConfigPathInfo[] pathInfoArray = new CCD.DisplayConfigPathInfo[numPathArrayElements]; CCD.DisplayConfigModeInfo[] modeInfoArray = new CCD.DisplayConfigModeInfo[numModeInfoArrayElements]; resultCode = CCD.QueryDisplayConfig( queryDisplayFlags, ref numPathArrayElements, pathInfoArray, ref numModeInfoArrayElements, modeInfoArray, IntPtr.Zero); Win32Utilities.ThrowIfResultCodeNotSuccess(resultCode); foreach (CCD.DisplayConfigPathInfo configPathInfo in pathInfoArray) { ConsoleOutputUtilities.WriteDisplayConfigPathInfoToConsole(configPathInfo); Console.WriteLine(); } foreach (CCD.DisplayConfigModeInfo configModeInfo in modeInfoArray) { ConsoleOutputUtilities.WriteDisplayConfigModeInfoToConsole(configModeInfo); Console.WriteLine(); } // Find and store the primary path based by looking for an active path that is located at desktop position // 0,0 CCD.DisplayConfigPathInfo primaryPath = new CCD.DisplayConfigPathInfo(); bool primaryPathFound = false; foreach (CCD.DisplayConfigPathInfo configPathInfo in pathInfoArray) { if ((configPathInfo.flags & (uint)CCD.DisplayConfigFlags.PathActive) > 0) { if (configPathInfo.sourceInfo.modeInfoIdx > modeInfoArray.Length - 1) { throw new Exception("Config Path Info Source Mode Info Index is out of range."); } CCD.DisplayConfigModeInfo modeInfo = modeInfoArray[configPathInfo.sourceInfo.modeInfoIdx]; if (modeInfo.infoType == CCD.DisplayConfigModeInfoType.Source && modeInfo.sourceMode.position.x == 0 && modeInfo.sourceMode.position.y == 0) { // Bingo primaryPath = configPathInfo; primaryPathFound = true; break; } } } if (!primaryPathFound) { throw new Exception("Failed to find primary display path!"); } CCD.DisplayConfigTargetDeviceName dcTargetDeviceName = new CCD.DisplayConfigTargetDeviceName(); dcTargetDeviceName.header.type = CCD.DisplayConfigDeviceInfoType.GetTargetName; dcTargetDeviceName.header.size = (uint)Marshal.SizeOf(dcTargetDeviceName); dcTargetDeviceName.header.adapterId = primaryPath.targetInfo.adapterId; dcTargetDeviceName.header.id = primaryPath.targetInfo.id; resultCode = CCD.DisplayConfigGetDeviceInfo(ref dcTargetDeviceName); Win32Utilities.ThrowIfResultCodeNotSuccess(resultCode); ConsoleOutputUtilities.WriteDisplayConfigTargetDeviceNameToConsole(dcTargetDeviceName); Console.WriteLine(); CCD.DisplayConfigSourceDeviceName dcSourceDeviceName = new CCD.DisplayConfigSourceDeviceName(); dcSourceDeviceName.header.type = CCD.DisplayConfigDeviceInfoType.GetSourceName; dcSourceDeviceName.header.size = (uint)Marshal.SizeOf(dcSourceDeviceName); dcSourceDeviceName.header.adapterId = primaryPath.sourceInfo.adapterId; dcSourceDeviceName.header.id = primaryPath.sourceInfo.id; resultCode = CCD.DisplayConfigGetDeviceInfo(ref dcSourceDeviceName); Win32Utilities.ThrowIfResultCodeNotSuccess(resultCode); ConsoleOutputUtilities.WriteDisplayConfigSourceDeviceNameToConsole(dcSourceDeviceName); CCD.DisplayConfigAdapterName dcAdapterName = new CCD.DisplayConfigAdapterName(); dcAdapterName.header.type = CCD.DisplayConfigDeviceInfoType.GetAdapterName; dcAdapterName.header.size = (uint)Marshal.SizeOf(dcAdapterName); dcAdapterName.header.adapterId = primaryPath.sourceInfo.adapterId; Win32Utilities.ThrowIfResultCodeNotSuccess( CCD.DisplayConfigGetDeviceInfo(ref dcAdapterName)); ConsoleOutputUtilities.WriteDisplayConfigAdapterNameToConsole(dcAdapterName); CCD.DisplayConfigTargetPreferredMode dcTargetPreferredMode = new CCD.DisplayConfigTargetPreferredMode(); dcTargetPreferredMode.header.type = CCD.DisplayConfigDeviceInfoType.GetTargetPreferredMode; dcTargetPreferredMode.header.size = (uint)Marshal.SizeOf(dcTargetPreferredMode); dcTargetPreferredMode.header.adapterId = primaryPath.targetInfo.adapterId; dcTargetPreferredMode.header.id = primaryPath.targetInfo.id; Win32Utilities.ThrowIfResultCodeNotSuccess(CCD.DisplayConfigGetDeviceInfo(ref dcTargetPreferredMode)); }
static public void WriteDisplayConfigSourceDeviceNameToConsole(CCD.DisplayConfigSourceDeviceName sourceDeviceName) { WriteDisplayConfigDeviceInfoHeader(sourceDeviceName.header); Console.WriteLine("GDI Device Name: " + sourceDeviceName.viewGdiDeviceName); }