I want to share another code for increment/decrement the laptop monitor brightness.
Code: Select all
; ----------- Change laptop brightness by an arbitrary step. --------------
; This is an AutoHotKey for increment/decrement the Laptop Monitor Brighnes (Dim Screen) by an arbitary step.
; "CapsLock + Right/Left rrow" Keys is set for changing the screen Dim.
; I tested it on Windows 10. + I'm sure it works on windows 7, too. ---
CapsLock & Right::
DimStep = 5
; ----------------------------
DllCall("powrprof\PowerGetActiveScheme", "Ptr", 0, "Ptr*", currSchemeGuid, "UInt")
VarSetCapacity(GUID_VIDEO_SUBGROUP__, 16)
NumPut(0x7516B95F, GUID_VIDEO_SUBGROUP__, 0, "UInt"), NumPut(0x4464F776, GUID_VIDEO_SUBGROUP__, 4, "UInt")
NumPut(0x1606538C, GUID_VIDEO_SUBGROUP__, 8, "UInt"), NumPut(0x99CC407F, GUID_VIDEO_SUBGROUP__, 12, "UInt")
VarSetCapacity(GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS__, 16)
NumPut(0xADED5E82, GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS__, 0, "UInt"), NumPut(0x4619B909, GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS__, 4, "UInt")
NumPut(0xD7F54999, GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS__, 8, "UInt"), NumPut(0xCB0BAC1D, GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS__, 12, "UInt")
schemeGuid := currSchemeGuid
; ----------------------------
powerstatusValue := powerstatus()
if (powerstatusValue = 1) {
DllCall("powrprof\PowerReadACValueIndex", "Ptr", 0, "Ptr", schemeGuid, "Ptr", &GUID_VIDEO_SUBGROUP__, "Ptr", &GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS__, "UInt*", currBrightnessAC, "UInt")
; MsgBox, currBrightnessAC = %currBrightnessAC%
currBrightness := currBrightnessAC + DimStep
DllCall("powrprof\PowerWriteACValueIndex", "Ptr", 0, "Ptr", currSchemeGuid, "Ptr", &GUID_VIDEO_SUBGROUP__, "Ptr", &GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS__, "UInt", currBrightness, "UInt")
}
else {
DllCall("powrprof\PowerReadDCValueIndex", "Ptr", 0, "Ptr", currSchemeGuid, "Ptr", &GUID_VIDEO_SUBGROUP__, "Ptr", &GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS__, "UInt*", currBrightnessDC, "UInt")
; MsgBox, currBrightnessDC = %currBrightnessDC%
currBrightness := currBrightnessDC + DimStep
DllCall("powrprof\PowerWriteDCValueIndex", "Ptr", 0, "Ptr", currSchemeGuid, "Ptr", &GUID_VIDEO_SUBGROUP__, "Ptr", &GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS__, "UInt", currBrightness, "UInt")
}
DllCall("powrprof\PowerSetActiveScheme", "Ptr", 0, "Ptr", currSchemeGuid, "UInt")
return
CapsLock & Left::
DimStep = 5
; ----------------------------
DllCall("powrprof\PowerGetActiveScheme", "Ptr", 0, "Ptr*", currSchemeGuid, "UInt")
VarSetCapacity(GUID_VIDEO_SUBGROUP__, 16)
NumPut(0x7516B95F, GUID_VIDEO_SUBGROUP__, 0, "UInt"), NumPut(0x4464F776, GUID_VIDEO_SUBGROUP__, 4, "UInt")
NumPut(0x1606538C, GUID_VIDEO_SUBGROUP__, 8, "UInt"), NumPut(0x99CC407F, GUID_VIDEO_SUBGROUP__, 12, "UInt")
VarSetCapacity(GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS__, 16)
NumPut(0xADED5E82, GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS__, 0, "UInt"), NumPut(0x4619B909, GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS__, 4, "UInt")
NumPut(0xD7F54999, GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS__, 8, "UInt"), NumPut(0xCB0BAC1D, GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS__, 12, "UInt")
schemeGuid := currSchemeGuid
; ----------------------------
powerstatusValue := powerstatus()
if (powerstatusValue = 1) {
DllCall("powrprof\PowerReadACValueIndex", "Ptr", 0, "Ptr", schemeGuid, "Ptr", &GUID_VIDEO_SUBGROUP__, "Ptr", &GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS__, "UInt*", currBrightnessAC, "UInt")
; MsgBox, currBrightnessAC = %currBrightnessAC%
currBrightness := currBrightnessAC - DimStep
DllCall("powrprof\PowerWriteACValueIndex", "Ptr", 0, "Ptr", currSchemeGuid, "Ptr", &GUID_VIDEO_SUBGROUP__, "Ptr", &GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS__, "UInt", currBrightness, "UInt")
}
else {
DllCall("powrprof\PowerReadDCValueIndex", "Ptr", 0, "Ptr", currSchemeGuid, "Ptr", &GUID_VIDEO_SUBGROUP__, "Ptr", &GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS__, "UInt*", currBrightnessDC, "UInt")
; MsgBox, currBrightnessDC = %currBrightnessDC%
currBrightness := currBrightnessDC - DimStep
DllCall("powrprof\PowerWriteDCValueIndex", "Ptr", 0, "Ptr", currSchemeGuid, "Ptr", &GUID_VIDEO_SUBGROUP__, "Ptr", &GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS__, "UInt", currBrightness, "UInt")
}
DllCall("powrprof\PowerSetActiveScheme", "Ptr", 0, "Ptr", currSchemeGuid, "UInt")
return
; ---- sub functions --------
powerstatus() {
VarSetCapacity(powerstatus, 1+1+1+1+4+4)
success := DllCall("kernel32.dll\GetSystemPowerStatus", "uint", &powerstatus)
acLineStatus:=ReadInteger(&powerstatus,0,1,false)
batteryFlag:=ReadInteger(&powerstatus,1,1,false)
batteryLifePercent:=ReadInteger(&powerstatus,2,1,false)
batteryLifeTime:=ReadInteger(&powerstatus,4,4,false)
batteryFullLifeTime:=ReadInteger(&powerstatus,8,4,false)
output=AC Status: %acLineStatus%`nBattery Flag: %batteryFlag%`nBattery Life (percent): %batteryLifePercent%`nBattery Life (time): %batteryLifeTime%`nBattery Life (full time): %batteryFullLifeTime%
; MsgBox, %output%
return acLineStatus
}
ReadInteger( p_address, p_offset, p_size, p_hex=true )
{
value = 0
old_FormatInteger := a_FormatInteger
if ( p_hex )
SetFormat, integer, hex
else
SetFormat, integer, dec
loop, %p_size%
value := value+( *( ( p_address+p_offset )+( a_Index-1 ) ) << ( 8* ( a_Index-1 ) ) )
SetFormat, integer, %old_FormatInteger%
return, value
}
; -------------------------- End -------------------------