Announcement

Collapse
No announcement yet.

Shellaustausch (ein Programm "vor" Windows starten)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Shellaustausch (ein Programm "vor" Windows starten)

    Ich hatte ein Problem welches ich nun teilweise gelöst habe, bei meinen Recherchen hier, war mir aufgefallen, daß einige delphischreibende Zeitgenossen hierzu einen Ansatz suchen.
    Der Teil den ich gelöst habe:
    In der Datei System.ini den Eintrag shell=Explorer.exe wird von einem Programm, gestartet in der registry unter ...\runservices, wie gewünscht geändert (mein Problem nun:Ich weis noch nicht wie,später mehr). Nun lautet er z.B. shell=Security.exe was zur folge hat, daß das Programm Security.exe statt dem WindowsDesktop gestartet wird(soweit alle Lösungsansätze die ich fand).
    Problem(aller):
    Wie kommt man zurück zum WindowsDesktop?
    Lösung:
    Die Zeile shell=Security.exe zurück auf shell=explorer.exe ändern und folgende Zeile zum Aufruf des WindowsDesktop benutzen:

    winexec('rundll32.exe Shell32,SHExitWindowsEx -',sw_normal);

    !!!ACHTUNG DAS DING IST CASE SENSITIVE!!!

    ???Letztes Hinderniss???
    Mein Problem wie ändere ich in der System.ini (Textdatei) den Shelleintrag?
    Oder wie ersetze ich geziehlt eine(die zweite[oder was auch ginge die ersten beiden]) Zeile einer Textdatei ohne den Rest zu behelligen?

    Wenn mir das jemand Verraten könnte wäre der Shellaustausch Perfekt!

    (Fast Perfekt wie man die Windows Anmeldung wegbekommt weis ich auch nicht wenn dazu jemandem was einfällt immer mal her damit;-))

  • #2
    Hallo,<p>
    zum INI-Problem. Delphi stellt mit <b>TIniFile</b> bereits die entsprechenden Funktionen bereit.
    <pre>
    procedure WriteIniData(S: string);
    var
    Ini1: TIniFile;
    begin
    Ini1 := TIniFile.Create('system.ini');
    Ini1.WriteString('boot', 'shell', S);
    Ini1.Free;
    end;
    </pre>
    <ul><li>"boot" entspricht dem Abschnitt "[boot]" in der System.ini
    <li>"shell" entspricht dem Schlüsselnamen "shell=" in der System.ini
    <li>Die Variable "S" kann dann in diesem Fall "Explorer.exe" oder "Security.exe" als String enthalten.</ul><p>
    <b>Anmerkungen:</b>
    <ul><li>Um Windows neu zu starten, würde ich direkt auf die API zurückgreifen und nicht den Umweg über Rundll.exe gehen. Rundll.exe macht nichts anderes als auf die API zurückzugreifen. Also warum nicht gleich <b>ExitWindowsEx()</b> verwenden?
    <li>Ich halte es für nicht sehr gut, wenn man in der System.ini herumbastelt. Es gibt durchaus sehr gute andere Wege. Es ist nur die Frage, was man bewerkstelligen möchte. Windows stellt dafür u.a. sogar geeignete API-Funktionen bereit.
    <li>Mit Hilfe der Registrierungsdatei kann man eine automatische Windows-Anmeldung einstellen. Abschaffen kann man die Anmeldung nur dann, wenn kein Netzwerk und keine Mehrfachbenutzung eingestellt wird. Viele Tipps habe ich auf http://www.windowspage.de/ gesammmelt.
    </ul&gt

    Comment


    • #3
      Ich will aber nicht das System neubooten sondern Windows nur anweisen die shell neu zustarten, gibt es dafür einen API-Befehl?
      (Wär nett, wenn die Antwort als Delphi Code gepostet wäre, da ich noch nicht mit der API gearbeitet habe)

      Danke schon mal für den Tip mit TiniFile

      Comment


      • #4
        Hallo,<p>
        <i>winexec('rundll32.exe Shell32,SHExitWindowsEx -',sw_normal);</i><p>
        Welche Windows-Version wird verwendet? In einigen Systemen gibt es diese Funktion nicht

        Comment


        • #5
          Windows Homeserie (genauer ME

          Comment

          Working...
          X