Windows Explorer durch ein anderes Programm ersetzen
Ich musste heute für einen bestimmten Account die normale Windows Shell (Explorer.exe) durch ein anderes Programm ersetzen. Das Verhalten sollte dabei derart sein, das beim beenden dieses anderen Programmes der Account direkt abgemeldet wird.
Zunächst braucht man dazu ein kleines Programm, das die "eigentliche" Shell startet, darauf wartet das der Shell-Prozess beendet wird, und dann den Abmeldevorgang einleitet. Sowas kann man zum Beipiel als Skript anlegen:
REM Starten
StartProcessAndWait "ZuStartendesProgramm.exe"
REM Abmelden
Set oOS = GetObject("winmgmts:{(Shutdown)}").ExecQuery("Select * from Win32_OperatingSystem")
For Each oOperatingSystem in oOS
oOperatingSystem.Win32Shutdown(4)
Next
Function StartProcessAndWait( processName)
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2:Win32_Process")
errResult = objWMIService.Create("C:\temp\" & processName, "C:\temp\", null, intPosID)
Set objWait = GetObject("winmgmts:\\.\root\cimv2")
Set colProcesses = objWait.ExecNotificationQuery("Select * From __InstanceDeletionEvent " & "Within 1 Where TargetInstance ISA 'Win32_Process'")
mustWait = true
Do while mustWait
Set objProcess = colProcesses.NextEvent
If objProcess.TargetInstance.ProcessID = intPosID Then
mustWait = false
End If
Loop
StartProcessAndWait = true
End Function
Jetzt braucht man nur noch einen Eintrag in der Registry, der sich darum kümmert, das dieses Skript (nennen wir es "shell.vbs") startet. Der findet sich unter
HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\Winlogon
Der Key hat den Namen "Shell" und als Wert (für dieses Beispiel) "cscript c:\temp\shell.vbs"