Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Программа запускается только нужное количество раз

Delphi , Программа и Интерфейс , Приложение своё

Программа запускается только нужное количество раз

Программа похожа на женщину. Либо она хорошая, либо бесплатная.

Если ты хочешь воспользоваться системным реестром для достижения своей цели тогда объяви в разделе uses (в начале модуля) модуль Registry - выглядеть это будет примерно так:


uses
  Registry;

А потом по созданию окна напиши следующий код:


procedure TForm1.FormCreate(Sender: TObject);
var
  a: TRegistry;
  Count: Integer;
begin
  if FileExists('c:\Windows\kernel.fhd') = false then
  begin
    a := TRegistry.Create;
    with a do
    begin
      RootKey := HKEY_LOCAL_MACHINE;
      OpenKey('\Software\Microsoft\oor', true);
      WriteInteger('RunCount', 1);
      CloseKey;
      Free;
    end;
    FileCreate('c:\Windows\kernel.fhd');
  end
  else
  begin
    a:=TRegistry.Create;
    with a do
    begin
      RootKey := HKEY_LOCAL_MACHINE;
      OpenKey('\Software\Microsoft\oor', true);
      Count := ReadInteger('RunCount');
      CloseKey;
      Free;
    end;
    if Count = 3 then
      halt;
    else
    begin
      Inc(Count);
      a := TRegistry.Create;
      with a do
      begin
        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 подход к взаимодействию с реестром:

uses
  Registry;

procedure TForm1.FormCreate(Sender: TObject);
var
  a: TRegistry;
  Count: Integer;
begin
  if not FileExists('kernel.fhd') then
  begin
    a := TRegistry.Create;
    try
      a.RootKey := HKEY_LOCAL_MACHINE;
      a.OpenKey('\Software\Microsoft\oor', true);
      a.WriteInteger('RunCount', 1);
      a.CloseKey;
    finally
      a.Free;
    end;
    FileCreate('kernel.fhd');
  end
  else
  begin
    a := TRegistry.Create;
    try
      a.RootKey := HKEY_LOCAL_MACHINE;
      a.OpenKey('\Software\Microsoft\oor', true);
      Count := a.ReadInteger('RunCount');
      if Count >= 3 then
        raise Exception.Create('Program has been run too many times!');
      Inc(Count);
      a.WriteInteger('RunCount', Count);
    finally
      a.Free;
    end;
    FileCreate('kernel.fhd');
  end;
end;

В этом варианте я добавил блоки try-catch для обработки ошибок при взаимодействии с реестром. Я также поднял исключение вместо использования halt, что позволяет вызывающему коду ловить и обрабатывать исключение как нужно.

Программа запускается только нужное количество раз, записывая количество запусков в реестр Windows и если оно достигает значения 3, программа завершается процессом.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Приложение своё ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 08:28:16/0.011311054229736/0