CompStarter
Эта статья, возможно, заинтересует людей, которые постоянно сталкиваются с такой же проблемой,
как и я. Наверное, Вы, частенько включая свой компьютер, замечаете что-то неладное: иконки на
Рабочем столе отсортированы не так как Вы привыкли, а может хуже того, находите некоторые файлы
в корзине или вообще не находите. Значит можно сделать простой вывод, что на Вашем компьютере
кто-то работал без соответствующего разрешения. Лично я с этим сталкиваюсь постоянно. И вот мне
в голову пришла мысль написать небольшую программку, которая бы регистрировала дату и время
загрузки компьютера.
Uses ... Registry, IniFiles;
procedure TForm1.FormCreate(Sender: TObject);
Var F : System.Text;
Reg : TRegistry;
Ini : TIniFile;
RegPath : String;
StrDay, StrMonth : String;
StrHour, StrMin, StrSec : String;
Hour, Min, Sec, MSec : Word;
Days, Months, Years : Word;
begin
// Если программы нет в автозапуске, то добавляем ее в автозапуск
Reg:=TRegistry.Create;
Reg.RootKey:=HKEY_LOCAL_MACHINE;
RegPath:='\Software\Microsoft\Windows\CurrentVersion\Run';
If Reg.OpenKey(RegPath, False) Then
If Reg.ReadString(RegPath) = ''
Then Reg.WriteString('CompStarter', ExtractFilePath(Application.ExeName) + 'CompStarter');
Reg.Free;
Ini:=TIniFile.Create('CompStarter.ini');
If Ini.ReadDate('LastDate', 'Date', Date) <> Date Then
Begin
Ini.WriteDate('LastDate', 'Date', Date);
// Раскладываем дату и время
DecodeDate(Date, Years, Months, Days);
DecodeTime(Time, Hour, Min, Sec, MSec);
Case Months Of
1 : StrMonth:=' Января ';
2 : StrMonth:=' Февраля ';
3 : StrMonth:=' Марта ';
4 : StrMonth:=' Апреля ';
5 : StrMonth:=' Мая ';
6 : StrMonth:=' Июня ';
7 : StrMonth:=' Июля ';
8 : StrMonth:=' Августа ';
9 : StrMonth:=' Сентября ';
10: StrMonth:=' Октября ';
11: StrMonth:=' Ноября ';
12: StrMonth:=' Декабря ';
End;
// Приводим цифры к единому виду
If Length(IntToStr(Days)) = 1 Then StrDay:='0' + IntToStr(Days) Else StrDay:=IntToStr(Days);
If Length(IntToStr(Hour)) = 1 Then StrHour:='0' + IntToStr(Hour) Else StrHour:=IntToStr(Hour);
If Length(IntToStr(Min)) = 1 Then StrMin:='0' + IntToStr(Min) Else StrMin:=IntToStr(Min);
If Length(IntToStr(Sec)) = 1 Then StrSec:='0' + IntToStr(Sec) Else StrSec:=IntToStr(Sec);
// Если файла статистики не существует, то создаем его
AssignFile(F, ExtractFilePath(Application.ExeName) + 'Statistics.txt');
If NOT FileExists(ExtractFilePath(Application.ExeName) + 'Statistics.txt') Then
Begin
Rewrite(F);
Writeln(F, 'Дата загрузки компьютера: Время загрузки компьютера:');
Writeln(F, '');
Writeln(F, ' ' + StrDay + StrMonth + IntToStr(Years) + ' года' +
' - ' + StrHour + ' ч. ' + StrMin + ' мин. ' +
StrSec + ' сек. ');
End
Else
Begin
// Если файл статистики существует, то просто добавляем его
Append(F);
Writeln(F, ' ' + StrDay + StrMonth + IntToStr(Years) + ' года' +
' - ' + StrHour + ' ч. ' + StrMin + ' мин. ' +
StrSec + ' сек. ');
End;
CloseFile(F);
End;
// Чтобы программа была не заметна, можно сделать ее скрытой
If GetFileAttributes(PChar(Application.ExeName)) <> FILE_ATTRIBUTE_HIDDEN
Then SetFileAttributes(PChar(Application.ExeName), faHidden);
Ini.Free;
Application.Terminate; // И как можно быстрее закрываем программу
end;
|
То есть, при старте программы идет проверка в реестре, входит ли наша программа в список
программ, которые будут запущены при загрузке Windows. Далее идет разложение даты на день/месяц/год
и времени на час/минуты/секунды/миллисекунды. Полученные дату и время мы записываем в файл
статистики, из которого и можем узнать, когда был загружен компьютер. А еще как дополнение к
программе можно запрашивать пароль при старте, и если он не угадан, то просто-напросто вырубать
компьютер.
...
Var Password: String;
...
InputBox('Пароль:', 'Ну чё, может пароль угадаешь ?', Password);
If Password <> 'UserName' Then ExitWindowsEx(EWX_SHUTDOWN,1);
|
Как Вы, наверное, могли уже догадаться, у программы есть два больших недостатка. Во-первых, если
нашу программу запустить вручную, то текущая дата и время будут записаны в файл статистики, что
противоречит идее программы. И во-вторых, если компьютер просто перезагрузить, то дата и время
также будут записаны в файл статистики. Чтобы избежать такую ситуацию, нужно где-то хранить
последнюю дату загрузки программы. И если эта дата совпадает с текущей датой, то можно
предположить, что программа уже была сегодня загружена и дата уже сохранена в файле статистики.
Для этого и идет проверка текущей даты с сохраненной ранее датой. Сам файл статистики будет выглядеть
примерно так:
Дата загрузки компьютера: Время загрузки компьютера:
01 Января 2004 года - 18 ч. 10 мин. 41 сек.
03 Февраля 2004 года - 18 ч. 37 мин. 45 сек.
03 Марта 2004 года - 18 ч. 37 мин. 48 сек.
04 Апреля 2004 года - 18 ч. 37 мин. 49 сек.
05 Мая 2004 года - 18 ч. 37 мин. 49 сек.
06 Июня 2004 года - 18 ч. 37 мин. 49 сек.
07 Июля 2004 года - 18 ч. 37 мин. 50 сек.
08 Августа 2004 года - 18 ч. 37 мин. 50 сек.
09 Сентября 2004 года - 18 ч. 37 мин. 50 сек.
10 Октября 2004 года - 18 ч. 37 мин. 50 сек.
11 Ноября 2004 года - 18 ч. 37 мин. 50 сек.
12 Декабря 2004 года - 18 ч. 37 мин. 50 сек.
|
Вернуться в оглавление
Вернуться на главную страницу
|