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

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

📁 大量Delphi开发资料
💻 TXT
📖 第 1 页 / 共 2 页
字号:
在DELPHI程序管理拨号网络



用MODEM拨号上网,仍是大多数个人网民选择上网的方式.如果能在我们的应用程序中管理拨号网络(如Foxmail、Sygate中的拨号功能),无疑将会方便我们的软件用户(不用再切换应用程序,运行拨号网络),提高我们的软件的友好性从而提高软件的竞争力.

在WIN9X下,如果安装了拨号网络,则在WINDOWS系统的系统目录System下将有两个拨号网络管理程序库RasApi32.DLL和RasApi16.DLL,我们可利用其中的函数来获取和设置拨号连接网络的信息。在Delphi帮助文件中,有相关函数的说明。


在此,我们要讨论的管理项目有:

1、获取当前系统中可用的拨号连接名称

2、新建拨号连接、修改拨号连接的属性

3、获取和设置拨号连接的拨号参数

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

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


一、获取当前系统中可用的拨号连接名称

即获取系统中已建立的拨号连接的名称,可用来让用户选择使用哪个拨号连接进行拨号.

可以用两种方法来实现.一种是利用RasAPI函数;另一种是不用RasAPI函数,直接在注册表中查询.


1、不用RasAPI函数,直接在注册表中查询

在注册表的HKEY_USERS\.Default\RemoteAccess\Addresses下,列出了已经在拨号网络中建立

了的拨号连接的名称及其属性设置,其中各项目的名称即为可用的拨号连接的名称;各项目的值即

为各拨号连接的属性设置,不过是二进制串,笔者还看不懂.由此可见,我们只要读出各项目的名

称即可获取当前系统中可用的拨号连接名称.

var

registryTemp : TRegistry;

stringsTemp : TStringlist;

begin

registryTemp := TRegistry.Create;

stringsTemp := TStringlist.Create;

with registryTemp do

begin

RootKey := HKEY_USERS;//根键设置为HKEY_USERS

//如果存在子键.Default\RemoteAccess\Addresses

if OpenKey('.Default\RemoteAccess\Addresses'

false) then

GetValueNames( stringsTemp );//读出各项目的名称,即拨号连接名称

end;

combobox1.Items.assign( stringsTemp );//显示,供选择

end;


2、用RasAPI函数

RasAPI函数RasEnumEntries可获取当前系统中可用的拨号连接名称.其函数原型为

function RasEnumEntries(

reserved : PChar;//保留字段

必须为NIL

lpszPhonebook : PChar;//电话本名称

在Win9X下无作用

可为空字符串

lprasentryname : LPRASENTRYNAME;//接收拨号连接名称的缓冲区

是一个RASENTRYNAME类型数组的指针

var lpcb : DWORD;//接收拨号连接名称的缓冲区的大小(Bytes)

var lpcEntries: DWORD//实际获得的拨号连接名称的数目

) : DWORD; stdcall;

function RasEnumEntries;external RasApiDll name 'RasEnumEntriesA';


参数lprasentryname提供了一个RASENTRYNAME类型数组的指针,指向一个接收拨号连接名称的缓冲

区,其中RASENTRYNAME及LPRASENTRYNAME的类型说明如下:


LPRASENTRYNAME = ^RASENTRYNAME;

RASENTRYNAME = record

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

一般设置为SizeOf(RASENTRYNAME)

szEntryName : array [ 0..RAS_MaxEntryName ] of char;//拨号连接名称

end;

lpcb为缓冲区的大小,一般设置为dwSize的倍数,倍数为可能有的连接的个数.

lpcEntries实际的连接的个数.


下面是一个应用例子,列出了当前系统中可用的拨号连接名称.

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

const

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

var

intIndex : integer;

PhoneEntries : array[ 0..MaxPhoneEntries - 1 ] of RASEntryName;

dwSize

dwEntries

dwResult : DWORD;

begin

//在RASENTRYNAME缓冲区的第一个RASENTRYNAME结构中设置dwSize

PhoneEntries[ 0 ].dwSize := sizeof( RASEntryName );


dwSize := MaxPhoneEntries * sizeof( RASEntryName );//为缓冲区的大小

//调用RasAPI函数,获取当前系统中可用的拨号连接名称

dwResult := RasEnumEntries ( NIL

''

@PhoneEntries[ 0 ]

dwSize

dwEntries );


if dwResult <> 0 then

begin//RasAPI函数,执行错误

memo1.lines.add('RasEnumEntries错误:' + GetRasError( dwResult ));

exit;

end;


//显示当前系统中可用的拨号连接名称

memo1.lines.add('共有' + inttostr( dwEntries ) + '个RAS连接,如下所示');

for intIndex := 0 to dwEntries -1 do

memo1.lines.add( strpas( PhoneEntries[ intIndex ].szEntryName ) );

end;


3、获取默认的拨号连接的名称

默认的拨号连接,即用户在浏览器中设置的拨号连接,该连接可以认为是用户最常用

的拨号连接.

在注册表的HKEY_USERS\.Default\RemoteAccess位置,有一个字符串名Profile,它对应

字符值即为HKEY_USERS\.Default\RemoteAccess\Addresses.


二、新建拨号连接、修改拨号连接的属性

RasAPI函数RasCreatePhonebookEntry、RasEditPhonebookEntry通过调用Win9X的

新建拨号连接、修改拨号连接的设置界面,允许用户新建拨号连接、修改拨号连接,具体

的设置操作还要由系统来完成.

1、新建拨号连接

新建拨号连接的RasAPI函数为RasCreatePhonebookEntry,其函数原型为:

function RasCreatePhonebookEntry(

hwnd : THandle; //新建拨号连接窗口的父窗口的句柄,为NIL表示桌面(DeskTop)

lpszPhonebook: pchar//电话本名称

在Win9X下无作用

可为空字符串

) : DWORD;stdcall;

function RasCreatePhonebookEntry;external RasApiDll name 'RasCreatePhonebookEntryA';


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


下面是一个应用例子,允许用户新建一个拨号连接.

var

dwResult : DWORD;

begin

//在当前窗口中新建拨号连接

dwResult := RasCreatePhonebookEntry( handle

'' );

if dwResult = 0 then

memo1.lines.add('新建拨号连接成功!')

else

memo1.lines.add('新建拨号连接失败:!' + GetRasError( dwResult ))

end;


2、修改拨号连接的属性

修改拨号连接的属性的RasAPI函数为RasEditPhonebookEntry,其函数原型为:

function RasEditPhonebookEntry(

hwnd : THandle; //新建拨号连接窗口的父窗口的句柄,为NIL表示桌面(DeskTop)

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

可为空字符串

lpszEntryName: pchar//拨号连接的名称,如'163'、'169'等

) : DWORD; stdcall;

function RasEditPhonebookEntry;external RasApiDll name 'RasEditPhonebookEntryA';


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

下面是一个应用例子,允许用户修改指定拨号连接的属性.

var

dwResult : DWORD;

begin

//在当前窗口中修改拨号连接的属性

dwResult := RasEditPhonebookEntry( handle

''

'163' );

if dwResult = 0 then

memo1.lines.add('修改拨号连接成功!')

else

memo1.lines.add('修改拨号连接失败:!' + GetRasError( dwResult ))

end;


三、获取和设置拨号连接的拨号参数

用RasAPI函数RasGetEntryDialParams、RasSetEntryDialParams可以直接获取和设置指定拨号连接的拨号参数,其中包括用户名称和用户密码!

1、获取拨号连接的拨号参数

获取拨号连接的拨号参数RasAPI函数为RasGetEntryDialParams,其函数原型为:

function RasGetEntryDialParams(

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

可为空字符串

pRASDIALPARAMS:LPRASDIALPARAMS;//拨号参数,是一个RASDIALPARAMS类型的指针

var lpfPassword : WordBool//是否需要用户密码

) : DWORD; stdcall;

function RasGetEntryDialParams;external RasApiDll name 'RasGetEntryDialParamsA';


参数pRASDIALPARAMS是一个RASDIALPARAMS类型的指针,指向一个拨号连接的拨号参数数据

的缓冲区,其中RASDIALPARAMS及LPRASDIALPARAMS的类型说明如下:

LPRASDIALPARAMS = ^RASDIALPARAMS;

RASDIALPARAMS = record

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

一般设置为SizeOf(RASDIALPARAMS)

szEntryName : array[0..RAS_MaxEntryName] of char;//拨号连接名称

szPhoneNumber : array[0..RAS_MaxPhoneNumber] of char;//拨号号码

szCallbackNumber : array[0..RAS_MaxCallbackNumber] of char;//回叫号码

szUserName : array[0..UNLEN] of char;//用户名称

szPassword : array[0..PWLEN] of char;//用户密码

szDomain : array[0..DNLEN] of char;//域名

end;

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

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

var

dwResult : DWORD;

RASDIALPARAMSData : RASDIALPARAMS;

NeedPWD : WordBool;

begin

//指定拨号连接的名称

with RASDIALPARAMSData do

begin

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

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

szUserName := '';//其它五个参数初始化

szPassword := '';

szDomain := '';

szCallbackNumber := '';

szPhoneNumber := '';

end;

NeedPWD := true;//需要用户密码


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

dwResult := RasGetEntryDialParams( ''

@RASDIALPARAMSData

NeedPWD );


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;

2、设置拨号连接的拨号参数

设置拨号连接的拨号参数RasAPI函数为RasSetEntryDialParams,其函数原型为:

function RasSetEntryDialParams(

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

可为空字符串

⌨️ 快捷键说明

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