Delphi - Tálcára lezárt alkalmazás jelszavas védelme

forráskód letöltése
Mai cikkünkben bemutatunk egy olyan módszert, mellyel a tálcára lezárt alkalmazásainkat láthatjuk el jelszavas védelemmel. Elég csak minimalizálnunk a programunkat, és aktivizálódik a védelem. Amikor újra megnyitjuk azt a tálcáról, feldob egy dialógot, melyben kéri az előre rögzített jelszót. A program olyan helyeken lehet hasznos, ahol nem szeretnénk zárolni a számítógépet, mert mondjuk azt többen is használják, viszont a programunkat mégis védeni szeretnénk az illetéktelen használattól.
A program két rendszerüzenet figyelésére épül. Az egyik az SC_MINIMIZE, mely akkor jön létre, mikor alkalmazásunk minimalizálásra kerül. A másik a WA_ACTIVE, mely az alkalmazás újbóli megnyitásakor keletkezik.
A Form-unk private deklarációjába a következőket kell beírni.
    procedure WMSYSCOMMAND(var Msg: TWMSysCommand); message WM_SYSCOMMAND;
    procedure WMActivate(var Msg: TWMActivate ); message WM_Activate;
A WMActivate függvényel azt vizsgáljuk, mikor keletkezik a WA_ACTIVE üzenet, valamint a bPassWordDialog logikai változó igaz értékű-e. Ez utóbbi arra szolgál, hogy a jelszó dialóg csak abban az esetben jelenjen meg, ha a Form a tálcáról lett megnyitva. Ellenkező esetben az már a program indulásakor megjelenne, hiszen akkor is aktiválódik a Form. Amennyiben mindkét feltétel teljesül, megnyitjuk a jelszóablakot, valamint a bPassWordDialog logikai változó értékét hamisra állítjuk.
procedure TForm1.WMActivate(var Msg: TWMActivate);
begin
  if (Msg.Active = WA_ACTIVE) and (bPassWordDialog) then
    begin
      bPassWordDialog:=False;
      PasswordDlg.ShowModal;
    end;
  inherited;
end;
A WMSYSCOMMAND függvénnyel azt vizsgáljuk, hogy a Form-ot mikor zárjuk le a tálcára. Az SC_MINIMIZE létrejöttekor a bPassWordDialog értékét igazra állítjuk, ezzel jelezve a fenti függvénynek azt, hogy meg kell jelenítenie a jelszó ablakot.
procedure TForm1.WMSYSCOMMAND(var Msg: TWMSysCommand);
begin
  bPassWordDialog:=False;
  if Msg.CmdType = SC_MINIMIZE then
    bPassWordDialog:=True;
  inherited;
end;
A jelszó dialógban csak akkor engedjük a Form1-hez a hozzáférést, ha helyes adatot adtak meg.
procedure TPasswordDlg.OKBtnClick(Sender: TObject);
begin
  if PasswordEdit.Text='animare123' then
    PasswordDlg.Close
  else
    ShowMessage('Hibás jelszó');
Mindkét esetben le kell törölnünk az Edit doboz tartalmát, valamint újra rá kell fókuszálnunk.
  PasswordEdit.Text:='';
  PasswordEdit.SetFocus;
end;