2013-04-16 3 views
2

Что такое winapi, чтобы изменить яркость экрана?winapi change яркость

enter image description here

Я пытаюсь найти пример или API можно использовать для Delphi, но ничего не нашли.

ответ

8

Начиная с Windows Vista вы можете использовать функции GetMonitorBrightness и SetMonitorBrightness.

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'; 

Другим вариантом является использование WmiSetBrightness метода WmiMonitorBrightnessMethods WMI класса.

{$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. 

Примечание: Эти функции поддерживаются, если функция GetMonitorCapabilities возвращает флаг MC_CAPS_BRIGHTNESS.

+0

+1 Подробный ответ! – Remko

+0

Спасибо! Это то, что я искал. – user0