Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Защита программы паролем

01.01.2007

Защита программы паролем

Как видно из примера, программист может поместить любой код до обращения к методу 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_usersoftwaretrialprog системного реестра. Функция tregistry.valueexists возвращает true, если этот ключ содержит параметр с именем maxrun и для него определено значение. При первом запуске приложения это не так, поэтому процедурой writeinteger создается параметр и для него указывается начальное значение 5 (максимальное количество прогонов программы). При каждом следующем запуске этот параметр уменьшается на 1 и в момент, когда он становится равен 0, приложение блокирует создание и отображение главного окна.

Источник: http://www.delphi.h5.ru/