void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)
{
TStringList *lst = new TStringList;
lst->Add("Выключение");
lst->SaveToFile(ExtractFileDir(Application->ExeName)+"\\shtdown.txt");
delete lst;
}
Регистрация включения и выключения ПК
Хотю сделать прогу (вообщем уже на половину сделал), чтобы регистрировала дату и время включения/выключения ПК (всё закидывает в файл).
Программа запускается при включении ПК, создаёт файл, регистрирует нужные данные, но при выключении ПК, она не записывает данные (время и дату выключения программы).
Подкиньие мыслишку???
Может я что то не так делаю. В какое собитие формы или ещё чего надо записать нужную процедуру??? :confused:
Вот какую ошибку при закрытии пишет:
Цитата:
Project InvisiblePro.exe raised exception class EInOutError with message 'I/O error 103'. Process stopped. Use Step or Run to continue
FormCloseQuery
Я записал туда процедуру записи в файл и закрытие, но при закрытии пишет ошибку (см. первое сообщение) :confused:
попробуй в форм дестрой...
я все возможные попробовал. при выключении windows? никаких записей не происходит :(
Код:
Сделай запись в файл при открытии, прогу в автозагрузку. И запись в файл при закрытии.
P.S. У меня дежа-вю, как будто подобная тема уже была. :D Я так подозреваю, что чем больше торчишь на форуме, тем чаще дежа-вю ;)
Цитата: Cool Xacker
Хотю сделать прогу (вообщем уже на половину сделал), чтобы регистрировала дату и время включения/выключения ПК (всё закидывает в файл).
Еще один велосипедостроитель. В логах винды уже все написано до тебя. Остается лишь прочитать их. Мало того, что там время включения/выключения машины есть, так еще и что/кто инициировало выключение/загрузку/ошибку системы/программы/мозгов
Цитата:
const
DBNAME = 'C:\otchet.db' ;
var
db: TextFile; // файл — база данных
// Информация о компьютере.
procedure TForm1.HardwareInfo;
var Size : cardinal;
PRes : PChar;
BRes : boolean;
lpSystemInfo : TSystemInfo;
begin
// Имя пользователя
Size:= MAX_COMPUTERNAME_LENGTH + 1;
PRes:= StrAlloc(Size);
BRes:= GetUserName(PRes, Size);
if BRes then label1.Caption := StrPas(PRes);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
form1.Caption:=DateToStr(Date)+' --- '+TimeToStr(Time);
form1.WindowState:=wsMinimized;
form1.Visible:=false;
HardwareInfo;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Edit1.Text:=DateToStr(Date);
form1.Caption:=DateToStr(Date)+' --- '+TimeToStr(Time);
end;
procedure TForm1.Timer2Timer(Sender: TObject);
begin
form1.CoolTrayIcon1.HideTaskbarIcon;
form1.Visible:=false;
Timer2.Enabled:=false;
end;
procedure TForm1.N1Click(Sender: TObject);
begin
form1.close;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
Edit1.Text:=DateToStr(Date)+' '+TimeToStr(Time);
AssignFile(db, DBNAME);
try
if FileExists(DBNAME)=false
then
rewrite(db)
else
begin
Append(db);
end;
writeln(db,'Был включен ', form1.caption);
writeln(db,'Пользователь: ', label1.caption);
finally
end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
writeln(db, 'Был выключен '+form1.caption);
writeln(db, '----------------------------------');
CloseFile(db); // закрыть файл БД
form1.close;
end;
DBNAME = 'C:\otchet.db' ;
var
db: TextFile; // файл — база данных
// Информация о компьютере.
procedure TForm1.HardwareInfo;
var Size : cardinal;
PRes : PChar;
BRes : boolean;
lpSystemInfo : TSystemInfo;
begin
// Имя пользователя
Size:= MAX_COMPUTERNAME_LENGTH + 1;
PRes:= StrAlloc(Size);
BRes:= GetUserName(PRes, Size);
if BRes then label1.Caption := StrPas(PRes);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
form1.Caption:=DateToStr(Date)+' --- '+TimeToStr(Time);
form1.WindowState:=wsMinimized;
form1.Visible:=false;
HardwareInfo;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Edit1.Text:=DateToStr(Date);
form1.Caption:=DateToStr(Date)+' --- '+TimeToStr(Time);
end;
procedure TForm1.Timer2Timer(Sender: TObject);
begin
form1.CoolTrayIcon1.HideTaskbarIcon;
form1.Visible:=false;
Timer2.Enabled:=false;
end;
procedure TForm1.N1Click(Sender: TObject);
begin
form1.close;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
Edit1.Text:=DateToStr(Date)+' '+TimeToStr(Time);
AssignFile(db, DBNAME);
try
if FileExists(DBNAME)=false
then
rewrite(db)
else
begin
Append(db);
end;
writeln(db,'Был включен ', form1.caption);
writeln(db,'Пользователь: ', label1.caption);
finally
end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
writeln(db, 'Был выключен '+form1.caption);
writeln(db, '----------------------------------');
CloseFile(db); // закрыть файл БД
form1.close;
end;
что не так???
Цитата: Cool Xacker
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
writeln(db, 'Был выключен '+form1.caption);
writeln(db, '----------------------------------');
CloseFile(db); // закрыть файл БД
form1.close;
end;
begin
writeln(db, 'Был выключен '+form1.caption);
writeln(db, '----------------------------------');
CloseFile(db); // закрыть файл БД
form1.close;
end;
form1.close поменяй на Action:=caClose;
Цитата: SkyM@n
....В логах винды уже все написано до тебя. Остается лишь прочитать их....
А как?
Наверное readln? :)
Цитата: Washington
Наверное readln? :)
:) А для какого FilePanch+FileName?;)
Цитата: misha_turist
А как?
Пуск-Панель управления-Администрирование-Мой комп...
Цитата: SkyM@n
Пуск-Панель управления-Администрирование-Мой комп...
:) Это я знаю. Вопрос в том, как програмно долезть....
через WMI это скорее всего делается.
Можно и с диска читать.
Можно и API применить, но имхо не стоит.