...ohne den (unzuverlässigen) Autostart benutzen zu müssen.
Das als Shell registrierte Programm, wird als erstes, noch vor den Autostarts ausgeführt! Auf normalen Windowssystemen ist das natürlich der Explorer, also die explorer.exe.
In manchen Situationen ist es aber wichtig, ein anderes Programm zuerst zu starten. Zum Beispiel könnte man so ein Anmeldeprogramm
im Stil des Windowslogon realisieren.
Der Shell steht in der Registry unter folgendem Key. Diesen Code benutzten wir um den Shell zu ändern:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| uses [...], Registry;
[...]
procedure TForm1.Button1Click(Sender: TObject); var Reg : TRegistry; begin reg := TRegistry.Create; with reg do begin try RootKey := HKEY_LOCAL_MACHINE; OpenKey('Software\Microsoft\Windows NT\CurrentVersion\Winlogon', true); WriteString('Shell', 'meinprogramm.exe'); finally reg.Free; end; end; end; |
Folgenden Code benutzten wir um den Shell dann wieder auf den Explorer zu setzten, woraufhin der PC wieder normal benutzt werden kann, die folgende Prozedur
muss in eurem Programm vorkommen, sonst gibt es keine Möglichkeit mehr den Shell wieder auf den Explorer zu setzten, und nur mit diesem funktioniert Windows so wie man es gewohnt ist!
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| uses [...], Registry, ShellApi;
[...]
var Reg : TRegistry; begin reg := TRegistry.create; try with Reg do begin try reg.RootKey := HKEY_LOCAL_MACHINE; Reg.OpenKey('Software\Microsoft\Windows NT\CurrentVersion\Winlogon', true); Reg.WriteString('Shell', 'explorer.exe'); finally Reg.Free; end; end; finally try sleep(3000); ShellExecute(0, Nil, PChar('explorer.exe'), Pchar(''), Pchar(''), SW_NORMAL); finally close; end; end; end; |
Erst muss der Shell wieder auf Explorer.exe gelegt werden, danach erst wird der Explorer wieder gestartet.
Wenn ihr den Shell nicht umstellen, wenn ihr z.B. keine Administratorrechte habt, wird der Explorer nicht unnordnungsgemäß starten!
Auf jedenfall ist äußerste Vorsicht beim arbeiten geboten! Wenn ihr euch keine Hintertür einbaut, um den Shell wieder zurückzusetzten, müsst ihr Windows unter umständen neu installieren!
Vielen dank an Christian Seehase, der mir die ganze Geschichte erklärt hat!
In Absprache mit
Karlson folgende Ergänzungen:
Die oben genannten Hintertüren ergeben sich wie folgt (entsprechende Benutzerrechte vorausgesetzt):
arj hat folgendes geschrieben: |
Task-Manager aufrufen (STRG+ALT+ENTF)
Datei -> Ausführen -> regedit
und Shell wieder von Hand eintragen.
Ausloggen. Und wieder neu einloggen. |
digi_c hat folgendes geschrieben: |
Oder einfach im taskmanager->ausführen->explorer aber das ist natürlich nicht so "nachhaltig" |
Vielen Dank an
arj und
digi_c für die Tipps.
Moderiert von jasocul: Ergänzungen aus Diskussion hinzugefügt.