Под полем pass разместите кнопку (компонент Button категории Standard
) и присвойте ее свойству Caption значение Enter. По нажатию этой кнопки будет выполняться проверка корректности пароля.Еще нам потребуется два компонента Timer категории System
. Для первого таймера необходимо изменить значение свойства Interval на 10, для второго никаких свойств изменять не нужно.Результат оформления формы должен соответствовать рис. 10.1.
Рис. 10.1. Форма для программы входа в систему
Разработка программного кода
Объявим в качестве закрытых членов класса формы переменную типа HWND и две процедуры, которые разработаем чуть позже:
type
TForm1 = class(TForm)
…
private
{ Private declarations }
h1: HWND;
procedure logon
//введен верно
procedure_check
public
{ Public declarations }
end;
Теперь в разделе implementation создадим сами процедуры. Сначала процедура check:
procedure TForm1.check;
begin
if pass.Text = 'password' then
begin
//узнаем идентификатор Рабочего стола
h1
//разрешаем работу с Рабочим столом
ShowWindow(h1
// узнаем идентификатор панели задач
h1
//разрешаем работу с панелью задач
ShowWindow(h1, sw_show)
halt;
end
else ShowMessage('Wrong password!
end;
Процедура check проверяет корректность пароля. В данном случае в качестве пароля используется слово "password". Если в поле pass введено именно это слово, то разблокируем Рабочий стол и панель задач. После этого доступ ко всему открыт, и мы завершаем работу программы. Если же введенный пользователем текст не совпадает с корректным паролем, то мы продолжаем требовать ввод пароля.
Теперь очередь процедуры logon:
procedure TForm1.logon;
begin
//узнаем идентификатор Рабочего стола
h1
ShowWindow(h1
//находим панель задач
h1
ShowWindow(h1
{проверяем, не запущен ли диспетчер задач}
h1
{если да, то закрываем окно диспетчера задач}
if (h1 <> 0) then PostMessage(h1, WM_QUIT, 1, 0);
end;
Здесь мы блокируем Рабочий стол и панель задач, а затем проверяем, не пытается ли пользователь отключить нашу программу с помощью диспетчера задач. Если окно диспетчера задач открыто, то закрываем его.
Теперь нам почти не придется программировать — мы просто будем вызывать процедуры check и logon. При нажатии кнопки Enter вызывается процедура check:
procedure TForm1.Button1Click(Sender: TObject);
begin
check
end;
Для того чтобы не утруждать пользователя нажатиями кнопки на форме, имитируем эту операцию по нажатию в поле pass клавиши
procedure TForm1.passKeyPress(Sender: TObject; var Key:Char);
begin
if key = #13 then
check;
end;
#13 —это код клавиши
Коды символов и клавиш клавиатуры перечислены в приложении А.
Для первого таймера событие OnTimer будет содержать только вызов процедуры logon:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
logon;
end;
Для второго таймера (у которого свойство Interval имеет значение 1000) добавьте в обработчик события OnTimer следующий код:
procedure TForm1.Timer2Timer(Sender: TObject);
begin