this i what im currently using to check standby messages from windows and react on them:
#include "au3_inc\GuiConstantsEx.au3" $logfile = @ScriptDir&"\mp_standby-hook.log" $delystdby = 30 ;seconds to delay standby $mes = "" Global $WM_POWERBROADCAST = 536 Global $PBT_APMQUERYSUSPEND = 0x0000 Global $PBT_APMQUERYSTANDBY = 0x0001 Global $PBT_APMQUERYSUSPENDFAILED = 0x0002 Global $PBT_APMQUERYSTANDBYFAILED = 0x0003 Global $PBT_APMSUSPEND = 0x0004 Global $PBT_APMSTANDBY = 0x0005 Global $PBT_APMRESUMECRITICAL = 0x0006 Global $PBT_APMRESUMESUSPEND = 0x0007 Global $PBT_APMRESUMESTANDBY = 0x0008 Global $PBT_APMBATTERYLOW = 0x0009 Global $PBT_APMPOWERSTATUSCHANGE = 0x000A Global $PBT_APMOEMEVENT = 0x000B Global $PBT_APMRESUMEAUTOMATIC = 0x0012 Global $PBTF_APMRESUMEFROMFAILURE = 0x00000001 Global $ES_DISPLAY_REQUIRED = 0x00000002; zero the display's idle timer Global $ES_SYSTEM_REQUIRED = 0x00000001; zero the system's idle timer Global $ES_CONTINUOUS = 0x80000000; keep the display or system on (doesn't work?) $hGUI = GUICreate("Standby", 1,1,1,1,-1) GUIRegisterMsg($WM_POWERBROADCAST, "Standby") ;hook into win32 pm API GUISetState(@SW_MINIMIZE,$hGUI) $g_szVersion = "MP_StandBy-Hook" If WinExists($g_szVersion) Then Exit ; It's already running AutoItWinSetTitle($g_szVersion) WriteToLog($g_szVersion&" started...") While 1 $GUIMsg = GUIGetMsg() Switch $GUIMsg Case $GUI_EVENT_CLOSE ExitLoop EndSwitch Sleep (60000) ; Sleep for a minute WEnd Func Standby($hWnd, $Msg, $wParam, $lParam) Switch $wParam Case $PBT_APMQUERYSUSPEND ; gets called first on standby request WriteToLog("PBT_APMQUERYSUSPEND received...") For $i=$delystdby to 1 Step -1 DllCall("kernel32.dll","int","SetThreadExecutionState","int", $ES_SYSTEM_REQUIRED) WriteToLog("Delaying Standby: "&$i&" s.") Sleep(1000) Next Case $PBT_APMSUSPEND ; gets called second on standby request WriteToLog("PBT_APMSUSPEND received...") WriteToLog("Entering Standby...") Case $PBT_APMRESUMEAUTOMATIC ; gets called first after resume WriteToLog("PBT_APMRESUMEAUTOMATIC received...") WriteToLog("Resuming from Standby..." Case $PBT_APMRESUMESUSPEND ; gets called second after resume WriteToLog("PBT_APMRESUMESUSPEND received...") WriteToLog("Checking MediaPortal...") Sleep(5000) If Not ProcessExists("mediaportal.exe") Then Run("c:\_mp\mediaportal.exe","c:\_mp") EndIf Sleep(5000) WriteToLog("Running RTC updater...") ShellExecute("timeupdate.au3","","c:\_tvtools\") Sleep(5000) WriteToLog("Faking user interaction...") $pos = MouseGetPos() MouseMove($pos[0]+50, $pos[1]+50) MouseMove($pos[0]-50, $pos[1]-50) MouseMove($pos[0], $pos[1]) Case $PBT_APMQUERYSTANDBY WriteToLog("PBT_APMQUERYSTANDBY received...") Case $PBT_APMQUERYSUSPENDFAILED WriteToLog("PBT_APMQUERYSUSPENDFAILED received...") Case $PBT_APMQUERYSTANDBYFAILED WriteToLog("PBT_APMQUERYSTANDBYFAILED received...") Case $PBT_APMRESUMECRITICAL WriteToLog("PBT_APMRESUMECRITICAL received...") Case $PBT_APMRESUMESTANDBY WriteToLog("PBT_APMRESUMESTANDBY received...") Case $PBT_APMSTANDBY WriteToLog("PBT_APMSTANDBY received...") Case $PBT_APMPOWERSTATUSCHANGE WriteToLog("PBT_APMPOWERSTATUSCHANGE received...") Case $PBT_APMOEMEVENT WriteToLog("PBT_APMOEMEVENT received...") Case Else WriteToLog("Some unknown standby related message received... WTF?") EndSwitch EndFunc Func WriteToLog($mes) $file=FileOpen($logfile,1) FileWrite($logfile,@MDAY&@MON&@YEAR&"-"&@HOUR&@MIN&@SEC&": "&$mes&@CRLF) FileClose($logfile) Endfunc
...i could use some guide on optimizing this baby and also maybe some of you API gods might help on how i could send the BROADCAST_QUERY_DENY message instead of using SetThreadExecutionState if it's feasible? Also if someone can show me how i can react on System booting and shutting down events ?
Thanks in advance...
g_
Edited by g_BonE, 21 November 2008 - 02:23 PM.







