Hey,
ich untersuche gerade die WM_POWERBROADCAST Nachrichten. Konkret möchte ich unterscheiden ob das Aufwecken durch einen Benutzer oder durch einen automatischen Task bewirkt wurde.
Hier mein Testskript:
Spoiler anzeigen
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
;#include <myscripts_constants.au3>
#include <file.au3>
#include <date.au3>
Global Const $PBT_APMRESUMESUSPEND = 0x00000007 ;7 (0x7)
Global Const $PBT_APMPOWERSTATUSCHANGE=0x0000000A ;10 (0xA)
Global Const $PBT_APMRESUMEAUTOMATIC=0x00000012 ;18 (0x12)
Global Const $PBT_APMSUSPEND=0x00000004 ;4 (0x4)
Global Const $PBT_POWERSETTINGCHANGE=0x00008013 ;32787 (0x8013)
Global $title = "WM_POWERBROADCAST_Debug"
Global $hGUI = GUICreate($title, 500, 500)
Global $hedit = GUICtrlCreateEdit("", 0, 0, 500, 420)
GUICtrlSetData(-1, "Startup")
Global $hsave = GUICtrlCreateButton("Save", 20, 450, 50, 30)
Global $htest = GUICtrlCreateButton("Test", 120, 450, 50, 30)
Global $log = @DesktopDir & "\" & $title & ".txt"
Global $counter = 1
GUIRegisterMsg($WM_POWERBROADCAST, "_MY_WM_POWERBROADCAST")
GUISetState(@SW_SHOW, $hGUI)
While 1
$GUIMsg = GUIGetMsg()
Switch $GUIMsg
Case $GUI_EVENT_CLOSE
ExitLoop
Case $hsave
_FileWriteLog($log, GUICtrlRead($hedit), 1)
MsgBox(0, "Speicher", "Log gespeichert")
EndSwitch
WEnd
Exit
[/autoit] [autoit][/autoit] [autoit]Func _MY_WM_POWERBROADCAST($hWnd, $Msg, $wParam, $lParam)
[/autoit] [autoit][/autoit] [autoit]GUICtrlSetData($hedit,GUICtrlRead($hedit) &@crlf & $counter & " - hwnd=" & $hWnd)
GUICtrlSetData($hedit,GUICtrlRead($hedit) &@crlf & $counter & " - msg=" & $Msg)
GUICtrlSetData($hedit,GUICtrlRead($hedit) &@crlf & $counter & " - lParam" & $lParam)
Switch $wParam
Case $PBT_APMRESUMESUSPEND
GUICtrlSetData($hedit,GUICtrlRead($hedit) &@crlf & _NowCalc()& " - " & $counter & " - wParam=PBT_APMRESUMESUSPEND=" & $wParam)
case $PBT_APMRESUMEAUTOMATIC
GUICtrlSetData($hedit,GUICtrlRead($hedit) &@crlf & _NowCalc()& " - " & $counter & " - wParam=PBT_APMRESUMEAUTOMATIC=" & $wParam)
Case $PBT_APMPOWERSTATUSCHANGE
GUICtrlSetData($hedit,GUICtrlRead($hedit) &@crlf & _NowCalc()& " - " & $counter & " - wParam=PBT_APMPOWERSTATUSCHANGE=" & $wParam)
case $PBT_APMSUSPEND
GUICtrlSetData($hedit,GUICtrlRead($hedit) &@crlf & _NowCalc()& " - " & $counter & " - wParam=PBT_APMSUSPEND=" & $wParam)
Case Else
GUICtrlSetData($hedit,GUICtrlRead($hedit) &@crlf & _NowCalc()& " - " & $counter & " - wParam" & $wParam)
EndSwitch
$counter += 1
[/autoit] [autoit][/autoit] [autoit]EndFunc ;==>_MY_WM_POWERBROADCAST
[/autoit]Damit erhalte ich folgende Nachrichten:
Aufwecken durch eine Benutzeraktion (Tastenanschlag, Doppelclick usw.)
ZitatAlles anzeigen
4 - hwnd=0x01A302E4
4 - msg=536
4 - lParam0x00000000
2012/12/06 21:44:31 - 4 - wParam=PBT_APMSUSPEND=0x00000004
5 - hwnd=0x01A302E4
5 - msg=536
5 - lParam0x00000000
2012/12/06 21:44:49 - 5 - wParam=PBT_APMRESUMEAUTOMATIC=0x00000012
6 - hwnd=0x01A302E4
6 - msg=536
6 - lParam0x00000000
2012/12/06 21:44:49 - 6 - wParam=PBT_APMRESUMESUSPEND=0x00000007
Dieses Log verstehe ich.
Zuerst kommt die PBT_APMRESUMEAUTOMATIC Nachricht, die immer abgefeuert wird sobald der PC reaktiviert wird.
Anschließend kommt die PBT_APMRESUMESUSPEND Nachrichti um zu erkennen, dass der Benutzer die Reaktivierung bewirkt hat.
Aufwecken durch eine geplante Aufgabe:
ZitatAlles anzeigen
1 - hwnd=0x01A302E4
1 - msg=536
1 - lParam0x00000000
2012/12/06 21:17:46 - 1 - wParam=PBT_APMSUSPEND=0x00000004
2 - hwnd=0x01A302E4
2 - msg=536
2 - lParam0x00000000
2012/12/06 21:20:08 - 2 - wParam=PBT_APMRESUMEAUTOMATIC=0x00000012
3 - hwnd=0x01A302E4
3 - msg=536
3 - lParam0x00000000
2012/12/06 21:22:53 - 3 - wParam=PBT_APMRESUMESUSPEND=0x00000007
Hier wird trotzdem die PBT_APMRESUMESUSPEND abgesetzt obwohl keine Benutzereingabe erfolgte.
Die Nachricht kommt 2 Skeunden verspätet an. Ist das aufgrund der ersten Benutzereingabe nach dem Standby?
Entspricht irgendwie nicht der Beschreibung im msdn: http://msdn.microsoft.com/en-us/library/…v=vs.85%29.aspx
Oder wie seht ihr das? Ist das bei euch genauso?
Wie kann ich jetzt zweifelsfrei unterscheiden wie der PC aufgeweckt wurde?
Gruß nuts