AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Windows XP beenden

Ein Thema von Snooze · begonnen am 25. Dez 2003 · letzter Beitrag vom 8. Mär 2005
Antwort Antwort
Seite 1 von 7  1 23     Letzte »    
Benutzerbild von Snooze
Snooze

Registriert seit: 8. Okt 2003
Ort: Niedernsill (Salzburg)
97 Beiträge
 
Delphi 7 Enterprise
 
#1

Windows XP beenden

  Alt 25. Dez 2003, 18:09
Hallo, kann ich irgendwie über mein Programm Windows XP beenden, neu starten oder User abmelden?

habe zu allen dreien eine Befehlszeile gefunden, aber nur abmelden funzt


Beenden:

ExitWindowsEx(EWX_SHUTDOWN, 0)

Neu starten:

ExitWindowsEx(EWX_REBOOT, 0)

Abmelden:

ExitWindowsEx(EWX_LOGOFF, 0)


wie gesagt letzteres klappt einwandfrei, nur beenden und rebooten klappt nicht


Danke für Hilfe

MFG Snooze
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Windows XP beenden

  Alt 25. Dez 2003, 18:11
Einfach folgenden 2. beitrag lesen:
http://www.delphipraxis.net/internal...ghlight=reboot
  Mit Zitat antworten Zitat
Benutzerbild von Snooze
Snooze

Registriert seit: 8. Okt 2003
Ort: Niedernsill (Salzburg)
97 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Windows XP beenden

  Alt 25. Dez 2003, 18:26
Zitat von Matze:
Einfach folgenden 2. beitrag lesen:
http://www.delphipraxis.net/internal...ghlight=reboot

hm hab mit ähnlichem gerechnet...

aber jetzt kommt die peinliche Frage:

wo muss ich das einfügen, dass

a) Delphi mich nicht mit Error-Meldungen überschüttet

b) es auch funzt


danke für hilfe

Snooze
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Windows XP beenden

  Alt 25. Dez 2003, 18:33
Ungetestet!!

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private-Deklarationen }
    function ExitWin(flag:word): Boolean;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function TForm1.ExitWin(flag:word): Boolean;
var vi : TOSVersionInfo;
    hToken : THandle;
    tp : TTokenPrivileges;
    h : DWord;

begin
  //result := false;
  vi.dwOSVersionInfoSize:=SizeOf(vi);
  GetVersionEx(vi);
  if vi.dwPlatformId = VER_PLATFORM_WIN32_NT then // Windows NT
  begin
    // Achtung bei Delphi 2 muß @hToken stehen ... !!!! ?????
    OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,hToken);
    LookupPrivilegeValue(nil,'SeShutdownPrivilege',tp.Privileges[0].Luid);
    tp.PrivilegeCount := 1;
    tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
    h := 0;
    AdjustTokenPrivileges(hToken,False,tp,0,PTokenPrivileges(nil)^,h);
    CloseHandle(hToken);
    result := ExitWindowsEx(flag,0);
  end
  else // Windows 95
  begin
    Result := ExitWindowsEx(flag,0);
  end;
end;

//Abmelden:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ExitWin(EWX_LOGOFF);
end;

//Neustart:
procedure TForm1.Button2Click(Sender: TObject);
begin
  ExitWin(EWX_REBOOT);
end;

//Shutdown:
procedure TForm1.Button3Click(Sender: TObject);
begin
  ExitWin(EWX_SHUTDOWN);
end;

end.
  Mit Zitat antworten Zitat
Benutzerbild von phlux
phlux

Registriert seit: 4. Nov 2002
Ort: Witten
1.335 Beiträge
 
Delphi 6 Personal
 
#5

Re: Windows XP beenden

  Alt 25. Dez 2003, 19:23
Irgendwie fehlt euch noch EWX_FORCE oda net?
Christian "phlux" Arndt
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#6

Re: Windows XP beenden

  Alt 25. Dez 2003, 19:33
Im Normalfall wohl
Zitat von phlux:
oda net?
denn EWX_FORCE bedeutet doch "nur":
Zitat von PSDK:
Forces processes to terminate. When this flag is set, the system does not send the WM_QUERYENDSESSION and WM_ENDSESSION messages. This can cause the applications to lose data. Therefore, you should only use this flag in an emergency.

Windows XP: If the computer is locked and this flag is not specified, the shutdown process will fail.
btw: Für mich bietet sich hier
Delphi-Quellcode:
  if vi.dwPlatformId = VER_PLATFORM_WIN32_NT then // Windows NT
  begin
    { ... }

    result := ExitWindowsEx(flag,0);
  end
  else // Windows 95
  begin
    Result := ExitWindowsEx(flag,0);
  end;
eigentlich eine Optimierungsmöglichkeit. ExitWindowsEx wird in jedem Fall aufgerufen, egal ob unter 9x oder NT. Warum also nicht den doppelten Befehl durch einen ersetzen, der vor dem Ende der Funktion aufgerufen wird?
  Mit Zitat antworten Zitat
Benutzerbild von phlux
phlux

Registriert seit: 4. Nov 2002
Ort: Witten
1.335 Beiträge
 
Delphi 6 Personal
 
#7

Re: Windows XP beenden

  Alt 25. Dez 2003, 19:40
Zitat von MathiasSimmack:
Im Normalfall wohl
Zitat von phlux:
oda net?
denn EWX_FORCE bedeutet doch "nur":
Zitat von PSDK:
Forces processes to terminate. When this flag is set, the system does not send the WM_QUERYENDSESSION and WM_ENDSESSION messages. This can cause the applications to lose data. Therefore, you should only use this flag in an emergency.

Windows XP: If the computer is locked and this flag is not specified, the shutdown process will fail.
Notfall? Immer kp wenn ich mein Shutdowntool nutze ists nen Notfall wenn ich das per Fernbedienung starte lieg ich meistens um 3 Uhr im Bett zu müde aufzustehn und lass den Rechner sich dann runterfahren
Christian "phlux" Arndt
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Windows XP beenden

  Alt 25. Dez 2003, 19:48
Hab ich was Falsches gepostet?
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#9

Re: Windows XP beenden

  Alt 25. Dez 2003, 19:54
Nein, @Matze. Ich wollt´ halt nur meinen (Optimierungs-)Senf zu der von dir geposteten Routine aus der Code-Lib dazugeben. Meine private, die ich nutze, sieht nämlich so aus:
Delphi-Quellcode:
procedure CallLogOffSequence(ExitCode: dword);
var
  os : TOSVersionInfo;
  Token : THandle;
  tkp : TTokenPrivileges;
begin
  os.dwOSVersionInfoSize := sizeof(os);
  GetVersionEx(os);

  if(os.dwPlatformId = VER_PLATFORM_WIN32_NT) then begin
    if(OpenProcessToken(GetCurrentProcess,
      TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,Token)) then
    try
      if(not LookupPrivilegeValue(nil,'SeShutdownPrivilege',
        tkp.Privileges[0].Luid)) then exit;

      tkp.PrivilegeCount := 1;
      tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;

      AdjustTokenPrivileges(Token,false,tkp,
        0,PTokenPrivileges(Nil)^,PDWord(Nil)^);

      if(GetLastError <> ERROR_SUCCESS) then exit;
    finally
      CloseHandle(Token);
    end;
  end;

  ExitWindowsEx(ExitCode,0);
end;
Wie du siehst, rufe ich "ExitWindowsEx" nur einmal auf.
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Windows XP beenden

  Alt 25. Dez 2003, 19:59
Cool!

Merkt man das im späteren Programm? Kann ich mir ja nicht vorstellen...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 7  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz