Защита программы паролем
Материал из DRKB
Защита программы паролем
Как видно из примера, программист может поместить любой код до обращения к методу Application.Run. В частности, он может показать диалоговое окно с запросом пароля и блокировать вызов Application.Run, если введенный пользователем пароль неверен. В следующем примере (листинг 4 - password.dpr) в проекте используются две формы: стандартная форма InputQuery и главная форма MainForm. Форма InputQuery создается при обращении к одноименной функции, определенной в модуле Dialogs. Она представляет собой небольшое диалоговое окно с однострочным редактором TEdit и двумя кнопками - ОК и Cancel. В окне пользователь должен ввести пароль (delphi) и нажать enter.
Листинг 4
program password;
uses
Forms,
Dialogs, // В этом модуле определена функция InputQuery
Unit1 in 'unit1.pas' {MainForm};
{$r *.res}
var
passwrd: string;
begin
// Запрашиваем пароль:
if InputQuery('Окно ввода пароля', 'Введите пароль:', passwrd) then
// Проверяем его:
if passwrd = 'delphi' then
begin // Все в порядке, пароль верен
Application.CreateForm(TMainForm, MainForm);
Application.Run;
end
else
ShowMessage('Пароль не верен!');
end.
Пробные версии программ
Вышеописанным способом можно создавать пробные версии программ, которые будут функционировать только до определенной даты или до исчерпания заданного количества запусков. В листинге 5 представлен файл проекта (trial.dpr), в котором пробная версия программы может запускаться не более 5 раз. Для запоминания номера очередного прогона используется системный реестр.
Листинг 5
program trial;
uses
Forms,
Unit1 in 'unit1.pas' {Form1},
Registry, Dialogs; // Для TRegistry и ShowMessage
{$r *.res}
var
reg: TRegistry;
n: Integer;
begin
reg := TRegistry.Create;
with reg do
begin
OpenKey('Software', True);
OpenKey('TrialProg', True);
if ValueExists('MaxRun') then // Первый запуск?
begin // - Нет
n := ReadInteger('MaxRun')-1;
if n >= 0 then
WriteInteger('MaxRun', n)
end
else
begin // -Да, первый запуск
n := 5;
WriteInteger('MaxRun', n)
end;
Free;
end;
if n > 0 then
begin
Application.CreateForm(TForm1, Form1);
Application.Run;
end
else
ShowMessage('Исчерпано максимальное количество запусков'
+ ' пробной версии программы')
end.
Здесь следует дать небольшой комментарий. Модуль Registry декларирует класс TRegistry, который представляет программисту доступ к системному реестру Windows. С помощью двух обращений к функции TRegistry.OpenKey создается и/или открывается ключ HKEY_CURRENT_USER/Software/TrialProg системного реестра. Функция TRegistry.ValueExists возвращает True, если этот ключ содержит параметр с именем MaxRun и для него определено значение. При первом запуске приложения это не так, поэтому процедурой WriteInteger создается параметр и для него указывается начальное значение 5 (максимальное количество прогонов программы). При каждом следующем запуске этот параметр уменьшается на 1 и в момент, когда он становится равен 0, приложение блокирует создание и отображение главного окна.
Source: http://www.delphi.h5.ru/
ID: 04521