////////////////////////////////////////////////////////////////////////// // Display_Settings // by Teodor Tomic aka ch!ckuaua, February 9., 2003. // // This program enums and tests display settings for the current display // and prints them out to the console // #include #include #include int main ( void ) { DEVMODE dm; // The structure needed to hold the settings data int i=0; // Index value that specifies the graphics mode for // which information is to be obtained. LONG result; // Holds the ChangeDisplaySettings() result ////////////////////////////////////////////////////////////////////////// // Takeout from the Win32 SDK: /* BOOL EnumDisplaySettings( LPCTSTR lpszDeviceName, // specifies the display device DWORD iModeNum, // specifies the graphics mode LPDEVMODE lpDevMode // points to structure to receive settings ); lpszDeviceName Windows 95: lpszDeviceName must be NULL. iModeNum Graphics mode indexes start at zero. To obtain information for all of a display device's graphics modes, make a series of calls to EnumDisplaySettings, as follows: Set iModeNum to zero for the first call, and increment iModeNum by one for each subsequent call. Continue calling the function until the return value is FALSE. When you call EnumDisplaySettings with iModeNum set to zero, the operating system initializes and caches information about the display device. When you call EnumDisplaySettings with iModeNum set to a non-zero value, the function returns the information that was cached the last time the function was called with iModeNum set to zero. ... lpDevMode The EnumDisplaySettings function sets values for the following five DEVMODE members: dmBitsPerPel dmPelsWidth dmPelsHeight dmDisplayFlags dmDisplayFrequency */ i = 0; while ( EnumDisplaySettings(NULL,i++, &dm ) ) { ////////////////////////////////////////////////////////////////////////// // Print out some information // printf ( "%s v%d.%d > %dx%dx%d @ %dHz ... ", dm.dmDeviceName, // Device name LOBYTE(dm.dmDriverVersion), // Major driver version HIBYTE(dm.dmDriverVersion), // Minor driver version dm.dmPelsWidth, // X size dm.dmPelsHeight, // Y size dm.dmBitsPerPel, // Bpp dm.dmDisplayFrequency ); // Frequency ////////////////////////////////////////////////////////////////////////// // Test the display settings ////////////////////////////////////////////////////////////////////////// // Test if the enumered mode can be set and parse the result. // I think it's a good idea to do this when creating a window so you can // be sure of its success %) // result = ChangeDisplaySettings ( &dm, CDS_TEST ); switch ( result ) { case DISP_CHANGE_SUCCESSFUL: // Success printf ( "OK\n" ); break; case DISP_CHANGE_FAILED: // Failure printf ( "Failed\n" ); break; case DISP_CHANGE_BADMODE: // Bad mode printf ( "Bad mode\n" ); break; case DISP_CHANGE_BADFLAGS: // The flags are bad printf ( "Bad flags\n" ); break; case DISP_CHANGE_RESTART: // Restart is required printf ( "Restart required\n" ); break; } } ////////////////////////////////////////////////////////////////////////// // For saving/loading display settings, I suggest saving the whole // DEVMODE structure to a file: // // if ( fwrite ( &dm, 1, sizeof(DEVMODE), f_out ) != sizeof(DEVMODE) ) // return FALSE; // Failed :( ////////////////////////////////////////////////////////////////////////// return 0; // %) }