2013-04-16 1 views
2

화면의 밝기를 변경하려면 어떤 winapi가 있습니까?winapi 변경 밝기

enter image description here

내가 델파이에 사용할 수 있지만 아무것도 발견하지 않았습니다 예 또는 API를 찾기 위해 시도했습니다.

답변

8

Windows Vista부터는 GetMonitorBrightnessSetMonitorBrightness 기능을 사용할 수 있습니다.

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

또 다른 옵션은 WmiMonitorBrightnessMethods WMI 클래스의 WmiSetBrightness 방법을 사용합니다.

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