Hier ein Beispiel in PureBasic:
Code: Alles auswählen
EnableExplicit
Declare WindowCallback( hWnd, uMsg, wParam, lParam )
Declare AppendLog( msg.s )
Global winMain, edLog
Define wEvent
winMain = OpenWindow( #PB_Any, #PB_Ignore, #PB_Ignore, 400,200, "Test some events!", #PB_Window_SystemMenu | #PB_Window_TitleBar )
edLog = EditorGadget( #PB_Any, 8, 8, 400-16, 200-16, #PB_Editor_ReadOnly )
AddKeyboardShortcut( winMain, #PB_Shortcut_Insert | #PB_Shortcut_Control, 1 )
SetWindowCallback( @WindowCallback() )
AppendLog( "Program started" )
Repeat
wEvent = WaitWindowEvent(100)
Select wEvent
Case #PB_Event_CloseWindow
CloseWindow(winMain)
Break
Case #PB_Event_Menu
If EventMenu() = 1
AppendLog( InputRequester( "Log message", "Your log message:", "") )
EndIf
EndSelect
ForEver
End
#PBT_APMPOWERSTATUSCHANGE = $000A
#PBT_APMRESUMEAUTOMATIC = $0012
#PBT_APMRESUMESUSPEND = $0007
#PBT_APMSUSPEND = $0004
#PBT_POWERSETTINGCHANGE = $8013
;Windows Server 2003 And Windows XP: The following events are also supported:
#PBT_APMBATTERYLOW = $0009
#PBT_APMOEMEVENT = $000B
#PBT_APMQUERYSUSPEND = $0000
#PBT_APMQUERYSUSPENDFAILED = $0002
#PBT_APMRESUMECRITICAL = $0006
Procedure WindowCallback( hWnd, uMsg, wParam, lParam )
Select uMsg
Case #WM_POWERBROADCAST
Select wParam
Case #PBT_APMPOWERSTATUSCHANGE
AppendLog( "PBT_APMPOWERSTATUSCHANGE" )
Case #PBT_APMRESUMEAUTOMATIC
AppendLog( "PBT_APMRESUMEAUTOMATIC" )
Case #PBT_APMRESUMESUSPEND
AppendLog( "PBT_APMRESUMESUSPEND" )
Case #PBT_APMSUSPEND
AppendLog( "PBT_APMSUSPEND" )
Case #PBT_POWERSETTINGCHANGE
AppendLog( "PBT_POWERSETTINGCHANGE" )
;Windows Server 2003 And Windows XP: The following events are also supported:
Case #PBT_APMBATTERYLOW
AppendLog( "PBT_APMBATTERYLOW" )
Case #PBT_APMOEMEVENT
AppendLog( "PBT_APMOEMEVENT" )
Case #PBT_APMQUERYSUSPEND
AppendLog( "PBT_APMQUERYSUSPEND" )
Case #PBT_APMQUERYSUSPENDFAILED
AppendLog( "PBT_APMQUERYSUSPENDFAILED" )
Case #PBT_APMRESUMECRITICAL
AppendLog( "PBT_APMRESUMECRITICAL" )
EndSelect
Default
EndSelect
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
Procedure AppendLog( msg.s )
AddGadgetItem( edLog, -1, FormatDate( "%yyyy.%mm.%dd @ %hh:%ii:%ss: ", Date() ) + msg )
EndProcedure
Ergebnis bei mir unter Windows 7:
Code: Alles auswählen
2013.04.24 @ 09:35:45: Program started
2013.04.24 @ 09:36:02: Standby Windows 7
2013.04.24 @ 09:36:14: PBT_APMSUSPEND
2013.04.24 @ 09:36:40: PBT_APMRESUMEAUTOMATIC
2013.04.24 @ 09:36:40: PBT_APMRESUMESUSPEND
2013.04.24 @ 09:38:40: Hibernate Windows 7
2013.04.24 @ 09:38:44: PBT_APMSUSPEND
2013.04.24 @ 09:39:40: PBT_APMRESUMESUSPEND
2013.04.24 @ 09:39:43: PBT_APMRESUMEAUTOMATIC