Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Изменение яркости экрана через WinAPI в приложениях на Delphi: пошаговое руководство

Delphi , ОС и Железо , Монитор и Экран

Изменение яркости экрана через WinAPI в приложениях на Delphi

Введение

Вопрос изменения яркости экрана через WinAPI актуален для разработчиков, работающих с технологиями Windows и желающих добавить в свои приложения функционал управления уровнем освещенности дисплея. В данной статье мы рассмотрим, какие WinAPI функции доступны для изменения яркости экрана, и как их можно использовать в приложениях, написанных на языке Delphi.

Основные WinAPI для изменения яркости

С Windows Vista и более поздними версиями операционной системы, разработчики могут использовать функции GetMonitorBrightness и SetMonitorBrightness, которые позволяют получать и устанавливать уровень яркости монитора. Эти функции находятся в библиотеке Dxva2.dll.

function GetMonitorBrightness(
  hMonitor: THandle;
  var pdwMinimumBrightness: DWORD;
  var pdwCurrentBrightness: DWORD;
  var pdwMaximumBrightness: DWORD
): BOOL; stdcall; external 'Dxva2.dll' name 'GetMonitorBrightness';

function SetMonitorBrightness(
  hMonitor: THandle;
  dwNewBrightness: DWORD
): BOOL; stdcall; external 'Dxva2.dll' name 'SetMonitorBrightness';

Перед использованием этих функций необходимо убедиться, что функция GetMonitorCapabilities возвращает флаг MC_CAPS_BRIGHTNESS, который указывает на поддержку управления яркостью.

Альтернативный способ с использованием WMI

Другой способ управления яркостью экрана заключается в использовании метода WmiSetBrightness класса WmiMonitorBrightnessMethods. Пример кода на Delphi, демонстрирующий использование этого метода:

{$APPTYPE CONSOLE}

uses
  SysUtils,
  ActiveX,
  Variants,
  ComObj;

procedure SetBrightness(Timeout: Integer; Brightness: Byte);
var
  FSWbemLocator: OLEVariant;
  FWMIService: OLEVariant;
  FWbemObjectSet: OLEVariant;
  FWbemObject: OLEVariant;
  oEnum: IEnumvariant;
  iValue: LongWord;
begin
  FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  FWMIService := FSWbemLocator.ConnectServer('localhost', 'root\WMI', '', '');
  FWbemObjectSet := FWMIService.ExecQuery('SELECT * FROM WmiMonitorBrightnessMethods Where Active=True', 'WQL', $00000020);
  oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
  while oEnum.Next(1, FWbemObject, iValue) = 0 do
  begin
    FWbemObject.WmiSetBrightness(Timeout, Brightness);
    FWbemObject := Unassigned;
  end;
end;

begin
  try
    CoInitialize(nil);
    try
      SetBrightness(5, 100);
    finally
      CoUninitialize;
    end;
  except
    on E: EOleException do
      Writeln(Format('EOleException %s %x', [E.Message, E.ErrorCode]));
    on E: Exception do
      Writeln(E.Classname, ':', E.Message);
  end;
  Writeln('Press Enter to exit');
  Readln;
end.

Заключение

В данной статье мы рассмотрели, как можно изменить яркость экрана с помощью WinAPI в приложениях, написанных на Delphi. Мы рассмотрели две основные функции: GetMonitorBrightness и SetMonitorBrightness, а также альтернативный метод с использованием WMI. Каждый разработчик может выбрать наиболее подходящий для себя способ, исходя из требований проекта и версий операционных систем, для которых разрабатывается приложение.

Обратите внимание, что для корректной работы с управлением яркостью необходимо учитывать совместимость с аппаратной частью и наличие соответствующих драйверов.

Создано по материалам из источника по ссылке.

Обсуждение способов изменения яркости экрана через WinAPI в приложениях, написанных на языке программирования Delphi для операционной системы Windows.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Монитор и Экран ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-03-13 22:58:20/0.0039308071136475/0