Tid computeren har været oppe
Ville gerne lave et program, der kunne tælle hvor lang tid ens computer har været oppe, gemme oplysningerne i evt. en record, i en fil - for herefter at kunne udregne samlet tid, måske gennemsnittet af hvor lang tid computeren har været oppe. - Er lidt i tvivl om hvorledes dette kan gøresHar lavet følgende - virker ik:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus, ExtCtrls;
const
filnavn = 'D:\uptimelog.bin'; {logfilens navn}
type
{tabel, med forskellige værdier!}
Tlogfil = record
NuvStartTid: TTime;
NuvStopTid: TTime;
TotalTid: TTime;
Antalsessions: Integer;
end;
TFormUpTimeProgram = class(TForm)
TimerTidsholder: TTimer;
ButtonSamletUpTime: TButton;
ButtongennemsnitsUpTime: TButton;
EditGennemsnitsUpTime: TEdit;
EditSamletUpTime: TEdit;
EditNuvaeendeUpTime: TEdit;
LabelNuvaerendeUpTime: TLabel;
LabelOverskrift: TLabel;
ButtonLuk: TButton;
LabelKlokken: TLabel;
LabelKlokkenNu: TLabel;
LabelDato: TLabel;
Button1: TButton;
procedure ButtonLukClick(Sender: TObject);
procedure TimerTidsholderTimer(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure ButtongennemsnitsUpTimeClick(Sender: TObject);
procedure ButtonSamletUpTimeClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
function HookProc (var message: TMessage) : Boolean;
public
logfilen: file of TLogfil
{ Public declarations }
end;
var
FormUpTimeProgram: TFormUpTimeProgram;
logfil: Tlogfil;
TidNu: TTime;
UpTime: TTime;
str: String;
implementation
{$R *.dfm}
procedure TFormUpTimeProgram.ButtonLukClick(Sender: TObject);
begin
Close; {lukker programmet}
end;
procedure TFormUpTimeProgram.TimerTidsholderTimer(Sender: TObject);
begin
LabelKlokken.Caption := TimeToStr(Time); {aflæser tid og viser på 'LabelKlokken'}
LabelDato.Caption := DateToStr(Date); {starter dato og viser på 'LabelDato'}
end;
procedure TFormUpTimeProgram.FormCreate(Sender: TObject);
begin
{hook til windows beskeder - bruges til at udføre kode før windows 'force shutdown'}
Application.HookMainWindow (HookProc);
if FileExists(filnavn) then
begin
{oprettelse af en simpel log-fil}
Assignfile(logfilen, filnavn);
try
reset(logfilen);
logfil.nuvstarttid := time;
logfil.antalsessions := 1;
write(filnavn, logfil.nuvstarttid, logfil.antalsessions);
finally
closefile(logfilen);
messagedlg('starting the delphi application.', mtinformation,
[mbok], 0);
end;
END;
end;
procedure MyExitProc; far;
begin
{valgfri kode - aflæser tid og skriver til fil før program- lukning.}
reset(logfilen);
logfil.NuvStopTid:= Time;
logfil.Antalsessions:= + 1;
write(filnavn, logfil.NuvStopTid, logfil.antalsessions);
closefile(logfilen);
end;
function TFormUpTimeProgram.HookProc (var message: TMessage) : Boolean;
begin
result := False;
if message.Msg = WM_ENDSESSION then
begin
if WordBool (message.WPARAM) then
begin
{ Windows is closing down - clean up!! }
{ This should execute all ExitProcs, close windows and call destructors.. }
Halt
{ This should close things down properly, }
{ but do we have enough time to handle any posted messages before Windows }
{ is already down?? This will result in a PostQuitMessage that might }
{ never arrive! }
{ This doesn't always work - avoid it }
{ Close;}
end
end
end;
procedure TFormUpTimeProgram.ButtongennemsnitsUpTimeClick(Sender: TObject);
begin
MessageDlg('Udregner Gennemsnittet.', mtInformation,
[mbOk], 0);
end;
procedure TFormUpTimeProgram.ButtonSamletUpTimeClick(Sender: TObject);
begin
MessageDlg('Udregner Samlet Up-Time.', mtInformation,
[mbOk], 0);
end;
procedure TFormUpTimeProgram.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
reset(logfilen);
logfil.NuvStopTid:= Time;
logfil.Antalsessions:= + 1;
write(filnavn, logfil.NuvStopTid);
closefile(logfilen);
MessageDlg('closing the Delphi application.', mtInformation,
[mbOk], 0);
end;
initialization
{addexitproc tilføjer en procedure som automatisk afvikles inden programmet lukker}
AddExitProc (MyExitProc);
end.
