Helligkeit ändern

  • Ich möchte die LED-Hintergrundbeleuchtung meines Laptopmonitors (Helligkeit) verstellen.

    Habe die SuFu benutzt, aber nur diese beiden Threads gefunden.
    Beide zeigen nicht die eigentliche Lösung, sondern verstellen nur den Gammawert.

    Ich habe einen DllCall im MSDN gefunden, weiß ihn aber nicht korrekt anzuwenden (DllCalls waren noch nie mein Ding..:S): http://msdn.microsoft.com/en-us/library/dd692972(VS.85).aspx

    Kann mir jemand helfen?

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

  • chip: Ja, hilft mir aber auch nicht wirklich weiter. Kannst du ein Beispiel erstellen?
    BugFix: Wenn ich mal wieder bessere Netzverbindung habe, kann ich dir gerne eine VNC-Verbindung anbieten :D

    edit@chip: Mein Versuch schlägt auf ganzer Linie fehl (habe noch nie was mit WMI gemacht...):

    [autoit]

    $wmi=ObjGet("winmgmts:\\localhost\root\wmi")
    $wmi.WmiSetBrightness(0,30)

    [/autoit]

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

    Einmal editiert, zuletzt von L3viathan (7. November 2010 um 21:21)

  • sieht ja schon mal ganz nett aus, und funktioniert (nach Anpassung) auch, aber woher weiß ich die Class? Namespace steht in msdn, aber Class?

    Zitat

    WmiSetBrightness Method of the WmiMonitorBrightnessMethods Class


    Eine "WmiMonitorBrightnessMethods"-Klasse existiert unter \root\wmi nicht.
    Was tun?

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

  • [autoit]

    $strComputer = "localhost"

    [/autoit][autoit][/autoit][autoit]

    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\WMI")

    [/autoit][autoit][/autoit][autoit]

    $colItems = $objWMIService.ExecQuery("SELECT * FROM WmiMonitorBrightness", 'WQL',48)

    [/autoit][autoit][/autoit][autoit]

    For $objItem in $colItems
    MsgBox(0,"","CurrentBrightness: " & $objItem.CurrentBrightness)
    Next

    [/autoit]

    Das kann ich dir schonmal anbieten...

  • Das ist ja schonmal gut, das Auslesen brauche ich bestimmt auch. Nur wie führe ich jetzt Befehle aus?
    Weder mit $colItem noch mit dem Objekt funktioniert die Methode WmiSetBrightness..

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

  • Ich hab das einfach mit dem VB Generator gemacht.
    Allerdings funktioniert das nicht und ich hab auch nicht wirklich den Plan davon...

    [autoit]

    $strComputer = "."
    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\WMI")

    [/autoit][autoit][/autoit][autoit]

    $objShare = $objWMIService.Get("WmiMonitorBrightnessMethods.ReplaceKeyProperty=ReplacePropertyValue")

    [/autoit][autoit][/autoit][autoit]

    $objInParam = $objShare.Methods_("WmiSetBrightness").inParameters.SpawnInstance_()

    [/autoit][autoit][/autoit][autoit]

    $objInParam.Properties_.Item("Brightness") = 65
    $objInParam.Properties_.Item("Timeout") = 10

    [/autoit][autoit][/autoit][autoit]

    $objOutParams = $objWMIService.ExecMethod("WmiMonitorBrightnessMethods.ReplaceKeyProperty=ReplacePropertyValue", "WmiSetBrightness", $objInParam)

    [/autoit][autoit][/autoit][autoit][/autoit]
  • Laut Console liegt der Fehler in deiner Zeile 4... also bei .Get
    Ich bin echt mit meinem Latein am Ende, ich versuche nachher nochmal die DCOM-Variante...

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

  • versuchs mal mit dem:

    [autoit]

    HotKeySet ("{F1}", "_1")
    HotKeySet ("{F3}", "_2")
    HotKeySet ("{F2}", "normal")
    HotKeySet("{ESC}","dead")
    $rgb = 128

    [/autoit][autoit][/autoit][autoit]

    Func _2 ()
    if $rgb < 286 Then
    $rgb = $rgb + 10
    _SetGamma($rgb, $rgb, $rgb)
    EndIf

    [/autoit][autoit][/autoit][autoit]

    EndFunc

    [/autoit][autoit][/autoit][autoit]

    Func _1 ()
    if $rgb > 0 Then
    $rgb =$rgb - 10
    _SetGamma ($rgb, $rgb, $rgb)
    EndIf

    [/autoit][autoit][/autoit][autoit]

    EndFunc
    Func dead()
    Exit
    EndFunc
    Func normal ()
    $rgb = 128
    _SetGamma ($rgb, $rgb, $rgb)
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    While 1
    Sleep(100)
    WEnd

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Func _SetGamma($vRed=128,$vGreen=128,$vBlue=128)

    [/autoit][autoit][/autoit][autoit]

    Local $n_ramp,$rVar,$gVar,$bVar,$Ret,$i,$dc

    [/autoit][autoit][/autoit][autoit]

    If $vRed < 0 or $vRed > 386 then
    SetError(1)
    Return -1 ;Invalid Red value
    EndIf

    [/autoit][autoit][/autoit][autoit]

    If $vGreen < 0 or $vGreen > 386 then
    SetError(2)
    Return -1 ;Invalid Green value
    EndIf

    [/autoit][autoit][/autoit][autoit]

    If $vBlue < 0 or $vBlue > 386 then
    SetError(3)
    Return -1 ;Invalid Blue value
    EndIf

    [/autoit][autoit][/autoit][autoit]

    $dc = DLLCall("user32.dll","int","GetDC","hwnd",0)
    $n_ramp = DllStructCreate("short[" & (256*3) & "]")

    [/autoit][autoit][/autoit][autoit]

    For $i = 0 to 256

    [/autoit][autoit][/autoit][autoit]

    $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

    [/autoit][autoit][/autoit][autoit]

    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

    [/autoit][autoit][/autoit][autoit]

    Next

    [/autoit][autoit][/autoit][autoit]

    $ret = DLLCall("gdi32.dll","int","SetDeviceGammaRamp", _
    "int",$dc[0],"ptr",DllStructGetPtr($n_Ramp))

    [/autoit][autoit][/autoit][autoit]

    $dc = 0
    $n_Ramp = 0

    [/autoit][autoit][/autoit][autoit]

    EndFunc

    [/autoit]


    edit: uups, hast du schon bekanntschaft gemacht ^^'