Abwesenheitsmodus (AWAY-Mode) erkennen

  • Hallo,

    mein PC läuft als Videorecorder (Win7 + DVBViewer + RecordingService(RS)). Der RS fängt den Standby bei laufender Aufnahme ab und der Rechner befindet sich dann im sogenannten AWAY-Mode oder Abwesenheitsmodus.

    Auf meinem PC laufen im Hintergrund auch AU3-Scripte. Damit ich nun flexibel reagieren kann, möchte ich mit AutoIt ermitteln, ob sich der PC im Abwesenheitsmodus befindet.

    In Windows müssen irgendwo über das PowerManagement Flags vorhanden sein. Ich habe aber keinen Plan mit welcher DLL oder wie ich die Sache anpacken kann.

    Kann mir jemand helfen?

  • Hey Spider,

    danke für die Antwort. Leider hilft mir das nicht weiter.

    In meinem Fall ist es so, dass der AWAY-Mode (also ein Energiesparmodus ähnlich S3) aktiv sein kann. In diesem Modus laufen die gestarteten AU3-Scripte nach wie vor.

    Im AWAY-Mode ist es aber so, dass der Bildschirm und Sound deaktiviert sind. Das heißt alle Bildschirmausgaben z.B. msgbox, oder der beep-Befehl werden unterdrückt.

    Mein Script weiß aber davon nichts. Deshalb muss ich erkennen, ob ich im AWAY-Mode bin. Nur wie?

  • Hi, ich habe noch recherchiert und bin auf folgendes gekommen:

    Den AWAY-Mode (ist im übrigen ein besonderer S0-State lt. MS-Definition) kann man -wie jeden beliebigen Energiesparmodus S3/S4 - mit einem Timer-Objekt verlassen. Steht hier:

    http://msdn.microsoft.com/en-us/library/…5(v=vs.85).aspx
    --> "Use a waitable timer object ..." und "To specify that the system
    should wake when the timer is signaled, set the fResume parameter to
    TRUE."

    Toll. Nun fehlt mir der weitere Hintergrund, wie ich das in ein AutoIt-Script packen kann. Kann mir hier jemand weiterhelfen?

    • Offizieller Beitrag

    Hey,

    Also um herauszufinden wann das System in den Suspend Modus geht habe ich dir hier mal was geschrieben, sollte eigentlich auch für den Away Mode gehen. Was für ein Betriebsystem benutzt du?

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    Global Const $PBT_APMRESUMESUSPEND = 0x12
    Global Const $PBT_APMSUSPEND = 0x4

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

    GUICreate("")
    GUIRegisterMsg($WM_POWERBROADCAST,"WM_POWERBROADCAST")

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

    While Sleep(100)
    ToolTip(@SEC&"."&@MSEC)
    WEnd

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

    Func WM_POWERBROADCAST($hWnd, $iMsg, $wParam, $lParam)
    Switch $wParam
    Case $PBT_APMSUSPEND
    ConsoleWrite(@HOUR&":"&@MIN&":"&@SEC&"."&@MSEC&" - Leg mich schlafen!" & @CRLF)
    ;Hier schreibst du was er tun soll wenn er im Suspens Modus ist
    Case $PBT_APMRESUMESUSPEND
    ConsoleWrite(@HOUR&":"&@MIN&":"&@SEC&"."&@MSEC&" - Bin wieder wach!" & @CRLF)
    ;Hier schreibst du was er tun soll wenn er wieder aufwacht
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc

    [/autoit]

    Gruß,
    Spider

  • Hey, das ist ja cool. Da wird ja richtig gezaubert.

    Die Zeile GUIRegisterMsg($WM_POWERBROADCAST,"WM_POWERBROADCAST")
    und die Konstanten $PBT_APMRESUMESUSPEND + $PBT_APMSUSPEND sind genial. Da wäre ich nie drauf gekommen.

    Ich glaube nur, dass ich noch nicht zwischen AWAY-Mode und SUSPEND unterscheiden kann. Es sei denn der Paramter $wParam liefert noch einen weiteren Wert.
    Oder evtl. die anderen beiden Parameter $iMsg oder $lParam.

    by the way: Ich benutze Windows 7, 64-Bit.

    Gruß
    Joe

  • Ich habe das Script mal ausprobiert.
    War praktisch, da der RS gerade aufnimmt.
    Somit geht der PC bei einem Druck auf die Standby-Taste in den AWAY-Modus und siehe da:

    Die Funktion WM_POWERBROADCAST scheint nicht aufgerufen zu werden.
    Ich habe dazu extra noch vor der CASE-Anweisung ein Consolewrite eingebaut damit ich sehen kann, wann die Funktion aufgerufen wird.
    Aber beim Eintreten des AWAY-Modus scheint die Funktion nicht aufgerufen zu werden. Kann das sein?

    Einmal editiert, zuletzt von Crazyjoe (4. November 2014 um 20:54)