|
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"パスワード処理"
◆説明◆
パスワードによる機能制限を行います。
このサンプルでは
1:「Form1 から Button1 をクリックすることで、Form2 が開く」という処理
部分でパスワードの確認を行います。
2: 使用期限を初回起動時から3ヶ月としています。ただし極めて非正確な
もので、最大1ヶ月くらいの誤差が出るものです。 ( );
3: 使用期間内はパスワード確認の正否に関わらず Form2 を表示しますが、
使用期間が過ぎるとパスワード確認が否の場合には Form2 を表示しなくな
る、という仕様のものです。
◆留意点◆
「使用期限」というものを設けるに当たって、初回起動時の日付をどこかに
記録しておく必要が生じます。
ここで、例えばこれを INI ファイルやレジストリなどに記録した場合、あ
る程度のコンピュータ知識のある人なら、少々の手間はかかるものの、基本
的には無登録で永続使用が可能となります。
残念ながら私の知識では、これを完全に防ぐ方法には思い至らないのです
が、このサンプルでは「Windows ディレクトリに密かに記録ファイルを作成
する (^^;」という方法で行います。
◆注意点◆
1: このサンプルでは "Form1.Label1.Caption" を INI ファイルなどに記録
することを前提とし、同Caption が "OK" であればパスワード確認済みであ
るとみなす、としています。
2: パスワード入力フォームの名前は FormPW としています。
3: FormPW も自動作成の対象となっています。
◆サンプルコード◆
=↓↓ Form1 コード ↓↓ = = = = = = = = = = =
procedure TForm1.Button1Click(Sender: TObject);
begin
if Label1.Caption = 'OK' then
begin
Form2.Show;
Exit;
end else FormPW.ShowModal;
end;
=↓↓ FormPW コード ↓↓= = = = = = = = = = =
unit PassW;
interface
// ・・略
implementation
{$R *.DFM}
uses
Unit1, Unit2;
var
HideFile: String; // "?:Windows\隠しファイル名" 用の変数
Fst: Boolean; // 初回起動か否かの判定用
m, Month: Word;
procedure TFormPW.FormShow(Sender: TObject);
var
data: String;
y, d: Word;
Load: TextFile;
SZ: Integer;
P: PChar;
begin
// Windows ディレクトリの取得
P := nil;
SZ := GetWindowsDirectory(P, 0);
GetMem(P, SZ);
GetWindowsDirectory(P, SZ);
// 変数 HideFile に、隠しファイル "XXX.XXX(仮)" のフルパスを代入
HideFile := P + '\XXX.XXX'
// 起動日の "月データ" を m に取得
DecodeDate(Now, y,m,d);
Fst := False;
try
AssignFile(Load, HideFile);
try
Reset(Load);
Readln(Load, data);
// 隠しファイルの初回起動月を Month に代入
Month := StrToInt(data);
finally
CloseFile(Load);
end;
except
on EInOutError do // もし Windows ディレクトリに
begin // XXX.XXX ファイルが存在しなければ
Fst := True; // ←初回起動と判断
Month := m;
end;
end;
end;
procedure TFormPW.Button1Click(Sender: TObject);
var
Save: TextFile;
begin
if Edit1.Text = 'PassWordOK' then // このサンプルのパスワード
begin // が "PassWordOK"
ShowMessage('パスワードを確認しました');
Form1.Label1.Caption := 'OK';
DeleteFile(HideFile); // 隠しファイルを削除
Form2.Show;
Close;
end else
begin
if Month > m then m := m + 12;
if Month + 3 > m then
begin
ShowMessage('このソフトはシェアウェアです');
Form2.Show;
end else
ShowMessage('使用期限が終了しました');
end;
if Fst = True then // もし初回起動であれば
begin // 今回の起動月を隠しファイルに保存
try
AssignFile(Save, HideFile);
Rewrite(Save);
Writeln(Save, IntToStr(Month));
finally
CloseFile(Save);
end;
end;
Close;
end;
end.
◆参考までに◆
1: FormPW は自動作成ではない方が良いと思います。
2: もしこのように Windows ディレクトリ内に隠しファイルを作成する方法
を採用される場合は、"XXX.XXX" ナドというような、見るからに怪しげな
ファイル名は使用しない方が良いと思います。
でも、"WinINI.buf" とか "Autoexe.buc" ナドとしても、コレはコレで
十分怪しげなのですが・・・ ( );; コンナ ファイル ナイヨナ・・・
J-OH!(VEC05267)
Original document by J-OH! 氏 ID:(VEC05267)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|