📄 unit2.pas
字号:
unit Unit2;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls,Unit3,ExtCtrls;
const
DNLEN = 15;
UNLEN = 256;
PWLEN = 256;
NETBIOS_NAME_LEN = 16;
RAS_MaxDeviceType = 16;
RAS_MaxPhoneNumber = 128;
RAS_MaxIpAddress = 15;
RAS_MaxIpxAddress = 21;
RAS_MaxEntryName = 256;
RAS_MaxDeviceName = 128;
RAS_MaxCallbackNumber = RAS_MaxPhoneNumber;
ERR_STR = 'There is an error in program!';
MaxEntries = 100;
NUM_INPUT = 0; //电话号码用户输入
NUM_PHONEBOOK = 1; //电话号码来自电话本
type
LPRasDialParams = ^TRasDialParams;
TRasDialParams = record
dwSize : LongInt;
szEntryName : Array[0..RAS_MaxEntryName] of AnsiChar;
szPhoneNumber : Array[0..RAS_MaxPhoneNumber] of AnsiChar;
szCallbackNumber : Array[0..RAS_MaxCallbackNumber] of AnsiChar;
szUserName : Array[0..UNLEN] of AnsiChar;
szPassword : Array[0..PWLEN] of AnsiChar;
szDomain : Array[0..DNLEN] of AnsiChar;
end;
LPRasDialExtensions = ^TRasDialExtensions;
TRasDialExtensions = record
dwSize : LongInt;
dwfOptions : LongInt;
hwndParent : HWND;
reserved : LongInt;
end;
LPHRasConn = ^THRasConn;
THRasConn = Longint;
LPRasEntryName = ^TRasEntryName;
TRasEntryName = record
dwSize : Longint;
szEntryName : Array[0..RAS_MaxEntryName] of AnsiChar;
end;
LPRasConn = ^TRasConn;
TRasConn = record
dwSize : Longint;
hrasconn : THRasConn;
szEntryName : Array[0..RAS_MaxEntryName] of AnsiChar;
szDeviceType : Array[0..RAS_MaxDeviceType] of AnsiChar;
szDeviceName : Array[0..RAS_MaxDeviceName] of AnsiChar;
end;
function RasEnumEntries(reserved: PAnsiChar; lpszPhoneBook: PAnsiChar;
entrynamesArray: LPRasEntryName; var lpcb: Longint;
var lpcEntries: Longint): Longint; stdcall;
function RasGetEntryDialParams(lpszPhoneBook: PAnsiChar; var lpDialParams: TRasDialParams;
var lpfPassword: LongBool): Longint; stdcall;
function RasDial(lpRasDialExt: LPRasDialExtensions; lpszPhoneBook: PAnsiChar;
var params: TRasDialParams; dwNotifierType: Longint;
lpNotifier: Pointer; var rasconn: THRasConn): Longint; stdcall;
function RasHangUp(hConn: THRasConn): Longint; stdcall;
function RasGetErrorString(errorValue: Integer;erroString: PAnsiChar;cBufSize: Longint): Longint; stdcall;
type
TDialUp = class(TComponent)
private
FEntries : TStringList;
hRAS : ThRASConn;
sEntryName : String;
sPassword : String;
sUserName : String;
sPhoneNum : String;
public
constructor Create(AOwner:TComponent); override;
destructor Destroy; override;
function Dial(iNumType:Integer) : Integer;
function GetEntries : Integer;
function HangUp : Integer;
function GetPhoneNum(sPhoneEntry:String) : String;
published
property Entries : TStringList
read FEntries;
property EntryName : String
read sEntryName write sEntryName;
property Password : String
read sPassword write sPassword;
property UserName : String
read sUserName write sUserName;
property PhoneNum : String
read sPhoneNum write sPhoneNum;
end;
implementation
//************************************************************
constructor TDialUp.Create(AOwner:TComponent);
begin
inherited Create(AOwner);
FEntries:=TStringList.Create;
end;
//************************************************************
destructor TDialUp.Destroy;
begin
inherited Destroy;
FEntries.Free;
end;
//************************************************************
Function TDialUp.GetEntries : Integer;
var
BuffSize : Integer;
Entries : Integer;
Entry : Array[1..MaxEntries] of TRasEntryName;
X,Result_ : Integer;
begin
Result:=0;
FEntries.Clear;
Entry[1].dwSize:=SizeOf(TRasEntryName);
BuffSize:=SizeOf(TRasEntryName)*MaxEntries;
Result_:=RasEnumEntries(nil, nil, @Entry[1], BuffSize, Entries);
if (Result_=0) and (Entries>0) then
begin
for X:=1 to Entries do
begin
FEntries.Add(Entry[x].szEntryName);
// If Assigned(FOnEntryGet) then FOnEntryGet(Self,Entry[x].szEntryName);
end;
end else
Result:=Result_;
end;
//************************************************************
function TDialUp.GetPhoneNum(sPhoneEntry:String) : String;
var
Fp : LongBool;
R : Integer;
DialParams : TRasDialParams;
begin
FillChar(DialParams, SizeOf(TRasDialParams), 0);
with DialParams do
begin
dwSize:=Sizeof(TRasDialParams);
StrCopy(szEntryName,PChar(sPhoneEntry));
end;
Fp:=True;
R:=RasGetEntryDialParams(nil, DialParams, Fp);
if (R=0) then
Result:=DialParams.szPhoneNumber
else
Result:= ERR_STR;
end;
//************************************************************
function TDialUp.Dial(iNumType:Integer) : Integer;
var
Fp : LongBool;
R : Integer;
CErr : Array[0..100] of Char;
sErr : String;
DialParams : TRasDialParams;
stest:String;
begin
// HangUp;
R:=0;
if hRas<>0 then
ShowMessage('已进行拨号连接,如若希望拨号请先断开连接!')
else
begin
FillChar(DialParams, SizeOf(TRasDialParams), 0);
with DialParams do
begin
dwSize:=Sizeof(TRasDialParams);
StrPCopy(szEntryName, sEntryName);
if (iNumType = NUM_INPUT) then
StrPCopy(szUserName, sUserName);
end;
OKBottomDlg.Show ;
OKBottomDlg.lblHint.Caption:='正在连接,请等待!';
OKBottomDlg.lblHint.Refresh;
Fp:=false;
R:=RasGetEntryDialParams(nil, DialParams, Fp);
// StrPCopy(DialParams.szUserName, 'gr');
// StrPCopy(DialParams.szPhoneNumber, '17');
StrPCopy(DialParams.szPassword, sPassword);
stest:= DialParams.szUserName;
stest:= DialParams.szPassword;
hRAS:=0;
R:=RasDial(nil, nil, DialParams, 0, nil, hRAS);
OKBottomDlg.Hide;
if R<>0 then
begin
RasGetErrorString(R,CErr,100);
sErr:=CErr;
ShowMessage(sErr);
HangUp;
end;
end;
Result:=R;
end;
//************************************************************
function TDialUp.HangUp : Integer;
begin
if hRas<>0 then
begin
RasHangUp(hRas);
hRas:=0;
end;
end;
//************************************************************
function RasDial; external 'rasapi32.dll' name 'RasDialA';
function RasGetEntryDialParams; external 'rasapi32.dll' name 'RasGetEntryDialParamsA';
function RasHangUp; external 'rasapi32.dll' name 'RasHangUpA';
function RasEnumEntries; external 'rasapi32.dll' name 'RasEnumEntriesA';
function RasGetErrorString; external 'rasapi32.dll' name 'RasGetErrorStringA';
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -