Есть такая штука EnumDisplaySettings, во втором параметре должен быть интеречующий меня Mode. Но как узнать какой сейчас Mode поставлен?
trr Код (Text): .code mov edi,offset lpDevMode; запоминаю указатель на структуру в edi push edi push ENUM_CURRENT_SETTINGS push 0 call _imp__EnumDisplaySettingsA@12;получаю текущую моду assume edi:ptr DEVMODE mov [edi].dmPelsWidth,800;новые значения ширины и высоты экрана mov [edi].dmPelsHeight,600; mov [edi].dmFields,(DM_PELSWIDTH or DM_PELSHEIGHT);меняю только ширину и высоту assume edi:nothing push CDS_UPDATEREGISTRY;изменится разрешение с обновлением параметров в реестре push edi call _imp__ChangeDisplaySettingsA@8 .data lpDevMode DEVMODE <>
Да нет же, если сделать так, то придется сохранять предыдущие значения width,height и другие, или весь DEVMODE чтобы потом вернуть как было. Вот мне и интересно как получить номер текущего Мода, а не его параметры.
trr Код (Text): modes:array[0..255] of TDevMode; var i:integer; begin ListBox1.ItemClear; i:=0; while EnumDisplaySettings(nil, i, modes[i]) do begin ListBox1.Item.Add(IntToStr(modes[i].dmBitsPerPel)+' ' +IntToStr(modes[i].dmPelsWidth)+' ' IntToStr(modes[i].dmPelsHeight)+' '+IntToStr(modes[i].dmDisplayFrequency)); inc(i); end; end; ... begin modes[ListBox1.ItemIndex].dmFields:=DM_BITSPERPEL or DM_PELSWIDTH or DM_PELSHEIGHT or DM_DISPLAYFLAGS or DM_DISPLAYFREQUENCY; ChangeDisplaySettings(modes[ListBox1.ItemIndex], CDS_UPDATEREGISTRY); end;