Announcement

Collapse
No announcement yet.

windows beenden unter nt

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

  • windows beenden unter nt

    folgende befehle funktionieren unter nt nicht warum???

    1. ExitWindowsEx(EWX_LOGOFF,0); // Meldet Windows neu an <br>
    2. ExitWindowsEX(EWX_REBOOT,0); // Startet Windows neu<br>
    3. ExitWindowsEX(EWX_SHUTDOWN,0); // Windows wird bedingungslos beendet<br>

    mfg

    markus
    Herzliche Grüße

    Markus Lemcke
    barrierefreies Webdesign

  • #2
    Hallo,

    Windows NT ist ein sicheres System, auch wenn kritische Zeitgenossen diese Aussage sofort einschränken wollen ;-)<br>

    Bevor jemand ein laufendes NT herunterfahren darf, muss er sich die dazu notwendigen <b>Privilegien</b> besorgen. Probiere einmal die folgende Erweiterung aus:
    <pre>
    const SE_SHUTDOWN_NAME = 'SeShutdownPrivilege';

    procedure XXX;
    var
    hToken: Integer;
    tp: TTokenPrivileges;
    outtp: PTokenPrivileges;
    ol: PInteger;
    luid: TLargeInteger;
    begin
    if not OpenProcessToken(GetCurrentProcess(),
    TOKEN_ADJUST_PRIVILEGES, hToken ) then Abort;
    if not LookupPrivilegeValue(nil, SE_SHUTDOWN_NAME , luid) then Abort;
    tp.PrivilegeCount:=1;
    tp.Privileges[0].luid:=luid;
    tp.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
    outtp:=nil;
    ol:=nil;
    if not AdjustTokenPrivileges(hToken, FALSE, tp,sizeof(TTOKENPRIVILEGES),
    outtp^, ol^ ) then Abort;
    if GetLastError() <> ERROR_SUCCESS then Abort;
    ExitWindowsEx(EWX_FORCE or EWX_REBOOT,0);
    end;
    </pre&gt

    Comment


    • #3
      also auf gut deutsch, bei nt geht es ganz anders wie bei win95/98.
      d. h. muß ich aber auch vorher herausfinden in welchem windows mein programm gestartet
      worden ist!!!
      wie mache ich das??????

      mfg

      marku
      Herzliche Grüße

      Markus Lemcke
      barrierefreies Webdesign

      Comment


      • #4
        Hallo Markus,

        das musst Du nicht mehr machen, das macht Delphi bereits für Dich ;-) <br>
        In der Unit <b>SysUtils</b> wird die globale Variable <b>Win32Platform</b> beim Programmstart mit einer Konstante für das aktuelle Betriebssystem vorbelegt. In der Delphi-Hilfe liest sich das so:

        <i>Win32Platform wird verwendet, um den Typ der Win32-Plattform anzugeben, auf der das System läuft. Die Variable kann die folgenden Werte annehmen:<br>
        VER_PLATFORM_WIN32s = Win32s. <br>
        VER_PLATFORM_WIN32_WINDOWS = Windows 95. <br>
        VER_PLATFORM_WIN32_NT = Windows NT.</i>

        P.S. Wenn auch noch die Unterscheidung zwischen den Service-Packs von NT oder die Erkennung von Windows 2000 benötigt wird, ist ein geeignetes Beispiel in meinen Buch <i>Delphi Win32-Lösungen</i> zu finden

        Comment


        • #5
          ich kann nur staunen was du alles weißt!!!!

          mfg

          marku
          Herzliche Grüße

          Markus Lemcke
          barrierefreies Webdesign

          Comment


          • #6
            tag andreas,

            in deinem oben beschriebenen code ist noch ein bug.
            einmal soll htoken vom typ phandle sein und einmal vom typ integer!!!!!!!

            komme nicht so ganz klar damit!!

            mfg

            marku
            Herzliche Grüße

            Markus Lemcke
            barrierefreies Webdesign

            Comment


            • #7
              Hallo Markus,

              in der Tat - ich sollte nichts mehr ungeprüft auf meinem Archiv übernehmen ;-) <br>
              Hier kommt der 2. Versuch, der mit Delphi 5 laufen sollte:
              <pre>
              const
              SE_SHUTDOWN_NAME = 'SeShutdownPrivilege';

              procedure XXX;
              var
              aTP : TTokenPrivileges;
              aTPPrev : TTokenPrivileges;
              aToken : THandle;
              dwRetLen : DWord;
              begin
              if not OpenProcessToken(GetCurrentProcess,
              TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, aToken) then
              Abort;
              aTP.PrivilegeCount := 1;
              if (LookupPrivilegeValue(nil, PChar(SE_SHUTDOWN_NAME),
              aTP.Privileges[0].LUID))then
              begin
              aTP.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
              dwRetLen := 0;
              if not AdjustTokenPrivileges(aToken, False, aTP,
              SizeOf(aTPPrev), aTPPrev, dwRetLen) then
              RaiseLastWin32Error;
              end;
              CloseHandle(aToken);
              ExitWindowsEx(EWX_FORCE or EWX_REBOOT,0);
              end;
              </pre&gt

              Comment


              • #8
                Hallo, vielleicht funktioniert ja ein einfach über eine Shell aufgerufener Shutdown-Befehl(s. NT-Hilfe). Der funktioniert bei uns sogar für ferne Systeme(Netz) und beendet alle! gestarteten Applikationen. Er beendet sogar NERO während des brennens einer CD. -frez

                Comment


                • #9
                  verrate mal wie der shutdownbefehl heißt!!!!!

                  mfg

                  marku
                  Herzliche Grüße

                  Markus Lemcke
                  barrierefreies Webdesign

                  Comment


                  • #10
                    Hallo, Der Befehl unter NT heißt shutcmd. Er fährt definitiv jeden! NT-Rechner down und beendet jede Anwendung. Leider steht die Funktion -soweit ich es mitbekommen habe- nur NT-Server zur Verfügung.
                    Dieser fährt dann einzelne oder alle Arbeitsplätze herunter. Das funktuniert auch per Remote. -frez

                    Comment


                    • #11
                      ich habe es mit der prozedur von andreas hinbekommen!!! sie stand in einem buch von mir drin und in
                      dem buch war auch erklärt, was bei delphi 2 anders geschrieben werden muß. war ein zeigerproblem!!!
                      jetzt tut es!!!!!!!!!!!!!! besten dank!!!!!!!!

                      mfg

                      marku
                      Herzliche Grüße

                      Markus Lemcke
                      barrierefreies Webdesign

                      Comment


                      • #12
                        Wenn ihr euch in Zukunft das Tippen und Suchen sparen wollt, dann könnt ihr den Delphi Way of Life nehmen - Delphi Super Page (http://sunsite.informatik.rwth-aachen.de/delphi/)

                        Dort findet Ihr die fertige Komponente

                        TXWinReboot 2.0
                        ===============
                        A component for computer restart, reboot, shutdown, suspend and hibernate.

                        Freeware.

                        Copyright © 1998 Roman Stedronsky, [email protected].

                        All rights reserved. You may use this software in an application
                        without fee or royalty, provided this copyright notice remains intact.

                        properties:

                        property Operation: TRebootOperation; type of reboot operation
                        roLogOff Shuts down all processes, then it logs the user off.
                        roReboot Shuts down the system and then restarts the system.
                        roShutDown Shuts down the system, flushs file buffers, stops processes.
                        roSuspend Suspends using RAM-alive technique.
                        roHibernate Suspends using hibernate technique.
                        property PowerOff: boolean; Shuts down the system and turns off the power (only with roShutDown).
                        property ForceTerminateProcesses: boolean; Forces processes to terminate.

                        Für fast alle Probleme gibt es nämlich schon ein Lösung und Delphi hat mit den Komponenten eine Möglichkeit diese Lösung im Sourcecode für alle verfügbar zu machen

                        Comment

                        Working...
                        X