Code: Alles auswählen
#IOCTL_VIDEO_QUERY_DISPLAY_BRIGHTNESS = $00230498
#IOCTL_VIDEO_SET_DISPLAY_BRIGHTNESS = $0023049C
#IOCTL_VIDEO_QUERY_SUPPORTED_BRIGHTNESS = $00230494
Structure DISPLAY_BRIGHTNESS
ucDisplayPolicy.b ;1=ac Strom, 2=dc Akku, 3=beides
ucACBrightness.b
ucDCBrightness.b
EndStructure
Global Dim BrightLevel.b(257); Mögliche Farbstufen
Global maxBrightLevel=-1 ; Anzahl Stufen
Global hLCD.i=#INVALID_HANDLE_VALUE ; Handle des Bildschirms
Global displayBrightness.DISPLAY_BRIGHTNESS
Declare GetLCDhandle()
Procedure GetSupportedBrightness(); Unterstütze Helligkeitsstufen, maxStufen
Protected returnedBytes.l
If maxBrightLevel<1
; Bisher keine Zwischenstufen abgefragt
If GetLCDhandle()
If DeviceIoControl_(hlcd,#IOCTL_VIDEO_QUERY_SUPPORTED_BRIGHTNESS,#Null,0,@BrightLevel()+1,256,@returnedbytes,#Null)
maxBrightLevel=returnedBytes+1
BrightLevel(0)=0
BrightLevel(maxBrightLevel)=100
;For i=0 To maxstufen
; Debug Str(i)+" "+Str(stufen(i))
;Next
EndIf
EndIf
EndIf
ProcedureReturn maxBrightLevel
EndProcedure
Procedure GetCurrentBrightness(); gibt aktuelle helligekeit zurück oder -1
Protected returnedbytes.l
If getlcdhandle()
If DeviceIoControl_(hlcd, #IOCTL_VIDEO_QUERY_DISPLAY_BRIGHTNESS,#Null,0,@displayBrightness, SizeOf(displayBrightness),@returnedBytes,#Null)
If displayBrightness\ucDisplayPolicy =1
ProcedureReturn displayBrightness\ucACBrightness
Else
ProcedureReturn displaybrightness\ucDCBrightness
EndIf
EndIf
EndIf
ProcedureReturn -1
EndProcedure
Procedure GetCurrentLevel();Helligkeit in Stufen
Protected cur.l,ret.l
ret=-1
If GetSupportedBrightness()>0
cur=GetCurrentBrightness()
;Debug "Current:"+Str(cur)
For i=0 To maxBrightLevel
If cur>=BrightLevel(i)
ret=i
EndIf
Next
EndIf
ProcedureReturn ret
EndProcedure
Procedure SetCurrentBrightness(Value.b)
Protected returnedBytes.l
If GetCurrentBrightness()>-1
If displaybrightness\ucDisplayPolicy=1
displayBrightness\ucACBrightness=Value
Else
displayBrightness\ucDCBrightness=Value
EndIf
ProcedureReturn DeviceIoControl_(hLCD, #IOCTL_VIDEO_SET_DISPLAY_BRIGHTNESS, @displayBrightness, SizeOf(displayBrightness), #Null, 0, @returnedBytes, #Null)
EndIf
EndProcedure
Procedure SetCurrentLevel(Level)
If GetSupportedBrightness()>0
If level>=0 And level<=maxBrightLevel
ProcedureReturn SetCurrentBrightness(BrightLevel(Level) )
EndIf
EndIf
ProcedureReturn 0
EndProcedure
Procedure GetLCDhandle()
If hlcd=#INVALID_HANDLE_VALUE
hLCD = CreateFile_("\\.\LCD", #GENERIC_READ, #FILE_SHARE_READ | #FILE_SHARE_WRITE, #Null, #OPEN_EXISTING, 0, #Null)
EndIf
If hlcd=#INVALID_HANDLE_VALUE
ProcedureReturn #False
Else
ProcedureReturn #True
EndIf
EndProcedure
Procedure CloseLCDhandle()
If hlcd<>#INVALID_HANDLE_VALUE
CloseHandle_(hLCD)
hlcd=#INVALID_HANDLE_VALUE
EndIf
EndProcedure
BrightLevel.b(0-x) werden die Werte gespeichert und maxBrightLevel gibt an, wie hoch x sein kann.
SetCurrentLevel(Level)/GetCurrentLevel() setzt bzw. fragt den aktuelle Helligkeit ab (kann zwischen 0-BrightLevel liegen)
GetCurrentBrightness()/SetCurrentBrightness(Value) fragt/Setzt die Helligkeit. Der Wer kann zwischen 0 - 100 liegen. Achtung man kann nur die Werte hernehmen, die das Display unterstützt. Diese Werte kann man mit GetSupportedBrightness abfragen.
Mein Display unterstützt bspw. nur 0,15,24,30,45,60,80,100%.