Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.04.2007, 21:32   #1
WaxeP
 
Регистрация: 16.12.2006
Сообщений: 9
По умолчанию данные о видеосистеме: тип видеоадаптера, тип монитора, режим монитора: разрешение, частота обновления

Подскажите пожалуйста как в Delphi получить информацию о видеосистеме компа: тип видеоадаптер, тип монитора, режим монитора(разрешение, частота обновления).
WaxeP вне форума Ответить с цитированием
Старый 13.04.2007, 22:07   #2
merax
Форумчанин
 
Регистрация: 27.12.2006
Сообщений: 955
По умолчанию

Примеры из DelphiWorld 6:

Видюха-

Код:
procedure TForm1.button1click(Sender: TObject);
var
  lpDisplayDevice: TDisplayDevice;
  dwFlags: DWORD;
  cc: DWORD;
begin
  form2.memo1.Clear;
  lpDisplayDevice.cb := sizeof(lpDisplayDevice);
  dwFlags := 0;
  cc := 0;
  while EnumDisplayDevices(nil, cc, lpDisplayDevice, dwFlags) do
  begin
    Inc(cc);
    form2.memo1.lines.add(lpDisplayDevice.DeviceString);
    {Так же мы увидим дополнительную информацию в lpDisplayDevice}
    form2.show;
end;
end;

Монитор - Определить текущее разрешение просто, достаточно обратиться к объекту TScreen и
посмотреть значения его полей Width и Height.
merax вне форума Ответить с цитированием
Старый 14.04.2007, 13:24   #3
WaxeP
 
Регистрация: 16.12.2006
Сообщений: 9
По умолчанию

С видухой понятно, спасибо.
Через EnumDisplaySettings получаю список возможных параметров драйвера, но как получить текучие настройки (для частоты) всё равно не знаю. И с названием монитора никак. Help please ещё .
WaxeP вне форума Ответить с цитированием
Старый 14.04.2007, 14:52   #4
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,501
По умолчанию

http://pblog.ru/?p=18
Alar вне форума Ответить с цитированием
Старый 14.04.2007, 15:13   #5
merax
Форумчанин
 
Регистрация: 27.12.2006
Сообщений: 955
По умолчанию

Кстати можно тупо узнать так:

Код:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
     x, y : integer;
begin
x := Screen.DesktopHeight;
y := Screen.DesktopWidth;
Memo1.Lines.Add(IntToStr (y) + ' x ' + IntToStr (x));
end;
merax вне форума Ответить с цитированием
Старый 14.04.2007, 22:19   #6
WaxeP
 
Регистрация: 16.12.2006
Сообщений: 9
По умолчанию

Странные вещи: везде идёт роспись функции EnumDisplaySettings и через неё получают весь список возможных параметров – это я и сам врубился, как ещё раньше писал. Но вот конкретно как узнать то что сейчас стоит нигде не пишут. Хорошо с разрешением, там ничего сложного, но надо ещё и частоту и имя дисплея получить (типа SyncMaster 757NF) – этого почему-то нигде не описано. Только пишут, что мол нужно не только знать текущие параметры, но и все возможные и давай про EnumDisplaySettings рассказывать, а как получить эти самые текущие!!?? Я в замешательстве, честное слово. А самое главное уверен что реально несложно, только с этим не сталкивался никто (из просматривающих тему имеется ввиду), пожалуйста перекопайте ещё у кого что есть.
WaxeP вне форума Ответить с цитированием
Старый 14.04.2007, 23:39   #7
WaxeP
 
Регистрация: 16.12.2006
Сообщений: 9
По умолчанию

Всё таки нашёл, как получать все настройки монитора. Вот:

Код:
 
procedure TForm1.Button1Click(Sender: TObject);
var
h,w,b,f:integer;
begin
h:=screen.Height;
w:=screen.Width;
b:=GetDeviceCaps(Form1.Canvas.Handle, BITSPIXEL); - глубина цвета
f:=GetDeviceCaps(Form1.Canvas.Handle, VREFRESH); - частота обновления
memo1.lines.add(inttostr(h));
memo1.lines.add(inttostr(w));
memo1.lines.add(inttostr(b));
memo1.lines.add(inttostr(f));
end;
Так и знал что мелочь, но о ней надо было знать – так вот и бывает постоянно: о всём подумаешь, а на мелочах засыпишся.
Теперь касательно монитора осталось имя получить. HELP!!!
WaxeP вне форума Ответить с цитированием
Старый 15.04.2007, 02:21   #8
WaxeP
 
Регистрация: 16.12.2006
Сообщений: 9
По умолчанию

Наконец я до всего додумался. Имя монитора достаю из реестра, работать правда будет походу только под ХР, но это хоть что-то. Ниже результат полудня напряжённого вглядывания в монитор, надеюсь, кому-то это будет полезно и он не будет так долго париться как я.

Код:
 
procedure TForm1.FormCreate(Sender: TObject);
var
lpDisplayDevice: TDisplayDevice; //для имени видеокарты
 
Reg:TRegistry;        //для имени монитора
SubKeys:TStringList;  //для имени монитора
MonitorName:string;   //для имени монитора
 
H,W,B,F:integer;  //настройки монитора
 
begin
 
//имя видеокарты
lpDisplayDevice.cb := sizeof(lpDisplayDevice);
if  EnumDisplayDevices(nil, 0, lpDisplayDevice, 0) then
Label2.Caption:='Видеоадаптер: '+lpDisplayDevice.DeviceString;
 
 
//настройки монитора
h:=screen.Height;
w:=screen.Width;
b:=GetDeviceCaps(Form1.Canvas.Handle, BITSPIXEL);
f:=GetDeviceCaps(Form1.Canvas.Handle, VREFRESH);
Label4.Caption:='Видеорежим: '+inttostr(w)+'x'+inttostr(h)+' '
+inttostr(b)+'bit '+inttostr(f)+'Hz';
 
 
//имя монитора
Reg:=TRegistry.Create;
with Reg do
  begin
  try
  RootKey := HKEY_LOCAL_MACHINE;
  OpenKeyReadOnly('SYSTEM\ControlSet001\Enum\DISPLAY\Default_Monitor');
  SubKeys := TStringList.Create;
  GetKeyNames(SubKeys);
  OpenKeyReadOnly(SubKeys[0]);
  MonitorName:=ReadString('DeviceDesc');
  if MonitorName='' then //если не удалось получить имени монитора
    begin
    Label3.Caption:='Монитор:  не удалось определить';
    exit;
    end;
  Label3.Caption:='Монитор: '+MonitorName; //если получили имя монитора выводим
  SubKeys.Free;
  Free;
  Except //если произошел вообще какой-то глюк при работе с реестром
  Label3.Caption:= 'Монитор:  не удалось определить';
  end;
  end;
 
end;
ЗЫ: Самым полезным было сообщение от merax, а конкретней строка “Примеры из DelphiWorld 6:” – раздобыл я этот DelphiWorld 6 и там обнаружил кучу полезной инфы, оттуда черпал идеи по написанию вышеизложенной процедуры. Всем спасибо за внимание к теме.
WaxeP вне форума Ответить с цитированием
Старый 15.04.2007, 07:43   #9
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

Вот, когда-то писал - может понадобится:
Изображения
Тип файла: jpg ScreenShot.JPG (32.0 Кб, 255 просмотров)
Вложения
Тип файла: rar SysInfo.rar (10.6 Кб, 99 просмотров)

Последний раз редактировалось zetrix; 15.04.2007 в 07:47.
zetrix вне форума Ответить с цитированием
Старый 15.04.2007, 18:12   #10
WaxeP
 
Регистрация: 16.12.2006
Сообщений: 9
По умолчанию

Всё это хорошо, но всё равно пришлось бы самому разбираться, хотя это даже и лучше – больше всякого интересного и полезного перекопал и узнал. Насчёт правил и инфы – ничё нового, ток сидя через модем не раскатаешь губу качать всего и много и так друзей напрягаеш всегда L. А прога полезная – относительно меня интересно с версией винды, спасибо.
WaxeP вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выбор монитора Ulagay700 Компьютерное железо 2 04.09.2008 09:59
Подстройка формы под разрешение монитора Assassin Общие вопросы C/C++ 5 08.04.2008 18:16
Определение разрешения монитора(ов) lamonana Общие вопросы Delphi 2 09.03.2008 18:56
Помогите изменить разрешение монитора Stanislav Помощь студентам 2 06.10.2007 20:48