Nun gibt es verschiedene Tools, die entsprechende Möglichkeiten bieten. Das wohl bekannteste, das MCE Standby Tool, kurz MST, wollte ich nicht einsetzen, da ich persönlich unter Windows 7 damit, auch mit der daran angepassten Version, keine guten Erfahrungen gesammelt habe.
Nach ein wenig Recherche im Internet, fanden sich ein paar gute Scriptvorlagen in VBScript, die das Monitoring des Standby/Resume Ereignisse beherrschten und zudem flexibel die Möglichkeit boten, Prozesse beim Ereigniseintritt zu terminieren bzw. zu starten.
Zugefügt habe ich noch die automatische Ermittlung des Windows/eHome-Verzeichnisses, die Abfrage, ob das Skript bereits ausgeführt wird, um mehrfaches Starten des Prozesses zu verhindern und die Bedingung, dass MediaCenter nur dann nach dem Aufwecken gestartet wird, wenn es vor dem Standby aktiv war.
Hier nun das fertige Script (ich bitte um Nachsicht, da ich kein wirklicher Experte auf dem Gebiet des Scriptings bin):
Das Script wird einfach als "S3Monitor.vbs" abgespeichert und per Drag & Drop in den Autostart-Ordner kopiert. Nach dem Neustart des PCs läuft es brav im Hintergrund und wartet auf seinen Einsatz.
Option Explicit
Const cntResumefromSuspend = 7
Const cntEventEnteringSuspend = 4
Dim wmiPowerManagementEvent
Dim objProcess, colProcesses
Dim objShell, wshShell
Dim intEventType
Dim ehCounter : ehCounter = 0
Dim ehFolder : ehFolder = "C:\Windows"
On Error Resume Next
If AnzahlLaufendeVBS( WScript.ScriptFullName ) > 1 Then
MsgBox "Script wird bereits ausgeführt!", , WScript.ScriptName
WScript.Quit
End If
Set wshShell = CreateObject("WScript.Shell")
ehFolder = wshShell.ExpandEnvironmentStrings("%WINDIR%") & "\ehome"
Set wmiPowerManagementEvent = GetObject("winmgmts:").ExecNotificationQuery("Select * from Win32_PowerManagementEvent")
If Err = 0 Then
Do
intEventType = wmiPowerManagementEvent.NextEvent.EventType
Select Case intEventType
Case cntResumefromSuspend
If ehCounter > 0 Then
WScript.Sleep 5000
Set objShell = CreateObject("Shell.Application")
objShell.ShellExecute "ehshell.exe", "", ehFolder, "open", 10
End If
Set objShell = Nothing
Case cntEventEnteringSuspend
Set colProcesses = GetObject("winmgmts:").ExecQuery("select * from Win32_Process where name='ehshell.exe'")
ehCounter = colProcesses.Count
For Each objProcess in colProcesses
objProcess.Terminate(0)
Next
End Select
If Err <> 0 Then
Wscript.Echo Now() & " Fehler bei der Verarbeitung! Fehler-Nr. " & Err & "(" & Err.Description & ")"
Err.Clear
End If
Loop
else
Wscript.Echo Now() & " Fehler beim Initialisieren! Fehler-Nr. " & Err & "(" & Err.Description & ")"
End If
Function AnzahlLaufendeVBS( VBScripts )
'On Error Resume Next
AnzahlLaufendeVBS = 0
Const wbemFlagReturnImmediately = &h10
Const wbemFlagForwardOnly = &h20
Dim strComputer : strComputer = "."
Dim objWMIService : Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Dim colItems : Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Process", "WQL", wbemFlagReturnImmediately + wbemFlagForwardOnly)
Dim objItem
For Each objItem In colItems
If InStr( LCase( objItem.CommandLine), LCase( VBScripts ) ) > 0 Then
If InStr( LCase( objItem.CommandLine ), "script.exe" ) > 0 Then
AnzahlLaufendeVBS = AnzahlLaufendeVBS + 1
End If
End If
Next
End Function
Da das Windows MediaCenter nun jedesmal nach dem Aufwecken mit einem Riesen-"Ta-ta" lautstark neu startet, habe ich kurzerhand die Startup-Effekte mittels folgender Registry-Tweaks abgestellt:
In Kombination mit dem Skript im Autostart habe ich bisher ein konstant werkelndes Windows 7 mit MediaCenter ohne die erneute, bittere Erfahrung eines "Black Screens" nach dem Aufwecken.
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Media Center\Settings\MCE.PerUserSettings]
"enableStartupAnimation"=dword:00000000
"enableStartupSound"=dword:00000000
Zur Nachahmung empfohlen....
Keine Kommentare:
Kommentar veröffentlichen