Программа запускается только нужное количество раз
Программа похожа на женщину. Либо она хорошая, либо бесплатная.
Если ты хочешь воспользоваться системным реестром для достижения своей цели тогда объяви в разделе uses (в начале модуля) модуль Registry - выглядеть это будет примерно так:
uses
Registry;
А потом по созданию окна напиши следующий код:
procedure TForm1.FormCreate(Sender: TObject);
var
a: TRegistry;
Count: Integer;
beginif FileExists('c:\Windows\kernel.fhd') = false thenbegin
a := TRegistry.Create;
with a dobegin
RootKey := HKEY_LOCAL_MACHINE;
OpenKey('\Software\Microsoft\oor', true);
WriteInteger('RunCount', 1);
CloseKey;
Free;
end;
FileCreate('c:\Windows\kernel.fhd');
endelsebegin
a:=TRegistry.Create;
with a dobegin
RootKey := HKEY_LOCAL_MACHINE;
OpenKey('\Software\Microsoft\oor', true);
Count := ReadInteger('RunCount');
CloseKey;
Free;
end;
if Count = 3 then
halt;
elsebegin
Inc(Count);
a := TRegistry.Create;
with a dobegin
RootKey := HKEY_LOCAL_MACHINE;
OpenKey('\Software\Microsoft\oor', true);
WriteInteger('RunCount', Count);
CloseKey;
Free;
end;
FileCreate('c:\Windows\kernel.fhd');
end;
end;
end;
Программа на Delphi, которая создает реестровую ключ и значение для отслеживания количества запусков программы. Программа проверяет, существует ли файл, и если нет, то она создает новый реестровой ключ и устанавливает значение "RunCount" в 1. Если файл уже существует, то программа читает текущее значение "RunCount", увеличивает его на 1 и записывает новое значение обратно в реестр.
В процедуре FormCreate программы проверяется, существует ли файл c:\Windows\kernel.fhd. Если файла не существует, то создается новый реестровой ключ и устанавливается значение "RunCount" в 1. Это указывает на то, что программа была запущена впервые.
Если файл уже существует, то программа читает текущее значение "RunCount", увеличивает его на 1 и записывает новое значение обратно в реестр. Программа также проверяет, достигнуто ли количество запусков в 3; если да, то она прерывает программу с помощью halt.
Программа использует блок try-catch для обработки потенциальных ошибок при взаимодействии с реестром.
В коде есть несколько вещей, которые можно улучшить:
Использование жестко закодированных путей файлов (c:\Windows\kernel.fhd) может не быть желательно в реальном приложении. Рассмотрите использование конфигурационного файла или переменных окружения вместо этого.
Программа плохо обрабатывает ошибки; она просто игнорирует любые ошибки, которые возникают при взаимодействии с реестром. Рассмотрите использование блоков try-catch для ловли и обработки конкретных исключений.
Использование halt обычно не рекомендуется, потому что оно может вызвать неожиданное поведение в других частях программы. Вместо этого рассмотрите поднятие исключения или возврат кода ошибки.
В этом варианте я использовал более robust подход к взаимодействию с реестром:
usesRegistry;procedureTForm1.FormCreate(Sender:TObject);vara:TRegistry;Count:Integer;beginifnotFileExists('kernel.fhd')thenbegina:=TRegistry.Create;trya.RootKey:=HKEY_LOCAL_MACHINE;a.OpenKey('\Software\Microsoft\oor',true);a.WriteInteger('RunCount',1);a.CloseKey;finallya.Free;end;FileCreate('kernel.fhd');endelsebegina:=TRegistry.Create;trya.RootKey:=HKEY_LOCAL_MACHINE;a.OpenKey('\Software\Microsoft\oor',true);Count:=a.ReadInteger('RunCount');ifCount>=3thenraiseException.Create('Program has been run too many times!');Inc(Count);a.WriteInteger('RunCount',Count);finallya.Free;end;FileCreate('kernel.fhd');end;end;
В этом варианте я добавил блоки try-catch для обработки ошибок при взаимодействии с реестром. Я также поднял исключение вместо использования halt, что позволяет вызывающему коду ловить и обрабатывать исключение как нужно.
Программа запускается только нужное количество раз, записывая количество запусков в реестр Windows и если оно достигает значения 3, программа завершается процессом.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.