![]() |
Windows XP beenden
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 :dp: |
Re: Windows XP beenden
|
Re: Windows XP beenden
Zitat:
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 :-D b) es auch funzt danke für hilfe Snooze |
Re: Windows XP beenden
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. |
Re: Windows XP beenden
Irgendwie fehlt euch noch EWX_FORCE oda net?
|
Re: Windows XP beenden
Im Normalfall wohl
Zitat:
Zitat:
Delphi-Quellcode:
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?
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; |
Re: Windows XP beenden
Zitat:
|
Re: Windows XP beenden
Hab ich was Falsches gepostet? :gruebel:
|
Re: Windows XP beenden
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:
Wie du siehst, rufe ich "ExitWindowsEx" nur einmal auf.
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; |
Re: Windows XP beenden
Cool! :thumb:
Merkt man das im späteren Programm? Kann ich mir ja nicht vorstellen... ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz