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

📄 在delphi程序管理拨号网络 (2000年8月21日).txt

📁 自己对DELPHI学习的一点体会
💻 TXT
📖 第 1 页 / 共 2 页
字号:
在DELPHI程序管理拨号网络 (2000年8月21日) 

本站更新  分类:   作者:深圳王发军  推荐:   阅读次数:824  
(http://www.codesky.net)  

--------------------------------------------------------------------------------
  用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下无作用,可为空字符串
pRASDIALPARAMS:LPRASDIALPARAMS;//拨号参数,是一个RASDIALPARAMS类型的指针
var lpfPassword : WordBool//是否删除用户密码
) : DWORD; stdcall;

⌨️ 快捷键说明

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