Mit hilfe dieses Quelltextes sollte jeder in der Lage sein, einen Rechner neu zu starten, herrunter zu fahren oder aber den Benutzer abzumelden, bei Fragen einfach raus damit. Ob man dies nun Zeitgesteuert macht, z.B. weil der Rechner noch 3 oder 4 Stunden vor sich her laufen soll, man aber weg muss..... oder ob man sein Vic ein bisschen ?rgert indem jeden Tag um 13.00 Uhr der Rechner neu startet.... das belibt nat?rlich jeden selbst ?berlassen, Einsatzm?glichkeiten finden sich sicher viele....
Code
unit main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls;
type
TForm1 = class(TForm)
BitBtn_beenden: TBitBtn;
txt_shutdownzeit: TEdit;
BitBtn_go: TBitBtn;
lbl_shutdownzeit: TLabel;
Label1: TLabel;
Timer1: TTimer;
Label2: TLabel;
lbl_verbleibendezeit: TLabel;
rg_aktion: TRadioGroup;
procedure BitBtn_beendenClick(Sender: TObject);
procedure BitBtn_goClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
var
ShutDownZeit : TTime;
//..............................................................................
{$R *.dfm}
//..............................................................................
function ExWindows(const AFlag: Word): Boolean;
var
vi : TOSVersionInfo;
hToken : THandle;
tp : TTokenPrivileges;
h : DWord;
begin
result:= false;
vi.dwOSVersionInfoSize:=SizeOf(vi);
if GetVersionEx(vi) then
begin
if vi.dwPlatformId = VER_PLATFORM_WIN32_NT then
begin
// Windows NT
// Achtung bei Delphi 2 mu? @hToken stehen ...
if OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES,hToken) then
begin
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(Aflag, 0);
end;
end
else
begin // Windows 95
Result := ExitWindowsEx(Aflag, 0);
end;
end;
end;
//..............................................................................
procedure TForm1.BitBtn_beendenClick(Sender: TObject);
begin
close;
end;
//..............................................................................
procedure TForm1.BitBtn_goClick(Sender: TObject);
begin
ShutDownZeit := StrToTime(txt_shutdownzeit.text);
lbl_ShutDownZeit.Caption := TimeToStr(ShutDownZeit);
end;
//..............................................................................
procedure TForm1.FormCreate(Sender: TObject);
begin
bitbtn_go.Click;
end;
//..............................................................................
procedure TForm1.Timer1Timer(Sender: TObject);
begin
lbl_verbleibendezeit.Caption := TimeToStr(ShutDownZeit - Time);
if Time >= ShutDownZeit then
case rg_aktion.ItemIndex of
0: ExWindows(EWX_Shutdown);
1: ExWindows(EWX_Reboot);
2: ExWindows(EWX_LogOff);
end;
end;
//..............................................................................
end.
Alles anzeigen