Monitor ON/OFF Fehler im Skript

  • Hallo ich hab hier ein Skript welches bei STRG+ALT+A den Monitor ausschaltet mit STRG+ALT+B sollte er wieder angehen, macht er aber nicht, wo liegt genau mein fehler?

    Spoiler anzeigen
    [autoit]

    Global $monoff = 2

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

    HotKeySet("{ESC}", "_exit")
    HotKeySet("^!a", "_1")
    HotKeySet("^!b", "_0")

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

    While 1
    Sleep(10)
    If $monoff = 1 Then
    MonitorToggle(1)
    EndIf
    If $monoff = 0 Then
    MonitorToggle(0)
    $monoff = 2
    EndIf
    WEnd

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

    Func _1()
    $monoff = 1
    EndFunc ;==>_1

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

    Func _0()
    $monoff = 0
    EndFunc ;==>_0
    Func _exit()
    MonitorToggle(0)
    Exit
    EndFunc ;==>_exit

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

    Func MonitorToggle($Off = 1)
    $opt = Opt("WinTitleMatchMode", 4)

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

    $WM_SYSCommand = 274
    $SC_MonitorPower = 61808
    $Power_Off = 2
    $Power_On = -1

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

    $HWND = WinGetHandle("classname=Progman")
    If $Off Then
    DllCall("user32.dll", "int", "SendMessage", "hwnd", $HWND, "int", $WM_SYSCommand, _
    "int", $SC_MonitorPower, "int", $Power_Off)
    Else
    DllCall("user32.dll", "int", "SendMessage", "hwnd", $HWND, "int", $WM_SYSCommand, _
    "int", $SC_MonitorPower, "int", $Power_On)
    EndIf
    Opt("WinTitleMatchMode", $opt)
    EndFunc ;==>MonitorToggle

    [/autoit]

    PS: MonitorToggle(1) -> ausschalten - ist deßhalb in einer Schleife, da sonst der Bildschirm bei jeder Mausbewegung wieder angeht, das möchte ich allerdings verhindern

    Freue mich auf Lösungen :)

    Einmal editiert, zuletzt von Reaker (7. Dezember 2009 um 18:16)

  • also bei mir funktioniert das script. welches OS hast du denn?
    bei windows 7 könnt ich mir vorstellen dass er wiedermal das RequireAdmin braucht.

    hab mir auch mal so ein script geschrieben. zu finden unter
    https://autoit.de/index.php?page…ght=#post118201

    Edit: sry link war falsch

  • ich habe Windows Vista...

    das blöde ist halt, dass ich jedes mal den PC neustarten darf und somit auch langsam keine lust mehr habe..ja ich werds mir mal ansehen danke

  • Ich hab mir zu dem Prob mal was anderes Überlegt: Ich hab einfach ne Schwarze GUI die größer war als der Bildschirm erzeugt, und die Maus mit Mousemove ausserhalb vom Bildschirm fixiert (in ner schleife halt)

    Geht um einiges einfacher und Funktioniert genauso gut.

    mfg

    Computers are like Airconditioning. They don´t work with open Windows.

  • Geht um einiges einfacher und Funktioniert genauso gut.

    Da geb ich dir recht.

    Wenn man allerdings energie sparen will isses anders doch n bisschen besser. So wars zumindest bei mir

  • also ich hab mir jetz mal die Funktion zu Recht gebastelt..falls es jemand zufällig braucht:
    Hier das Skript:

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.0.0
    Author: funkey
    Edited by: Schnitzel
    Official Thread: https://autoit.de/index.php?page=Thread&threadID=14461

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

    Script Function:
    En-/Disabling Monitor

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

    #ce ----------------------------------------------------------------------------

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

    #AutoIt3Wrapper_Res_LegalCopyright = ©funkey
    #AutoIt3Wrapper_Res_Fileversion = 2.0
    #AutoIt3Wrapper_Res_Description = Monitor-AutoStandby

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

    HotKeySet("^!{F12}", "_EnDisableMonitor")

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

    Opt("TrayMenuMode", 1)
    Opt("TrayOnEventMode", 1)
    Opt('GUIOnEventMode', 1)

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

    Global Const $lciWM_SYSCommand = 274
    Global Const $lciSC_MonitorPower = 61808
    Global Const $lciPower_Off = 2
    Global Const $lciPower_On = -1

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

    Global $title= "Monitor-AutoStandby"
    Global $aTime[14]

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

    Global $MonitorIsOff = False
    Global $EnableCheck = True

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

    While 1
    Sleep(20000)
    WEnd

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

    Func _Monitor_ON()
    $MonitorIsOff = False
    Local $Progman_hwnd = WinGetHandle('[CLASS:Progman]')

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

    DllCall('user32.dll', 'int', 'SendMessage', _
    'hwnd', $Progman_hwnd, _
    'int', $lciWM_SYSCommand, _
    'int', $lciSC_MonitorPower, _
    'int', $lciPower_On)
    EndFunc
    Func _Monitor_OFF()
    $MonitorIsOff = True
    Local $Progman_hwnd = WinGetHandle('[CLASS:Progman]')

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

    While $MonitorIsOff = True
    DllCall('user32.dll', 'int', 'SendMessage', _
    'hwnd', $Progman_hwnd, _
    'int', $lciWM_SYSCommand, _
    'int', $lciSC_MonitorPower, _
    'int', $lciPower_Off)
    _IdleWaitCommit(0)
    Sleep(20)
    WEnd
    EndFunc
    Func _IdleWaitCommit($idlesec)
    Local $iSave, $LastInputInfo = DllStructCreate ("uint;dword")
    DllStructSetData ($LastInputInfo, 1, DllStructGetSize ($LastInputInfo))
    DllCall ("user32.dll", "int", "GetLastInputInfo", "ptr", DllStructGetPtr ($LastInputInfo))
    Do
    $iSave = DllStructGetData ($LastInputInfo, 2)
    Sleep(60)
    DllCall ("user32.dll", "int", "GetLastInputInfo", "ptr", DllStructGetPtr ($LastInputInfo))

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

    Until (DllStructGetData ($LastInputInfo, 2)-$iSave) > $idlesec; Or $MonitorIsOff = False
    Return DllStructGetData ($LastInputInfo, 2)-$iSave
    EndFunc
    Func _Exit()
    _Monitor_ON()
    Exit
    EndFunc
    Func _EnDisableMonitor()
    $EnableCheck = False
    If $MonitorIsOff = True Then
    _Monitor_ON()
    Else
    _Monitor_OFF()
    EndIf
    EndFunc

    [/autoit]
  • Ich hab das damals immer nur Kurzzeitig verwendet um den Erzeihern im Internat nicht erklären zum Müsen warum wir um halb 2 Noch film schauen^^, deswegen war meins damals ausreichend.

    Mfg

    Übriens: sehr schön gemacht Reaker

    Computers are like Airconditioning. They don´t work with open Windows.