Имя пользователя:
Пароль:
 

Название темы: Информация о железе
Показать сообщение отдельно

Аватара для volod3000

Новый участник


Сообщения: 26
Благодарности: 0

Профиль | Отправить PM | Цитировать


Вот , бродя по просторам инета , нашел интересное решение определение параметров монитора, посредством EDID data format :

Код: Выделить весь код
type
  TEDIDHeader = record
    Padding : array[1..8] of Byte;
    VendorID : Word; // bits 14 - 10 first letter (01h='A', 02h='B', etc.)
                        // bits 9 - 5 second letter
                        // bits 4 - 0 third letter
    ProductID : Word;
    SerialNo : DWord; // serial number or FFFFFFFFh
                        // for "MAG", subtract 7000000 to get actual serial number
                        // for "OQI", subtract 456150000
                        // for "PHL", subtract ???
                        // for "VSC", subtract 640000000
    ManufactureWeek : Byte;
    ManufactureYear : Byte; // manufacture year - 1990
    EDIDversion : Byte;
    EDIDrevision : Byte;
    VideoInputType : Byte;
    SizeHorizontal : Byte; // in cm
    SizeVertical : Byte; // in cm
    GammaFactor : Byte; // gamma factor (gamma = 1.0 + factor/100, so max = 3.55)
    DPMSflags : Byte;
    ChromaXYgreenred : Byte;
    ChromaXYwhiteblue : Byte;
    ChromaXred : Byte;
    ChromaYred : Byte;
    ChromaXgreen : Byte;
    ChromaYgreen : Byte;
    ChromaXblue : Byte;
    ChromaYblue : Byte;
    ChromaXwhite : Byte;
    ChromaYwhite : Byte;
    EstablishedTimings1 : Byte;
    EstablishedTimings2 : Byte;
    ManufacturersReservedTiming : Byte;
    StandardTimingIdentification : array[1..8] Of Word;
    DetailedTimingDescription1 : array[1..18] Of Byte;
    DetailedTimingDescription2 : array[1..18] Of Byte;
    DetailedTimingDescription3 : array[1..18] Of Byte;
    DetailedTimingDescription4 : array[1..18] Of Byte;
    Unused : Byte;
    Checksum : Byte;
  end;



procedure TForm1.Button1Click(Sender: TObject);
var
 reg : TRegistry;
 EDID : TEDIDHeader;
begin
 reg := TRegistry.Create;
 with reg do
 begin
   Rootkey:=HKEY_LOCAL_MACHINE; //Hauptschlüssel
   if RegistryConnect('\\'+GetEnvironmentVariable('COMPUTERNAME')) = True then
   begin
     if OpenKeyReadOnly('SYSTEM\ControlSet002\Enum\DISPLAY\GSM5776\5&48c6b31&0&UID258\Device Parameters') then
     begin
       ReadBinaryData('EDID', EDID, SizeOf(EDID));
     end;
   end;
 end;
 reg.Free;

 memo.Clear;
 memo.Lines.Add(IntToStr(EDID.VendorID));
 memo.Lines.Add(IntToStr(EDID.ProductID));
 memo.Lines.Add(IntToStr(EDID.SerialNo));
end;
Все работает, но есть две проблемы :

- адрес Device Parameters может меняться (как это решить ?)

- как определить (какой добавить параметр в record) имя (модель) монитора ?

Отправлено: 00:09, 08-06-2011 | #3

Название темы: Информация о железе