Ciao,
Se stai parlando di programmazione win32, il seguente spezzone di codice ti può essere d'aiuto:
POINTL pos={0,0};
DEVMODE dm;
memset(&dm,0,sizeof(DEVMODE)); //Azzeri la struttura
dm.dmSize=sizeof(DEVMODE); //Imposti la classica size
dm.dmBitsPerPel=32; //Bit per pixel
dm.dmPelsWidth=1280; //width
dm.dmPelsHeight=1024; //height
dm.dmDisplayFrequency=75; //frequenza
dm.dmPosition=pos; //la posizione
//abilit i campi necessari
dm.dmFields=DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT|DM_DISPLAYFREQUENCY|DM_POSITION;
//E cambi la risoluzione ChangeDisplaySettings(&dm,CDS_GLOBAL|CDS_UPDATEREGISTRY);
Ovviamente il codice suppone che i dati passati (soprattutto width,height,bpp e frequenza) siano corretti. La funzione ritorna un LONG con l'esito dell'operazione (che può essere DISP_CHANGE_SUCCESSFUL, DISP_CHANGE_BADDUALVIEW, DISP_CHANGE_BADFLAGS, DISP_CHANGE_BADMODE, DISP_CHANGE_BADPARAM, DISP_CHANGE_FAILED, DISP_CHANGE_NOTUPDATED o DISP_CHANGE_RESTART).
Per correttezza i valori passati alla funzione dovrebbero sempre provenire da una EnumDisplaySettings(), in modo da essere certi che siano corretti. Se però sai a priori che la risoluzione e la frequenza sono supportate, le puoi usare senza problemi.
Ciaociao