Announcement

Collapse
No announcement yet.

Energiespar-/ MS-DOS-Modus starten

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

  • Energiespar-/ MS-DOS-Modus starten

    Hallo,<p>
    leider habe ich im Forum bisher dazu noch nichts gefunden. In meinem Programm soll beim drücken des Button1 Windows in den Energiesparmodus umschalten (mit ExitWindowsEX funktioniert es ja nicht). Und mit Button2 soll Windows im MS-DOS Modus gestartet werden. Wie funktioniert das? <p> Nächstes Problem: Weiter unten im Ordner WIN32API konnte ich ExitWindowsEx unter WinNT/2000 und im Ordner Diverses finden. Leider half mir das nur bedingt weiter. Wenn ich die <br><b>procedure GetShutdownPrivilege; </b><br> aufrufe (D5) bekomme ich jedes mal eine Fehlermeldung. Kann es sein, dass ich zuerst das Betriebssystem ermitteln muss (z.B Win95/WinNT) und je nach Betriebssystem die Privilegien laden muss? Stimmt dann das nachfolgende Beispiel? <p> procedure TForm1.WindowsEnde(Sender: TObject);<br> begin <br> GetShutdownPrivilege; <br> ExitWindowsEx(EWX_REBOOT, 0);<br> end; <p> Also Windows soll sowohl in Win9x und WinNT herunterfahren. Was ist Falsch?<p> Letze Frage: Was macht eignetlich der Befehl ExitWindowEX(EWX_POWEROFF, 0)? <p> Danke jetzt schon.

  • #2
    Hallo,

    hinter GetShutdownPrivilege verbirgt sich <b>keine</b> Win32-API-Funktion, das muss eine private Methode/Prozedur sein. Unter Windows NT/Windows 2000 muss der aufrufende Prozess das Privileg <b>SE_SHUTDOWN_NAME</b> besitzten, dieses Privileg scheint GetShutdownPrivilege über die Win32-API-Funktion <b>AdjustTokenPrivileges</b> anzufordern.

    Für die Win32-API-Funktion <b>ExitWindowsEx</b> findet sich die folgende Beschreibung in der Hilfe: "<i>The ExitWindowsEx function either logs off the current user, shuts down the system, or shuts down and restarts the system. It sends the WM_QUERYENDSESSION message to all applications to determine if they can be terminated. </i>".

    Die Sache mit dem Energiesparmodus ist in erster Linie eine Frage der Rechner-Hardware und in zweiter Linie eine Frage der Software. Ohne gründliches Durcharbeiten der entsprechenden Abschitte des Platform SDK (siehe <b>SetSystemPowerState</b> und <b>About Power Management</b>) würde ich so etwas nicht in Angriff nehmen ;-

    Comment


    • #3
      Hallo Andreas,<p>
      1. Das mit dem Energiesparmodus hat super funktioniert. Ich habe zuerst ermittelt, welche Soft- und Hardware der Anwender nutzt und dann die Procedure <b> SetSystemPowerState(BOOL, BOOL)</b> aufgerufen. Danke. <p>
      2. Zur Beschreinung von <b>ExitWindowsEx</b> hatte ich eine etwas andere. Deine Beschreinung kommt meinem vermuteten Ergebnis sehr nahe. <p>
      3. <b>MS-DOS-Modus</b> Es muss doch eine Procedure oder Function geben, die Windows beendet und MS-DOS startet. Ich habe unter der MS-Hilfe schon unter den Stichwörtern: command, command.com, dos, ms-dos gesucht, aber leider noch nichts gefunden. Kannst Du mir da ggf. noch einen Tipp geben?<p>
      4. Das mit den <b>Privileg</b> habe ich immer noch nicht ganz durchschaut. Wahrscheinlich denke ich zu umständlich oder ich habe eine Kleinigkeit übersehen. Was ich bisher glaube Verstanden zu haben:<BR>
      - SE_SHUTDOWN_NAME wir über AdjustTokenPrivileges angefordert<BR>
      - GetShutdownPrivilege wird im privaten Abschnitt der Deklaration über die Message SE_SHUTDOWN_NAME aufgerufen. <p>
      Frage: Stimmen meine Überlegungen und wie muss AdjustTokenPrivileg im Quelltext mit eingebunden werden. Kannst Du evtl. mir ein kleines Quelltextbeispiel geben? <p> Danke jetzt schon einmal

      Comment


      • #4
        Hallo,

        ich habe bereits mehrere Beispiele für den Aufruf von AdjustTokenPrivileg hier im Forum vorgestellt. Diese Beispiele lassen sich über die Suche nach der Zeichenkette <b>AdjustTokenPrivileg</b> schnell auffinden ;-

        Comment


        • #5
          HI

          Der MS-DOS Modus wird durch Ausführen einer PIF-Datei erreicht. Diese müsste im ..\Windows\ Ordner stehen. Ansonsten kannst'e ja auch Deine eigene PIF-Datei anlegen, und dort in den Optionen sagen das der MS-DOS Modus gestartet werden soll.

          Gruß Hage

          Comment


          • #6
            Hallo Hagen,<p>
            leider hat mich Deine Antwort nicht richtig weitergebracht, denn mit einer PIF-Datei starte ich die <b>MS-DOS-Eingabeaufforderung</b>. Ich hingegen möchte, dass <b>Windows beendet</b> wird und anschliessend in den <b>MS-DOS-Modus</b> fährt.<br> Es muss doch eine Win32 API dazugeben! Oder eine andere möglichkeit!

            Gruß Elma

            Comment


            • #7
              Hm

              Nun öffne doch mal diese MS-DOS PIF-Datei (Eigenschaften), klick auf Page "Programm" und dort, unten auf den Button "Erweitert...". Es geht ein Dialog auf, dort die Checkbox "MS-DOS Modus" anklicken.

              Gruß Hage

              Comment


              • #8
                Hallo Hagen,<p>
                upps, da hatte ich wohl was übersehen. Danke für Deinen Tipp. Er hat super funktioniert. Ich war immer der Meinung, PIF-Dateien starten nur die MS-DOS-Eingabeaufforderung (kenne ich noch von Win3.0). Du hast mich eines besseren belehrt. <p> Danke

                Comment


                • #9
                  Hallo, <p> unter Windows NT/2000 musste ich festestellen, daß die Funktion <b>SetSystemPowerState</B> nicht zur Verfügung steht. Gibt es da eine andere Möglichkeit, den Rechner in den Energiesparmodus zu fahren? Ich hab schon einiges Versucht, doch leider ohne Erfolg.<p> Danke für eure Hilfe

                  Comment


                  • #10
                    Hallo,

                    in der Hilfe des Microsoft Platform SDK ist zur API-Funktion <b>SetSystemPowerState</b> folgendes vermerkt:

                    <i>Requirements:<br>
                    Windows NT/2000: Requires Windows 2000. <br>
                    Windows 95/98: Requires Windows 95 or later.</i>

                    Somit steht diese Funktion nur unter dem "alten" Windows NT 4 nicht zur Verfügung

                    Comment


                    • #11
                      Hallo Andreas,<p> Soweit alls verstanden. Nur in der Microsoft Plattform SDK (in meiner vorliegenden Version) steht leider nichts drin, daß man auch für den Standbymodus vorher AdjustTokenPrivileges aufrufen muss...<BR> Irgendwo im Forum habe ich schon vor längerer Zeit, den Link zur Microsoft-Seite gefunden, wo man die aktuelle SDK-Hilfe herrunterladen kann, aber ich kann ihn nicht mehr finden..

                      Comment

                      Working...
                      X