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 сек.
Вернуться в оглавление
Вернуться на главную страницу
Hosted by uCoz