Ich habe hier ein AutoHotkey-Script im Einsatz, das die Monitor-Helligkeit (meines Dell 2709W) per Mausrad regelt, wenn der Cursor in der oberen linken Ecke ist. Das würde ich mal testen.
Falls es nicht läuft (DDC/CI scheint bei deinem Monitor ja nicht komplett implementiert zu sein, wenn mehrere Tools das behaupten), kriegst du vielleicht raus, welche Methoden der Monitor unterstützt und welche nicht.
(AutoHotkey installieren, Script z.B. als "dimmscreen.ahk" irgendwo speichern und starten. Script kann über das TrayIcon wieder beendet werden.)
Code
;=============================================================================
; DimmScreen (Cursor in der oberen linken Ecke -> mit Mausrad Screen dimmen)
;=============================================================================
; Ein Tooltip zeigt den aktuellen Wert in einem Bereich von 100 bis -100.
; Im Bereich von 100 bis 0 wird die Helligkeit direkt im Monitor geregelt
; (über die Monitor-Schnittstelle DDC/CI), im Bereich von 0 bis -100 wird
; der Gamma-Wert (GammaRamp) im Bildschirmtreiber geregelt, um bei kleinster
; Monitor-Helligkeitseinstellung noch weiteren Spielraum nach unten zu haben.
;=============================================================================
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
#SingleInstance force
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
NoTooltipMax = 0 ; permanenten Tooltip zeigen, wenn Brightness größer X
NoTooltipMin = 0 ; permanenten Tooltip zeigen, wenn Brightness kleiner X
TooltipOpacity = 70 ; Transparenz perm. Tooltip, von 0 (unsichtbar) - 100
Increment = 10 ; Schrittweite
CoordMode, Mouse, Screen
GoSub, InitDimmScreen
Return
WheelUp::
MouseGetPos, mouseX, mouseY
if(mouseX + mouseY < 2)
SetBrightness(1)
else
Send, {WheelUp}
Return
WheelDown::
MouseGetPos, mouseX, mouseY
if(mouseX + mouseY < 2)
SetBrightness(-1)
else
Send, {WheelDown}
Return
InitDimmScreen:
; -----------------------------------------------------------------------------------
; http://www.autohotkey.com/board/topic/67375-screen-brightness-question/#entry426767
; -----------------------------------------------------------------------------------
; Initialize Monitor handle
hMon := DllCall("MonitorFromPoint"
, "int64", 0 ; point on monitor
, "uint", 1) ; flag to return primary monitor on failure
; Find number of Physical Monitors
DllCall("dxva2\GetNumberOfPhysicalMonitorsFromHMONITOR", "int", hMon, "uint*", nMon)
; Get Physical Monitor from handle
VarSetCapacity(Physical_Monitor, (A_PtrSize ? A_PtrSize : 4) + 128, 0)
DllCall("dxva2\GetPhysicalMonitorsFromHMONITOR"
, "int", hMon ; monitor handle
, "uint", nMon ; monitor array size
, "int", &Physical_Monitor) ; point to array with monitor
hPhysMon := NumGet(Physical_Monitor)
if (!DllCall("dxva2\GetMonitorCapabilities", "int", hPhysMon, "uint*", monCaps, "uint*", monColorTemps))
MsgBox % "Monitor does not support DDC/CI."
else if (monCaps & 0x2 = 0) ; MC_CAPS_BRIGHTNESS
MsgBox % "Monitor does not support Brightness functions."
else
DllCall("dxva2\GetMonitorBrightness", "int", hPhysMon, "uint*", minBright, "uint*", Brightness, "uint*", maxBright)
; -----------------------------------------------------------------------------------
ToolTip := Brightness
Gamma := 128
Return
SetBrightness(flag)
{
Global
if(Brightness = "")
GoSub, InitDimmScreen
if(Brightness = "")
Return
else if(flag > 0 && ToolTip > -1 || flag < 0 && ToolTip > 0) ; Bereich 0 - 100
{
Brightness += Increment * flag
Brightness := Brightness > 100 ? 100 : Brightness < 0 ? 0 : Floor(Brightness)
ToolTip := Brightness
DllCall("dxva2\SetMonitorBrightness", "int", hPhysMon, "uint", Brightness)
}
else ; Bereich -100 - 0
{
Gamma += Increment * flag * 1.28
Gamma := Gamma > 128 ? 128 : Gamma < 0 ? 0 : Gamma
ToolTip := Round(Gamma/1.28)-100
; ---------------------------------------------------------------------------------------
; http://www.autohotkey.com/board/topic/29257-solved-brightnessgamma-control/#entry186745
; ---------------------------------------------------------------------------------------
VarSetCapacity(gr, 512*3)
Loop, 256
{
If(nValue := (Gamma+128)*(A_Index-1)) > 65535
nValue := 65535
NumPut(nValue, gr, 2*(A_Index-1), "Ushort")
NumPut(nValue, gr, 512+2*(A_Index-1), "Ushort")
NumPut(nValue, gr, 1024+2*(A_Index-1), "Ushort")
}
hDC := DllCall("GetDC", "Uint", 0)
DllCall("SetDeviceGammaRamp", "Uint", hDC, "Uint", &gr)
DllCall("ReleaseDC", "Uint", 0, "Uint", hDC)
; ---------------------------------------------------------------------------------------
}
Progress, b1 w100 fs24 x10 y10 zh0 zx0 zy0, % ToolTip
SetTimer, RemoveToolTip, -1200
}
RemoveToolTip:
Progress, Off
if(ToolTip > NoTooltipMax || ToolTip < NoTooltipMin)
{
W := ToolTip > -100 ? 20 : 26
Progress, b1 w%W% fs10 x1 y1 zh0 zx0 zy0, % ToolTip,, BrightnessToolTip
WinSet, Transparent, % TooltipOpacity * 2.55, BrightnessToolTip
}
Return
Display More