Допустим есть драйвер видеокарты, который использует VESA видеорежимы. Можно ли как нибудь узнать номер текущего VESA режима из win32 приложения?
Сам не пробовал, но возможно поможет: написать драйвер, в нём создать обработчик IOCTL, который будет дёргать функцию 0Fh прерывания Int 10h, а из приложения дёргать этот обработчик. Может будет работать, может нет - не пробовал....
n0name Можно узнать какой режим установлен. Далее использовать таблицу VESA режимов для нахождения соответствия.
n0name Да. Вот что я имею ввиду, код на дельфи. Код (Text): var a:array [1..20] of record mode:Word;ResX,ResY,Color:Word; end=( (Mode:$0100;ResX: 640;ResY: 400;Color: 8), (Mode:$0101;ResX: 640;ResY: 480;Color: 8), (Mode:$0103;ResX: 800;ResY: 600;Color: 8), (Mode:$0105;ResX:1024;ResY: 768;Color: 8), (Mode:$0107;ResX:1280;ResY:1024;Color: 8), (Mode:$010D;ResX: 320;ResY: 200;Color:15), (Mode:$010E;ResX: 320;ResY: 200;Color:16), (Mode:$010F;ResX: 320;ResY: 200;Color:24), (Mode:$0110;ResX: 640;ResY: 480;Color:15), (Mode:$0111;ResX: 640;ResY: 480;Color:16), (Mode:$0112;ResX: 640;ResY: 480;Color:24), (Mode:$0113;ResX: 800;ResY: 600;Color:15), (Mode:$0114;ResX: 800;ResY: 600;Color:16), (Mode:$0115;ResX: 800;ResY: 600;Color:24), (Mode:$0116;ResX:1024;ResY: 768;Color:15), (Mode:$0117;ResX:1024;ResY: 768;Color:16), (Mode:$0118;ResX:1024;ResY: 768;Color:24), (Mode:$0119;ResX:1280;ResY:1024;Color:15), (Mode:$011A;ResX:1280;ResY:1024;Color:16), (Mode:$011B;ResX:1280;ResY:1024;Color:24)); procedure TForm1.FormCreate(Sender: TObject); var i,m,x,y,c:Integer; DC:HDC; begin X:=GetSystemMetrics(Sm_Cxscreen); Y:=GetSystemMetrics(Sm_CYscreen); DC:=GetDC(0); c:=GetDeviceCaps(DC, BITSPIXEL); m:=-1; for i:=1 to 20 do if (a[i].ResX=X) and (a[i].ResY=Y) and ((a[i].Color=c) or ((c=32) and (a[i].Color=24))) then m:=a[i].mode; caption:=format('Width=%d Height=%d Color=%d Mode=%.4x',[x,y,c,m]); ReleaseDC(0,DC); end;
А кто сказал что это VESA вообще? Вот у меня щас 1280x960x32 и вероятно это вовсе не VESA а нестандартный режим
CnCVK По условию, написанному в первом посте, что установлен VESA режим . А так могут быть режимы которые не входят в стандартные VESA режимы или вовсе являться не стандартными. afw2004 Мне больше интерестно зачем это тебе нужно?
А что возвратит функция ax=4f03h int 10h, когда видеокарта находится в одном из этих "нестандартных" видеорежимов?
afw2004 Хороший вопрос. Вот что написанно в VBE3.pdf Note: This function is not guaranteed to return an accurate mode value if the mode set was not done with VBE Function 02h. Так что, что-нибудь да вернет. Можно эксперементально выяснить =).