Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Sperrprogramm (https://www.delphipraxis.net/60048-sperrprogramm.html)

Murdock 2. Jan 2006 11:30


Sperrprogramm
 
Hallo und ein frohes neues Jahr.

Kaum hat das neue Jahr begonnen und schon eine Frage :-D

Ich habe folgenden Gedanke für ein benötigtes Programm. Und zwar:

Da mein Sohn häufig am PC und im Internet am zocken ist und hierbei die Zeit vergisst, mochte ich ein Programm schreiben welches im Hintergrund läuft - sich nicht so einfach entdecken lässt - und dabei die Systemzeit mit einer von mir eingegebenen Zeit vergleicht - sollte die Zeit erreicht sein muss das Programm den Computer selbst runter fahren oder ein hochfahren kurz naach der Anmeldung bei XP verweigern und auch wieder runter fahren.

Da mir zur Zeit keine Ideen kommen dieses Projekt zu verwirklichen frage ich mal hier in die Runde ob der ein oder andere Brauchbare Ansätze hat.

Danke schon mal im voraus.

Gruß Murdock

ManuMF 2. Jan 2006 11:36

Re: Sperrprogramm
 
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:
Delphi-Quellcode:
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. :mrgreen:

Gruß,
ManuMF

FriFra 2. Jan 2006 11:42

Re: Sperrprogramm
 
Zitat:

Zitat von Murdock
ein hochfahren kurz naach der Anmeldung bei XP verweigern und auch wieder runter fahren.

Warum willst Du so lange warten? Wenn Deine Anwendung als Service läuft, kannst Du den Rechner schon wieder runter fahren bevor Dein Sohn überhaupt die Möglichkeit hat sich am System anzumelden ;) ... Der Nachteil wäre natürlich, dass auch du selbst nicht mehr an den Rechner heran kommst :twisted:

ManuMF 2. Jan 2006 11:52

Re: Sperrprogramm
 
Ich denke mal, er hat einen eigenen Benutzer. Da kann das Programm ja nur unter dem gestartet werden.

Gruß,
ManuMF

faux 2. Jan 2006 13:50

Re: Sperrprogramm
 
Du kannst auch den Benutzer sperren, nachdem das Limit überschritten wurde.

Grüße
Faux

HERMES 2. Jan 2006 14:10

Re: Sperrprogramm
 
Man kann für benutzer ( allerdings nur unter Pro ) eine Zeittabelle anlegen, in der eingegstellt wird zu welchen Zeiten sich benutzer anmelden können. So kann man zb verhindern, dass er sich nach 18 Uhr noch anmelden kann.
Was passiert wenn sich ein benutzer vorher anmeldet und dann diese zeit erreicht wird weis ich nicht. Also für diesen fall wie bereits erwähnt einen Dienst installieren, den kann der kleine dann auch ohne admin rechte nicht killen.

mfg

cruso 2. Jan 2006 14:19

Re: Sperrprogramm
 
Es sollte auf jeden Fall ein Passwort für das Konto "Administrator" das XP automatisch erstellt gesetzt werden, denn sonst könnte man im abgesicherten Modus alle Passwörter ändern! Bei XP Prof. wird glaub ich schon bei der Installation ein Passwort eingerichtet bei Home muss man das noch umständlich selber machen.

Daniel G 2. Jan 2006 14:22

Re: Sperrprogramm
 
Zitat:

Zitat von HERMES
Man kann für benutzer ( allerdings nur unter Pro ) eine Zeittabelle anlegen, in der eingegstellt wird zu welchen Zeiten sich benutzer anmelden können. So kann man zb verhindern, dass er sich nach 18 Uhr noch anmelden kann.
Was passiert wenn sich ein benutzer vorher anmeldet und dann diese zeit erreicht wird weis ich nicht. Also für diesen fall wie bereits erwähnt einen Dienst installieren, den kann der kleine dann auch ohne admin rechte nicht killen.

mfg

Ich bin mir nicht ganz sicher, ab war es nicht möglich, das auch über einen Trick in Home zu machen? Irgendwas war da...

cruso 2. Jan 2006 14:26

Re: Sperrprogramm
 
Zitat:

Zitat von Daniel G
Ich bin mir nicht ganz sicher, ab war es nicht möglich, das auch über einen Trick in Home zu machen? Irgendwas war da...

Stimmt! In der c't stand ja mal drin, wie man aus der Home Edition die Prof. machen kann. Mit dem 2Byte-Patch! :-D :???: :P


//Weiß jemand wo man den vllt noch findet? Hatte zwar diese Ausgabe finde sie aber nicht mehr! :oops:


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:52 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