📄 card_changepsw.pas
字号:
unit Card_ChangePsw;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Mask, Buttons, IniFiles;
type
TFrmCard_ChangePsw = class(TForm)
GroupBox1: TGroupBox;
Label1: TLabel;
MaskEdit1: TMaskEdit;
Label2: TLabel;
MaskEdit2: TMaskEdit;
Label3: TLabel;
MaskEdit3: TMaskEdit;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
GroupBox2: TGroupBox;
Label4: TLabel;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure MaskEdit1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure MaskEdit2KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure MaskEdit3KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
public
{ Public declarations }
function IfNull: Boolean;
procedure GetComh(var comh: smallint);
function Change(comh: smallint): Boolean;
procedure WriteToini;
function ChangePassWord(Comh: smallint; OldPSW: PChar; NewPSW: PChar):
smallint;
function ReadFromDll(filelx: string; comh: smallint; passwordz: PChar):
smallint;
end;
procedure SetWork;
implementation
uses PublicUnit;
{$R *.dfm}
procedure SetWork;
var
FrmCard_ChangePsw: TFrmCard_ChangePsw;
begin
Screen.Cursor := CrHourGlass;
Application.CreateForm(TFrmCard_ChangePsw, FrmCard_ChangePsw);
FrmCard_ChangePsw.ShowModal;
FrmCard_ChangePsw.Free;
Screen.Cursor := CrDefault;
end;
procedure TFrmCard_ChangePsw.BitBtn1Click(Sender: TObject);
var
comh, returnvalue: smallint;
begin
if not IfNull then
Exit;
GetComh(comh);
if Change(comh) then
ShowMessage('密码修改成功!');
if MessageBox(handle, '修改下一张卡片的密码吗?', '提示', MB_YesNo) = ID_No
then
Exit;
SetWork;
end;
function TFrmCard_ChangePsw.IfNull: Boolean;
begin
Result := False;
if MaskEdit1.Text = '' then
begin
ShowMessage('请输入原密码!');
MaskEdit1.SetFocus;
Exit;
end;
if MaskEdit2.Text = '' then
begin
ShowMessage('请输入新密码!');
MaskEdit2.SetFocus;
Exit;
end;
if MaskEdit3.Text = '' then
begin
ShowMessage('请再输入一次新密码!');
MaskEdit3.SetFocus;
Exit;
end;
if Trim(MaskEdit3.Text) <> Trim(MaskEdit2.Text) then
begin
ShowMessage('请重新输入新密码!');
MaskEdit3.SetFocus;
Exit;
end;
Result := True;
end;
procedure TFrmCard_ChangePsw.GetComh(var comh: smallint);
begin
if RadioButton1.Checked then
comh := 0
else if RadioButton2.Checked then
comh := 1;
end;
function TFrmCard_ChangePsw.Change(comh: smallint): Boolean;
var
returnvalue: smallint;
aa, aa1: string;
begin
Result := False;
aa := Trim(MaskEdit1.Text);
aa1 := Trim(MaskEdit2.Text);
returnvalue := ReadFromDll('checkpass', comh, PChar(aa));
if returnvalue <> 1 then
begin
ShowMessage('原密码错误,请重新输入!');
MaskEdit1.Text := '';
MaskEdit1.SetFocus;
Exit;
end;
if RadioButton1.Checked then
comh := 0
else
comh := 1;
returnvalue := ChangePassWord(comh, Pchar(aa), Pchar(aa1));
if returnvalue <> 1 then
begin
ShowMessage('密码修改失败,请重新输入!');
MaskEdit1.Text := '';
MaskEdit2.Text := '';
MaskEdit3.Text := '';
MaskEdit1.SetFocus;
Exit;
end;
WriteToIni;
Result := True;
end;
//修改密码
function TFrmCard_ChangePsw.ChangePassWord(Comh: smallint; OldPSW: PChar;
NewPSW: PChar): smallint;
type
TDllFunc = function(com: smallint; password: PChar; newpass: PChar): smallint;
stdcall;
var
alib: THandle;
proc: TDllFunc;
FileName: string;
begin
FileName := ExtractFilePath(Application.ExeName) + 'iccardp.dll';
try
alib := LoadLibrary(PChar(FileName));
except
proc := nil;
FreeLibrary(alib);
Screen.Cursor := crDefault;
ShowMessage('未能成功调用ic卡机的函数iccardp.dll!');
Exit;
end;
if alib = 0 then
begin
Screen.Cursor := crDefault;
ShowMessage('无法访问ic卡机的函数iccardp.dll!');
Exit;
end;
Proc := TDllFunc(GetProcAddress(alib, PChar('changepass')));
if @Proc = nil then
begin
Screen.Cursor := crDefault;
ShowMessage('无法访问ic卡机修改密码函数!');
Exit;
end;
Result := Proc(Comh, OldPSW, NewPSW);
end;
// 校验密码
function TFrmCard_ChangePsw.ReadFromDll(filelx: string; comh: smallint;
passwordz: PChar): smallint;
type
TDllFunc = function(com: integer; password: pchar): smallint; stdcall;
var
alib: THandle;
proc: TDllFunc;
FileName: string;
begin
FileName := ExtractFilePath(Application.ExeName) + 'iccardp.dll';
try
alib := LoadLibrary(PChar(FileName));
except
proc := nil;
FreeLibrary(alib);
Screen.Cursor := crDefault;
ShowMessage('未能成功调用ic卡机的函数iccardp.dll!');
Exit;
end;
if alib = 0 then
begin
Screen.Cursor := crDefault;
ShowMessage('无法访问ic卡机的函数iccardp.dll!');
Exit;
end;
Proc := TDllFunc(GetProcAddress(alib, PChar(filelx)));
if @Proc = nil then
begin
Screen.Cursor := crDefault;
ShowMessage('无法访问ic卡机读取数据函数!');
Exit;
end;
Result := Proc(comh, passwordz);
end;
procedure TFrmCard_ChangePsw.BitBtn2Click(Sender: TObject);
begin
Close;
end;
procedure TFrmCard_ChangePsw.WriteToini;
var
ti: TInifile;
Comh: integer;
begin
ti := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'System.ini');
ti.WriteString('默认选项', 'Mima', EncryFunc(Trim(MaskEdit2.Text)));
if RadioButton1.Checked then
Comh := 0
else
Comh := 1;
ti.WriteInteger('默认选项', 'Port', Comh);
ti.Free;
end;
procedure TFrmCard_ChangePsw.MaskEdit1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = 13 then
MaskEdit2.SetFocus;
end;
procedure TFrmCard_ChangePsw.MaskEdit2KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = 13 then
MaskEdit3.SetFocus;
end;
procedure TFrmCard_ChangePsw.MaskEdit3KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = 13 then
BitBtn1Click(Self);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -