
09.02.2011, 12:18
|
Прохожий
|
|
Регистрация: 09.02.2011
Сообщения: 5
Репутация: 10
|
|
Программа для учета времени работы на компьютере. Проверьте пожалуйста код
Мне нужно, чтобы программа при выключении windows записывала в файл текущие дату/время. При выходе из программы она записывает, а при выключении винды нет! Что делать? Подскажите!
Вот код:
Код:
unit unitSysUpt;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ShellApi, ExtCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Timer1: TTimer;
Edit1: TEdit;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
procedure IconCallBackMessage(var Mess: TMessage); message WM_USER + 100;
end;
var
Form1: TForm1;
log: TextFile;
t: integer;
implementation
{$R *.dfm}
//при открытии приложения
procedure TForm1.FormCreate(Sender: TObject);
var nid: TNotifyIconData;
begin
//создание иконки в трее
with nid do
begin
cbSize := SizeOf(TNotifyIconData);
Wnd := Form1.Handle;
uID := 1;
uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
uCallbackMessage := WM_USER + 100;
hIcon := Application.Icon.Handle;
StrPCopy(szTip, 'System Uptime');
end;
Shell_NotifyIcon(NIM_ADD, @nid);
//загрузка файла log.txt
AssignFile(log,'log.txt');
try
Append(log);
except
ReWrite(log);
end;
//запись в файл
WriteLn(log,'---------------');
WriteLn(log,'Дата включения: '+DateToStr(Now));
WriteLn(log,'Время включения: '+TimeToStr(Now));
WriteLn(log,'---------------');
//закрытие файла
CloseFile(log);
//показ содержимого файла
Memo1.Lines.LoadFromFile('log.txt');
//Memo и Edit только для чтения
Memo1.ReadOnly:=true;
Edit1.ReadOnly:=true;
//кнопка выключения не доступна
Button2.Enabled:=false;
end;
procedure TForm1.IconCallBackMessage(var mess: TMessage);
var mouse: TMouse;
begin
case Mess.lParam of
//при нажатии лев. кн. мыши на иконку в трее показывать окно
WM_LBUTTONDOWN: Form1.Visible:=true;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
//при нажатии на кнопку скрывать окно
Form1.Visible:=false;
//сделать доступной кнопку выключения
Button2.Enabled:=true;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
//показ времени работы
t := GetTickCount;
Edit1.Text := 'Время работы: ' +
IntToStr(t div 60000) + ' мин ' +
IntToStr((t mod 60000) div 1000) + ' сек ' +
IntToStr(t mod 1000) + ' мсек';
end;
//при нажатии на кнопку выключения
procedure TForm1.Button2Click(Sender: TObject);
begin
//закрыть приложение
Form1.Close;
end;
//при закрытии приложения
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var nid: TNotifyIconData;
begin
//загрузка файла log.txt
AssignFile(log,'log.txt');
try
Append(log);
except
ReWrite(log);
end;
//запись в файл
WriteLn(log,'Дата выключения: '+DateToStr(Now));
WriteLn(log,'Время выключения: '+TimeToStr(Now));
WriteLn(log,'---------------');
WriteLn(log,'Время работы: '+
IntToStr(t div 60000) + ' мин ' +
IntToStr((t mod 60000) div 1000) + ' сек ' +
IntToStr(t mod 1000) + ' мсек');
WriteLn(log,'---------------');
//закрытие файла
CloseFile(log);
//убрать иконку из трея
with nid do
begin
cbSize := SizeOf( TNotifyIconData );
Wnd := Form1.Handle;
uID := 1;
uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
uCallbackMessage := WM_USER + 100;
hIcon := Application.Icon.Handle;
StrPCopy(szTip, 'System Uptime');
end;
Shell_NotifyIcon( NIM_DELETE, @nid );
end;
end.
|