Вопрос Какими способами возможно узнать самое большое разрешение экрана?

zettend

Старожил
Здравствуйте!
Как возможно узнать разрешение монитора, и не текущего, а самое больше среди всех мониторов?

Грубо говоря, если у пользователя 3 монитора:
1920x1080
1920x1080
2540x1440

Как выявить, что у него имеется 1440p? И грубо говоря, установить текстуры 2к, а если 1080p, то текстуры 1к.
 

LexBell

Борода
Супер модератор
code_language.pascal:
function EnumDisplayMonitors( dc: HDC; rect: PRect; EnumProc: pointer;
  lData: LPARAM ): BOOL; stdcall; external user32;
 
type
  TMonInfo = record
    h: THandle; // хэндл окна рабочего стола
    dc: HDC;    // DC рабочего стола
    r: TRect;   // Координаты рабочего стола
  end;
 
var
  MonList: array of TMonInfo;
 
implementation
 
function MonitorEnumProc( hMonitor: THandle; hdcMonitor: HDC; lprcMonitor: DWORD; dwData: LPARAM ): BOOL; stdcall;
type
  PRect = ^TRect;
var
  i: integer;
begin
   i := High( MonList )+1;
   SetLength( MonList, i+1 );
   MonList[i].h := hMonitor;
   MonList[i].dc := hdcMonitor;
   MonList[i].r := PRect( lprcMonitor )^;
   Result := true;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  s: string;
  i: integer;
begin
   s := 'Кол-во мониторов: ' + IntToStr( High( MonList )+1 ) + #13;
   for i := 0 to High( MonList ) do
      with MonList[i] do
      begin
         s := s + #13 + 'handle: ' + IntToStr( h ) + #13 +
            'dc: ' + IntToStr( dc ) + #13 +
            'size: ' + IntToStr( r.Right ) + 'x' + IntToStr( r.Bottom );
      end;
   ShowMessage( s );
end;
 
initialization
  EnumDisplayMonitors( 0, nil, Addr( MonitorEnumProc ), 0 );
тебе нужны параметры TRect каждого монитора.
 
Сверху