Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2016.07.24;
Скачать: [xml.tar.bz2];

Вниз

EDID. Получить ID монитора (Работа с байтами)   Найти похожие ветки 

 
K-1000 ©   (2015-10-26 00:33) [0]

Нужно получить ID монитора из реестра. (EDID)
В  спеке написано, что данные лежат в 8-9 байте:
https://en.wikipedia.org/wiki/Extended_Display_Identification_Data
Получил бинарные данные. Объединяю их в word.


var
 A: word;
begin
 Name:= MAKEWORD(EDID[8], EDID[9]);
end;


И теперь не знаю как получить из битов нужный ID:

Manufacturer ID. These IDs are assigned by Microsoft, they are PNP IDs "00001=A”; “00010=B”; ... “11010=Z”. Bit 7 (at address 08h) is 0, the first character (letter) is located at bits 6 → 2 (at address 08h), the second character (letter) is located at bits 1 & 0 (at address 08h) and bits 7 → 5 (at address 09h), and the third character (letter) is located at bits 4 → 0 (at address 09h).
Bit 15  (Reserved, always 0)
Bits 14–10  First letter of manufacturer ID (byte 8, bits 6–2)
Bits 9–5  Second letter of manufacturer ID (byte 8, bit 1 through byte 9 bit 5)
Bits 4–0  Third letter of manufacturer ID (byte 9 bits 4–0)


Объясните пожалуйста как это сделать.


 
K-1000 ©   (2015-10-26 00:33) [1]

*Работа с битами.


 
Andy BitOff ©   (2015-10-26 01:04) [2]

http://rlu.ru/qEEi

Если нет желания учить булеву алгебру, то
var
 a: TBits;
begin
 a := TBits.Create;
 a.Size := 9;
 if not a.Bits[0] then
   a.Bits[7] := true;
 a.Bits[1] := not a.Bits[2];


 
K-1000 ©   (2015-10-26 01:10) [3]

Я знаю как установить бит, проверить установлен ли он и т.д.
Не ясно, что написано в спецификации.


 
Andy BitOff ©   (2015-10-26 01:46) [4]

А-а, ну тады я тебя не понял.


 
Pavia ©   (2015-10-26 06:29) [5]

Там ID состоит как бы из двух половинок.Буков и цифр. Которые проще декодировать по разному.

 Memo1.Lines.Add("EDID Cheack Sum OK");
 id:=buf[9]+buf[8] shl 8;
s:="   "+InttoHex((Word(BUF[10])+BUF[11] shl 8),4);
s[3]:=Char(id and 31+$40);
s[2]:=Char(id shr 5 and 31+$40);
s[1]:=Char(id shr 10 and 31+$40);
Memo1.Lines.Add("Monitir ID: "+s);
Memo1.Lines.Add(Format("Sireal: %x",[BUF[12]]));


 
Pavia ©   (2015-10-26 06:30) [6]

PS. Код рабочий проверенный, но писал лет 5 назад поэтому что к чему плохо помню.


 
Игорь Шевченко ©   (2015-10-26 10:16) [7]


>  Memo1.Lines.Add("EDID Cheack Sum OK");


> Memo1.Lines.Add("Monitir ID: "+s);


> Memo1.Lines.Add(Format("Sireal: %x",[BUF[12]]));


То есть, у тебя с любым языком беда...


 
K-1000 ©   (2015-10-26 12:13) [8]


> Pavia ©   (26.10.15 06:29) [5]
>
> Там ID состоит как бы из двух половинок.Буков и цифр. Которые
> проще декодировать по разному.
>


Работает. Почитал я спеку и похоже нужного мне не найти.
"Manufacturer ID" оказывается не то. Он уже у меня есть без EDID.
Нужно получить имя монитора.
Одна прога, читающая EDID его выводит, хотя в спеке найти не могу подобное.


 
K-1000 ©   (2015-10-26 12:13) [9]

Может это программа и не из EDID его достаёт.


 
Andy BitOff ©   (2015-10-26 12:56) [10]

Посмотри на torry был исходничек Monitorinfo по-моему. Можкт поможет чем.


 
Pavia ©   (2015-10-26 14:09) [11]

Моя из EDID берёт Monitor Name смотри ветку  case $FC.

function GetStr0A(p:Pchar):String;
var i:integer;
s:String;
begin
i:=0;
s:="";
while p[i]<>#10 do
begin
 s:=s+p[i];
 inc(i);
end;
GetStr0A:=s;
end;

...
begin
...
for i:=0 to 3 do
begin
case buf[54+i*18+3] of
$FF: Memo1.Lines.Add("Serial Number: "+GetStr0A(@buf[54+i*18+5]));
$FE: Memo1.Lines.Add("ASCII String: "+ GetStr0A(@buf[54+i*18+5]));
  ...
$FC: Memo1.Lines.Add("Monitor Name: "+ GetStr0A(@buf[54+i*18+5]));
 ...
else
 ...
end; // case
end; // for


 
Кто б сомневался ©   (2015-10-26 14:19) [12]

Кстати, а кто нибудь в курсе, есть ли какой нибудь универсальный Display API, чтобы к примеру яркость монитора поменять программно.


 
K-1000 ©   (2015-10-26 14:44) [13]


> Andy BitOff ©   (26.10.15 12:56) [10]
>
> Посмотри на torry был исходничек Monitorinfo по-моему. Можкт
> поможет чем.
> Pavia ©   (26.10.15 14:09) [11]
>
> Моя из EDID берёт Monitor Name смотри ветку  case $FC.


То что нужно, спасиб. :)


 
Pavia ©   (2015-10-26 16:48) [14]


>  есть ли какой нибудь универсальный Display API, чтобы к
> примеру яркость монитора поменять программно.

Нету. Можно к примеру через:
https://msdn.microsoft.com/en-us/library/dd692972(v=vs.85).aspx
Но по факту обычно эта функция виртуальная и делается средствами видео карты, а не монитора. А так обратный канал и протокол для управления монитором есть, вопрос в том что разработчики видеокарт не делают API на доступ.


 
Кто б сомневался ©   (2015-10-26 21:23) [15]


> Но по факту обычно эта функция виртуальная и делается средствами
> видео карты

Виртуальная - это всмысле делать картинку изображения на мониторе ярче\слабее, но яркость и контраст самого монитора не меняется?

А протокол там стандартный, или у каждого монитора (компании) свой?
Может самому можно разобраться? Есть какие то ключевые слова для поиска?
Странно что таких программ нету, они бы очень пригодились.


 
K-1000 ©   (2015-10-27 10:14) [16]


> Кто б сомневался ©   (26.10.15 21:23) [15]


Можно ещё посмотреть функции:
SetDeviceGammaRamp() и ChangeDisplaySettingsEx() с флагом CDS_VIDEOPARAMETERS.



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2016.07.24;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.006 c
15-1444937959
Кто б сомневался
2015-10-15 22:39
2016.07.24
CSS. Увеличение картинки при наведении мыши на превью


2-1413197845
marlet
2014-10-13 14:57
2016.07.24
Кодировка текста


2-1412950706
AntonArm
2014-10-10 18:18
2016.07.24
Xe7 и Thread


15-1447172846
aka
2015-11-10 19:27
2016.07.24
Wifi router


15-1447710719
GanibalLector
2015-11-17 00:51
2016.07.24
Portmon только для Ethernet а





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский