AGB  ·  Datenschutz  ·  Impressum  







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

Sperrprogramm

Ein Thema von Murdock · begonnen am 2. Jan 2006 · letzter Beitrag vom 2. Jan 2006
Antwort Antwort
Benutzerbild von ManuMF
ManuMF

Registriert seit: 11. Jul 2005
1.016 Beiträge
 
Delphi 6 Personal
 
#1

Re: Sperrprogramm

  Alt 2. Jan 2006, 11:36
Herunterfahren

Die Funktion zum Herunterfahren:
Delphi-Quellcode:
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
      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
      Result := ExitWindowsEx(Aflag, 0);
    end;
  end;
end;

// Aufruf

ExWindows(EWX_Poweroff OR EWX_FORCE);
EWX_Force ist wichtig, damit laufende Programme beendet werden. Es sollte aber noch eine Minute davor darauf hingewiesen werden.

Verweigerung der Anmeldung
Außerdem sollte das Programm ja beim Windows-Start geladen werden, also kann schon bei onFormCreate die Zeit überprüft werden, und wenn sie überschritten wurde, der Shutdown eingeleitet werden.

Unsichtbar
Code, damit man das Programm nicht sieht:
Application.ShowMainForm := false; //in FormCreate Dann würde ich aber den Einsatz eines tray-Icons empfehlen(CoolTrayIcon, JvTrayIcon von den Jedis oder Hier im Forum suchenTray-Icon)


Zeit
Die Zeit würde ich als TTime nehmen, sofern es sich um eine feste Uhrzeit handelt.
Delphi-Quellcode:
procedure TForm.Timer1Timer(Sender: TObject); // Interval = 60000 (=1 Minute)
begin
  if (Time = StrToTime('20:00:00')) then
  begin
    ...
  end;
end;
Oder soll es die Zeit sein, seit der der Rechner läuft?
Dann würde ich es so machen:
Delphi-Quellcode:
var Uptime : Cardinal;

procedure TForm.Timer1Timer(Sender: TObject); // Interval = 60000 (=1 Minute)
begin
  case Uptime of
    59: Showmessage('Noch eine Minute!');
    60: ExWindows(...);
    else: Inc(Uptime);
  end;
end;
Um ein erneutes Hochfahren in diesem Fall zu verhindern, könntest du den Tag des letzten Ausführens in einer INI-Datei speichern.Auf DSDT.Info gibt es ein gutes INI-Tutorial.
Delphi-Quellcode:
// FormCreate
if (StrToDate(INI.ReadString('Datum', 'LetzterStart', '01.01.2000') = Now) then
begin
  Showmessage('Heute wurde schon einmal gestartet!');
  ExWindows(...);
end
else
  INI.WriteString(DateToStr(Now));
Das dürfte fürs Erste reichen.

Gruß,
ManuMF
Gruß,
ManuMF

Endlich hab ich was Positives an Vista entdeckt: Das mitgelieferte Mahjongg
  Mit Zitat antworten Zitat
Antwort Antwort


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 21:57 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