⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 在delphi程序管理拨号网络.txt

📁 大量Delphi开发资料
💻 TXT
📖 第 1 页 / 共 2 页
字号:
pRASDIALPARAMS:LPRASDIALPARAMS;//拨号参数,是一个RASDIALPARAMS类型的指针

var lpfPassword : WordBool//是否删除用户密码

) : DWORD; stdcall;

function RasSetEntryDialParams;external RasApiDll name 'RasSetEntryDialParamsA';

参数pRASDIALPARAMS的说明同RasGetEntryDialParams.

参数lpfPassword的含义与RasGetEntryDialParams不同,在此表示是否删除用户密码,为

TRUE时将原来的用户密码删除.


函数返回值为0表示执行成功;否则为错误代码.

下面是一个应用例子,设置指定拨号连接的拨号参数.

var

dwResult : DWORD;

RASDIALPARAMSData : RASDIALPARAMS;

RemovePWD : WordBool;

begin

//指定拨号连接的拨号参数

with RASDIALPARAMSData do

begin

dwSize := sizeof( RASDIALPARAMS );//结构大小

szEntryName := '163';//指定拨号连接的名称

szUserName := 'MyName';//指定用户名称

szPassword := 'MyPassword';//指定用户密码

szDomain := 'MyDomain';//指定域名

szCallbackNumber := '';//指定回叫号码

szPhoneNumber := '';//指定拨号号码

end;

RemovePWD := false;//不需要删除用户密码


//设置指定拨号连接的拨号参数

dwResult := RasSetEntryDialParams( ''

@RASDIALPARAMSData

RemovePWD );


if dwResult <> 0 then //设置指定拨号连接的拨号参数失败

memo1.lines.add( '设置'+StrPAS(RASDIALPARAMSData.szEntryName )+'拨号参数失败:'

+ GetRasError( dwResult ))

else

begin//显示指定拨号连接的拨号参数

memo1.lines.add( StrPAS(RASDIALPARAMSData.szEntryName )+'拨号参数设置成功');

memo1.lines.add( '用户名称:' + StrPAS(RASDIALPARAMSData.szUserName ));

memo1.lines.add( '用户密码:' + StrPAS(RASDIALPARAMSData.szPassword ));

memo1.lines.add( '域 名:' + StrPAS(RASDIALPARAMSData.szDomain ));

memo1.lines.add( '回叫号码:' + StrPAS(RASDIALPARAMSData.szCallbackNumber ));

memo1.lines.add( '拨号号码:' + StrPAS(RASDIALPARAMSData.szPhoneNumber ));

end;

end;


四、用指定的拨号连接拨号、挂断指定的拨号连接

1、用指定的拨号连接拨号

拨号有两种方法,一种是调用拨号网络中的拨号程序,就象用户自己用鼠标双击拨号连接名称一

样,用户可以修改拨号号码、用户名称和用户密码,最后由拨号网络来完成拨号过程;另一个方法则

是调用RasAPI函数.

(1)用拨号网络中的拨号程序

在程序中可以用如下代码:

winexec('rundll32.exe rnaui.dll

RnaDial 169'

SW_SHOWNORMAL);

其中字符串中的最后一个参数“169”为拨号连接的名称。

(2)用RasAPI函数拨号

用拨号连接拨号的RasAPI函数为RasDial,其函数原型为:

function RasDial(

pRasDialExtensions : LPRASDIALEXTENSIONS;//在WIN9X下无用

可设置为NIL

lpszPhonebook : PChar;//电话本名称,在Win9X下无作用

可为空字符串

lpRasDialParams : LPRASDIALPARAMS;//拨号参数

dwNotifierType : DWORD;//消息通知方式

handle : TRasDialFunc;//消息处理事件

var lphRasConn : DWORD//返回的成功连接的连接句柄

) : DWORD; stdcall;

function RasDial;external RasApiDll name 'RasDialA';


参数pRASDIALPARAMS的说明同RasGetEntryDialParams.

参数dwNotifierType表示消息通知方式.在拨号过程中,系统发出拨号事件消息可以通知拨号

进度,因而需要提供接受消息的方式和处理消息的函数.当其值为$FFFFFFFF时,则参数handle被

视为一个窗口的句柄,事件消息被发生该窗口处理;当其值为0时,handle被视为TRasDialFunc类型

的函数的指针;当其值为1时,handle被视为TRasDialFunc1类型的函数的指针.

参数handle表示消息处理函数指针,其类型可以THandle、TRasDialFunc、TRasDialFunc1.当该

参数不为NULL或NIL时,其代表的消息处理函数指针将接受拨号进度通知消息;为NIL时,拨号过程由

异步方式变为同步方式,直到拨号过程成功或失败后RasDial函数才返回.详细可参见Delphi帮助文件

中关于RasDial函数的帮助。

当拨号连接成功时,lphRasConn将表示其连接句柄.


函数返回值为0表示执行成功;否则为错误代码.

下面是一个应用例子,按指定的拨号参数拨号.


var

RASDIALPARAMSData : RASDIALPARAMS;

dwResult : DWord;

RasCon : DWord;

begin

//指定拨号连接的拨号参数

with RASDIALPARAMSData do

begin

dwSize := sizeof( RASDIALPARAMS );//结构大小

szEntryName := '163';//指定拨号连接的名称

szUserName := 'MyName';//指定用户名称

szPassword := 'MyPassword';//指定用户密码

szDomain := 'MyDomain';//指定域名

szCallbackNumber := '';//指定回叫号码

szPhoneNumber := '';//指定拨号号码

end;


//用指定的拨号参数拨号,采用同步拨号方式

dwResult := RasDial( NIL

''

@RASDIALPARAMSData

0

NIL

RasCon );


if dwResult <> 0 then //设置指定拨号连接的拨号参数失败

memo1.lines.add( '用'+StrPAS(RASDIALPARAMSData.szEntryName )+'拨号失败:'

+ GetRasError( dwResult ))

else

memo1.lines.add( '用'+StrPAS(RASDIALPARAMSData.szEntryName )+'拨号成功!' );

end;


2、挂断指定的拨号连接

挂断拨号连接的RasAPI函数为RasHangUp,其函数原型为:

function RasHangUp(

hRasConn : DWORD//要挂断的拨号连接的句柄

) : DWORD; stdcall;

function RasHangUp;external RasApiDll name 'RasHangUpA';

函数返回值为0表示执行成功;否则为错误代码.

下面是一个应用例子,挂断由RasDial建立的拨号连接.


//挂断由RasDial建立的拨号连接

dwResult := RasHangUp( RasCon );

if dwResult <> 0 then //挂断失败

memo1.lines.add( '挂断失败:' + GetRasError( dwResult ))

else

memo1.lines.add( '挂断成功!');


五、获取当前活动的连接及其连接状态

1、获取当前活动的连接

获取当前活动的连接的RasAPI函数为RasEnumConnections,其函数原型为:

function RasEnumConnections( var lprasconn : RASCONN ;//接收活动连接的缓冲区的指针

var lpcb: DWORD;//缓冲区大小

var lpcConnections : DWORD//实际的活动连接数

) : DWORD; stdcall;

function RasEnumConnections;external RasApiDll name 'RasEnumConnectionsA';

参数lprasconn提供了一个RASCONN类型数组的指针,指向一个接收活动连接的缓冲

区,其中RASCONN的类型说明如下:

RASCONN = record

dwSize : DWORD;//该结构所占内存的大小(Bytes)

一般设置为SizeOf(RASCONN)

hrasconn : HRASCONN;//活动连接的句柄

szEntryName : array[0..RAS_MaxEntryName] of char;//活动连接的名称

szDeviceType : array[0..RAS_MaxDeviceType] of char;//活动连接的所用的设备类型

szDeviceName : array[0..RAS_MaxDeviceName] of char;//活动连接的所用的设备名称

end;

参数lpcb为缓冲区大小(Bytes).

参数lpcConnections将返回实际的连接数目.


函数返回值为0表示执行成功;否则为错误代码.


2、获取指定连接的连接状态

获取指定连接的连接状态的RasAPI函数为RasGetConnectStatus,其函数原型为:

function RasGetConnectStatus(

hrasconn : HRASCONN; //指定活动连接的句柄

lprasconnstatus : LPRASCONNSTATUS//连接状态参数

) : DWORD; stdcall;

function RasGetConnectStatus;external RasApiDll name 'RasGetConnectStatusA';

连接状态参数lprasconnstatus是一个RASCONNSTATUS类型的指针,将返回连接状态参数.

RASCONNSTATUS和LPRASCONNSTATUS的类型说明如下:

LPRASCONNSTATUS = ^RASCONNSTATUS;

RASCONNSTATUS = record

dwSize : DWORD;//该结构所占内存的大小(Bytes)

一般设置为SizeOf(RASCONNSTATUS)

rasconnstate : RASCONNSTATE;//连接状态标识,一组DWORD类型数值的集合。

dwError : DWORD;//错误类型标识符

szDeviceType : array[0..RAS_MaxDeviceType] of char;//活动连接的所用的设备类型

szDeviceName : array[0..RAS_MaxDeviceName] of char;//活动连接的所用的设备名称

end;

函数返回值为0表示执行成功;否则为错误代码.


下面是一个应用例子,列出了当前系统中活动的连接的名称及其连接状态.

注意,应在RASCONN缓冲区的第一个RASCONN结构中设置dwSize.


const

MaxConnections = 10;//最多的拨号连接数目

var

connections : array[0..MaxConnections-1] of RASCONN;

longSize : dword;

intAvailabelConnections : dword;

intIndex : integer;

dwResult : DWORD;

strTemp : string;

RASCONNSTATUSData : RASCONNSTATUS;

begin

connections[ 0 ].dwSize := sizeof(RASCONN);//结构的大小

longSize := MaxConnections * connections[ 0 ].dwSize;//缓冲区大小

intAvailabelConnections := 0;//实际的活动连接的数目

//获取当前系统中活动的连接

dwResult := RasEnumConnections( connections[ 0 ]

longSize

intAvailabelConnections );

if dwResult <> 0 then //获取当前系统中活动的连接

memo1.lines.add( '获取当前系统中活动的连接:' + GetRasError( dwResult ))

else

begin

memo1.lines.add( '当前系统中活动的连接' + inttostr( intAvailabelConnections )

+ '个,列举如下' );

for intIndex := 0 to intAvailabelConnections - 1 do

begin

strTemp := '连接名称:' + StrPAS( connections[ intIndex ].szEntryName )

+ ' 设备类型:' + StrPAS( connections[ intIndex ].szDeviceType )

+ ' 设备名称:' + StrPAS( connections[ intIndex ].szDeviceName );

//获取连接状态

dwResult := RasGetConnectStatus( connections[ intIndex ].hRasConn

@RASCONNSTATUSData );

if 0 <> dwResult then

strTemp := strTemp + ' 连接状态未知:' + GetRasError( dwResult )

else if RASCONNSTATUSData.rasconnstate = RASCS_Connected then

strTemp := strTemp + ' 连接状态:已连接'

else

strTemp := strTemp + ' 连接状态:(' +

inttostr(RASCONNSTATUSData.rasconnstate)+')';

memo1.lines.add( strTemp );

end;

end;

end;


以上程序在PWIN98+Delphi3.0下调试通过。

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -