Изменение яркости экрана через 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
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.