//保存拨号上网信息
procedure TDialer.SaveINIFile(sEntryName,sUserName,sPassword : String);
var
IniFile : TIniFile;
FIniFileName : String;
EntryName : String;
UserName : String;
begin
FIniFileName := Copy(Application.ExeName, 1,
Length(Application.ExeName) - 3) + 'ini';
IniFile := TIniFile.Create(FIniFileName);
IniFile.WriteString('Last', 'EntryName', sEntryName);
IniFile.WriteString('Last', 'UserName', sUserName);
IniFile.WriteString('Last', 'Password', Encrypt(sPassword));
//if SavePWCheckBox.Checked then begin
// IniFile.WriteString('最后一次上网的信息', ' Password', EnCrypt(PasswordEdit.Text));
// IniFile.WriteString('最后一次上网的信息', 'SavePW', '1');
EntryName := CrunchName(Trim(sEntryName));
UserName := CrunchName(Trim(sUserName));
if (UserName <> '') and (EntryName <> '') then
IniFile.WriteString('RAS_ENTRY_' + EntryName,
'USER_' + UserName,
EnCrypt(sPassword))
//end
else begin
IniFile.WriteString('Last', 'Password', '');
IniFile.WriteString('Last', 'SavePW', '0');
end;
IniFile.Free;
end;
//
function TDialer.Encrypt(S : String) : String;
type
PWORD = ^WORD;
var
Len : Integer;
I : Integer;
V : DWORD;
P : PChar;
Buffer : String[255];
begin
Buffer := S;
Len := Length(Buffer) + 1;
if (Len mod 2) <> 0 then
Inc(Len);
if Len < 10 then
Len := 10;
I := Length(Buffer);
if I = 0 then
Buffer := IntToStr(GetTickCount)
else
while Length(Buffer) < 10 do
Buffer := Buffer + Buffer;
SetLength(Buffer, I);
Result := '';
P := PChar(@Buffer[0]);
for I := 1 to Len div 2 do begin
V := 34567 + PWORD(P)^;
P := P + 2;
Result := Result + Format('%5.5d', [V]);
end;
end;
{function TDialer.Decrypt(S : String) : String;
type
PWORD = ^WORD;
var
Buffer : String;
PW : String[255];
P : PWORD;
I : Integer;
V : Integer;
begin
PW := ' ';
P := PWORD(@PW[0]);
I := 1;
while I <= Length(S) do begin
Buffer := Copy(S, I, 5);
I := I + 5;
V := StrToInt(Buffer) - 34567;
P^ := V;
Inc(P);
end;
Result := PW;
end;}
function TDialer.CrunchName(S : String) : String;
var
I : Integer;
begin
Result := '';
for I := 1 to Length(S) do begin
case S[I] of
' ' : Result := Result + '_';
'=' : Result := Result + '\-';
'@' : Result := Result + '\A';
'_' : Result := Result + '\_';
'\' : Result := Result + '\\';
else
Result := Result + S[I];
end;
end;
end;
function TDialer.GetPhoneNumber: Integer;
begin
LoadPhoneBook;
Result:=PhoneBookNumber;
end;
function TDialer.GetModemName: string;
var
I : Integer;
begin
GetModemInfo;
Result := '';
for I := 0 to DeviceNumber -1 do
Result := Result + DeviceName[I] + ',';
end;
function TDialer.GetModemNumner: Integer;
begin
GetModemInfo;
Result := DeviceNumber;
end;
function TDialer.GetUserName(DialerName : string): string;
var
iReturn : Integer;
RASParams : TRasDialParams;
lpfp : LongBool;
begin
//FillChar(RASParams,Sizeof(TRasDialParams),0);
RASParams.dwSize := Sizeof(TRasDialParams);
StrPCopy(RASParams.szEntryName,DialerName);
lpfp := False;
iReturn := RasGetEntryDialParamsA(nil,@RASParams,@lpfp);
result :=RASParams.szUserName;
end;
function TDialer.GetPassword(DialerName: string): string;
var
iReturn : Integer;
RASParams : TRasDialParams;
lpfp : LongBool;
begin
//FillChar(RASParams,Sizeof(TRasDialParams),0);
RASParams.dwSize := Sizeof(TRasDialParams);
StrPCopy(RASParams.szEntryName,DialerName);
lpfp := False;
iReturn := RasGetEntryDialParamsA(nil,@RASParams,@lpfp);
result :=RASParams.szPassword;
end;
//读取拨号网络电话本
function TDialer.LoadPhoneBook : Boolean;
var
Entries : array [0..15] of TRASENTRYNAME;
cb : DWORD;
cEntries : DWORD;
dwRet : DWORD;
Buf : array [0..127] of char;
I : Integer;
begin
Result := False;
setlength(PhoneBookName,20);
FillChar(Entries, SizeOf(Entries), 0);
Entries[0].dwSize := SizeOf(TRASENTRYNAME);
cb := SizeOf(Entries);
cEntries := 0;
dwRet := RasEnumEntriesA(NIL, NIL, @Entries[0], @cb, @cEntries);
if dwRet <> 0 then
begin
RasGetErrorStringA(dwRet, @Buf[0], SizeOf(Buf));
exit; //LogMessage(Buf);
end
else
begin
Result := True;
PhoneBookNumber := cEntries;
for I := 0 to cEntries - 1 do
PhoneBookName[I] := Entries[I].szEntryName;
end;
end;
function TDialer.GetPhoneName : string;
var
I : Integer;
begin
LoadPhoneBook;
Result:='';
for I := 0 to PhoneBookNumber -1 do
Result := Result+PhoneBookName[I] + ',';
end;
//建立新的拨号网络连接
function TDialer.NewConnection(AHandle:THandle) : Boolean;
var
dwRet : DWORD;
Buf : Array [0..127] of char;
begin
Result := False;
//dwRet := RasCreatePhonebookEntryA(NewForm.Handle,nil);
dwRet := RasCreatePhonebookEntryA(AHandle,nil);
LoadPhoneBook;
if dwRet <> 0 then
begin
RasGetErrorStringA(dwRet, @Buf[0], SizeOf(Buf));
exit;
//LogMessage(Buf);
end;
Result := True;
end;
//编辑修改拨号网络属性
//function DoProperties(NewForm : TForm; EntriesName : String) : Boolean;
function TDialer.DoProperties(AHandle:THandle;EntriesName : string) : Boolean;
var
dwRet : DWORD;
Buf : Array [0..127] of char;
begin
Result := False;
//dwRet := RasEditPhonebookEntryA(NewForm , nil, PChar(EntriesName));
dwRet := RasEditPhonebookEntryA(AHandle, nil, PChar(EntriesName));
if dwRet <> 0 then
begin
RasGetErrorStringA(dwRet, @Buf[0], SizeOf(Buf));
//LogMessage(Buf);
end
else
Result := True;
end;
//获得调制解调器信息
function TDialer.GetModemInfo : Boolean;
var
dwRet : DWORD;
RasConn : array[0..15] of TRASCONN;
cb : DWORD;
cConnection : DWORD;
Buf : array [0..127] of char;
I : Integer;
begin
Result := True;
SetLength(DeviceName,20);
SetLength(DeviceType,20);
FillChar(RasConn, SizeOf(RasConn), 0);
RasConn[0].dwSize := SizeOf(TRASCONN);
cb :=Sizeof(RasConn);
cConnection := 0;
dwRet := RasEnumConnectionsA(@RasConn,@cb,@cConnection);
if dwRet<>0 then
begin
RasGetErrorStringA(dwRet, @Buf[0], SizeOf(Buf));
Result := False;
//LogMessage(Buf);
end;
DeviceNumber := cConnection;
for I:=0 to cConnection-1 do
begin
DeviceType[I]:= RasConn[I].szDeviceType;
DeviceName[I]:= RasConn[I].szDeviceName;
end;
end;
//获得上网连接的IP地址
function TDialer.GetIPAddress : string;
begin
result := RasGetIPAddress;
end;