Avatar billede nicholai_buhl Nybegynder
07. april 2003 - 13:33 Der er 4 kommentarer og
1 løsning

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øres

Har 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.
Avatar billede borrisholt Novice
07. april 2003 - 13:40 #1
Oppetid  kan du finde med

GetTickCount

Jens B
Avatar billede hermandsen Juniormester
07. april 2003 - 13:41 #2
Har ike kigget din kode i gennem, kan kan du ikke bare bruge GetTickCount??
Den angiver hvor mange milisekunder windows har kørt i!?
Avatar billede nicholai_buhl Nybegynder
07. april 2003 - 14:09 #3
Vil prøve at se om jeg kan få det til at virke med den funktion
Avatar billede nicholai_buhl Nybegynder
14. april 2003 - 13:10 #4
Har fået det til at virke med GetTickCount ..
Avatar billede nicholai_buhl Nybegynder
14. april 2003 - 13:11 #5
spørgsmål lukkes
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester