还是自行解决了,对论坛有点失望#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
|