Hallo zusammen,
da ich definitiv zu blöd bin das Problem direkt mit Windows 10 zu lösen, musste ich mir was einfallen lassen. Das Ziel ist es, bei einem Win10 Tablet den Bildschirm nach X-Sekunden abzudunkeln (??wie auch immer man das schreibt ). Hab hier irgendwo im Forum ein Script gefunden und angepasst.
Hier mal der Versuch:
Spoiler anzeigen
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Outfile=Helligkeit.Exe
#AutoIt3Wrapper_UseX64=n
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <Misc.au3>
#include <GuiSlider.au3>
#include "Forms\Main.isf"
Global $iniPath = @ScriptDir & "\Config.ini"
Local $Abgedunkelt = False
Global $rgb_Standard = IniRead($iniPath, "rgb", "standard", 75)
Global $rgb_Dunkel = IniRead($iniPath, "rgb", "dunkel", 25)
Global $Time = IniRead($iniPath, "time", "time", 5)
GUICtrlSetData($Label_Slider_wert, $rgb_Standard & "%")
GUICtrlSetData($Label_Slider_wert2, $rgb_Dunkel & "%")
GUICtrlSetData($Input_Time, $Time)
Local $hDLL = DllOpen("user32.dll")
$TimerPress = TimerInit()
GUISetState(@SW_SHOW, $Main)
While 1
;~ ToolTip($rgb_Dunkel)
$TimeToChange = $Time - Round(TimerDiff($TimerPress) / 1000, 0)
If $TimeToChange > 0 Then
GUICtrlSetData($Label_Time, $TimeToChange)
Else
GUICtrlSetData($Label_Time, "Abgedunkelt")
EndIf
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
ende()
Case $Button_Exit
ende()
Case $Slider_RGB_Dunkel
$Slider_Wert2 = GUICtrlRead($Slider_RGB_Dunkel)
GUICtrlSetData($Label_Slider_wert2, $Slider_Wert2 & "%")
$rgb_Dunkel = $Slider_Wert2
Case $Slider_RGB_Standard
$Slider_Wert = GUICtrlRead($Slider_RGB_Standard)
GUICtrlSetData($Label_Slider_wert, $Slider_Wert & "%")
$rgb_Standard = $Slider_Wert
Case $Button_Save
_Save()
EndSwitch
If TimerDiff($TimerPress) >= $Time * 1000 and $Abgedunkelt = False Then
$rgb = Round(128 * ($rgb_Dunkel / 100), 0)
_SetGamma($rgb, $rgb, $rgb)
$Abgedunkelt = True
EndIf
If _IsPressed("01", $hDLL) Then
$TimerPress = TimerInit()
If $Abgedunkelt = True Then
$rgb = Round(128 * ($rgb_Standard / 100), 0)
_SetGamma($rgb, $rgb, $rgb)
$Abgedunkelt = False
EndIf
EndIf
Sleep(50)
WEnd
Func normal()
$rgb = 128
_SetGamma($rgb, $rgb, $rgb)
EndFunc ;==>normal
Func ende()
_SetGamma($rgb, $rgb, $rgb)
DllClose($hDLL)
Exit
EndFunc ;==>ende
Func _Save()
IniWrite($iniPath, "rgb", "standard", GUICtrlRead($Slider_RGB_Standard))
IniWrite($iniPath, "rgb", "dunkel", GUICtrlRead($Slider_RGB_Dunkel))
IniWrite($iniPath, "time", "time", GUICtrlRead($Input_Time))
$Time = GUICtrlRead($Input_Time)
$TimerPress = TimerInit()
EndFunc ;==>_Save
Func _SetGamma($vRed = 128, $vGreen = 128, $vBlue = 128)
Local $n_ramp, $rVar, $gVar, $bVar, $Ret, $i, $dc
If $vRed < 0 Or $vRed > 386 Then
SetError(1)
Return -1 ;Invalid Red value
EndIf
If $vGreen < 0 Or $vGreen > 386 Then
SetError(2)
Return -1 ;Invalid Green value
EndIf
If $vBlue < 0 Or $vBlue > 386 Then
SetError(3)
Return -1 ;Invalid Blue value
EndIf
$dc = DllCall("user32.dll", "int", "GetDC", "hwnd", 0)
$n_ramp = DllStructCreate("short[" & (256 * 3) & "]")
For $i = 0 To 256
$rVar = $i * ($vRed + 128)
If $rVar > 65535 Then $rVar = 65535
$gVar = $i * ($vGreen + 128)
If $gVar > 65535 Then $gVar = 65535
$bVar = $i * ($vBlue + 128)
If $bVar > 65535 Then $bVar = 65535
DllStructSetData($n_ramp, 1, Int($rVar), $i) ;red
DllStructSetData($n_ramp, 1, Int($gVar), $i + 256) ;green
DllStructSetData($n_ramp, 1, Int($bVar), $i + 512) ;blue
Next
$Ret = DllCall("gdi32.dll", "int", "SetDeviceGammaRamp", _
"int", $dc[0], "ptr", DllStructGetPtr($n_ramp))
$dc = 0
$n_ramp = 0
EndFunc ;==>_SetGamma
Alles anzeigen
Die Main.isf hab ich als RAR angehangen.
Das Ganze funktioniert auch soweit ganz gut, nur wird der Bildschirm nicht dunkel genug.
Gefühlt tritt ab 25% keine Änderung mehr ein.
Ich finde den Grund dafür einfach nicht. Wahrscheinlich steh ich wieder auf´m Schlauch...
Hoffe mir kann da einer kurz aushelfen
Gruß
MrB
P.S.: Falls Jemand noch eine Möglichkeit kennt bei einem Tablet die erste Berührung abzufangen wäre ich echt dankbar. Bei _IsPressed("01", $hDLL) muss man dann doch 2x drauf tippen