delphi实现modem自动拨号

简介: 如果能在我们的应用程序中启动拨号  连接(如IE浏览器程序中的自动拨号功能),无疑将会方便我们的软件用户(不用再切换应用程序,  运行拨号网络),提高我们的软件的友好性从而提高软件的竞争力.    在WIN9X下,如果安装了拨号网络,则在WINDOWS系统的系统目录System下将有两个拨号网络管理  程序库RasApi32.DLL和RasApi16.DLL,我们可利用其中的函数来创建、修改拨

如果能在我们的应用程序中启动拨号  
连接(如IE浏览器程序中的自动拨号功能),无疑将会方便我们的软件用户(不用再切换应用程序,  
运行拨号网络),提高我们的软件的友好性从而提高软件的竞争力.  
  在WIN9X下,如果安装了拨号网络,则在WINDOWS系统的系统目录System下将有两个拨号网络管理  
程序库RasApi32.DLL和RasApi16.DLL,我们可利用其中的函数来创建、修改拨号连接,并利用指定的  
拨号连接进行拨号上网。  
 
一、新建拨号连接  
  当WIN9X系统中已经建立了拨号连接,则可利用现成的拨号连接。如果没有拨号连接,则需要新建  
一个拨号连接。RasAPI中提供了相应的函数,其函数名为RasCreatePhonebookEntryA,函数原型为:  
function  RasCreatePhonebookEntryA(  hwnd  :  THandle;lpszPhonebook:  pchar  )  :  DWORD;  
stdcall;  {  位于interface部分  }  
function  RasCreatePhonebookEntryA  ;  external  'Rasapi32.dll';{  位于implementation部分  }  
  参数:  
    hwnd(THandle):新建拨号连接窗口的父窗口的句柄,可以为TForm的Handle,为NIL表示  
Windows桌面(DeskTop)  
    lpszPhonebook(pchar):电话本名称,在Win9X下无作用,可设为空字符串  
  函数返回值:  
    0表示执行成功;否则为错误.  
 
    下面是一个新建拨号连接的例子.  
{  新建拨号连接  }  
procedure  TForm1.Button1Click(Sender:  TObject);  
var  
dwResult  :  DWORD;  
begin  
//在当前窗口中新建拨号连接  
dwResult  :=  RasCreatePhonebookEntryA(  handle,  ''  );  
if  dwResult  =  0  then  
memo1.lines.add('新建拨号连接成功!')  
else  
memo1.lines.add('新建拨号连接失败!')  
end;  
 
二、修改指定拨号连接的属性  
  如果用户需要修改拨号连接的属性如电话号码、国家及区号、连接方式、服务器类型  
等,可以用RasAPI函数来实现,其函数名为RasEditPhonebookEntryA,函数原型为:  
function  RasEditPhonebookEntryA(  hwnd  :  THandle;  lpszPhonebook:  pchar;    
lpszEntryName:  pchar  )  :  DWORD;stdcall;  {  位于interface部分  }  
function  RasEditPhonebookEntryA;  external  'Rasapi32.dll';{  位于implementation部分  }  
  参数:  
    hwnd(THandle):新建拨号连接窗口的父窗口的句柄,可以为TForm的Handle,为NIL表示  
Windows桌面(DeskTop)  
    lpszPhonebook(pchar):电话本名称,在Win9X下无作用,可设为空字符串  
lpszEntryName:(  pchar):要修改的拨号连接的名称,如'163'、'169'等  
  函数返回值:  
    0表示执行成功;否则为错误.  
 
    下面是一个修改指定拨号连接属性的例子.  
{  修改指定拨号连接属性  }  
procedure  TForm1.Button2Click(Sender:  TObject);  
var  
dwResult  :  DWORD;  
strDialName  :  string;  
begin  
strDialName  :=  '163';//拨号连接的名称设为163  
//在当前窗口中指定修改拨号连接的属性  
dwResult  :=  RasEditPhonebookEntryA(  handle,  '',  PChar(  strDialName  )  );  
if  dwResult  =  0  then  
memo1.lines.add('修改拨号连接'  +  strDialName  +  '成功!')  
else  
memo1.lines.add('修改拨号连接'  +  strDialName  +  '失败!')  
end;  
 
三、获取当前系统中可用的拨号连接名称  
  为了让用户选择使用拨号连接进行拨号,我们需要获取系统中已建立的拨号连接的名称。在建立了  
拨号连接后,WIN9X将拨号连接的名称和属性写在了注册表中,我们可以从注册表中获取当前系统中可  
用的拨号连接名称及在Internet  Explorer中设置的默认连接名称。  
  在注册表的HKEY_USERS/.Default/RemoteAccess/Addresses下,列出了已经在拨号网络中建立了的  
拨号连接的名称及其属性设置,其中各项目的名称即为可用的拨号连接的名称;各项目的值即为各拨号  
连接的属性设置.我们只要读出各项目的名称即可获取当前系统中可用的拨号连接名称.  
  如果在Internet  Explorer中设置了默认连接名称(查看=》Internet选项=》连接=》连接=》  
设置=》使用以下拨号网络连接),则在注册表的HKEY_USERS/.Default/RemoteAccess下,有一个字符  
串类型的键值,键值名InternetProfile,其值即为Internet  Explorer中设置的默认连接名称。  
 
    下面是一个获取当前系统中可用的拨号连接名称的例子.  
{  注意在Uses中增加Registry单元,用于操作注册表  }  
{  获取当前系统中可用的拨号连接名称  }  
procedure  TForm1.Button3Click(Sender:  TObject);  
var  
registryTemp  :  TRegistry;  
stringsTemp  :  TStringlist;  
intIndex  :  integer;  
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  );//读出各项目的名称,即拨号连接名称  
CloseKey;  
end;  
//当前系统中可用的拨号连接  
memo1.lines.add(  '******************当前系统中有'+  IntToStr(  stringsTemp.count  )  
+'个可用的拨号连接如下****************');  
for  intIndex  :=  0  to  stringsTemp.count  -  1  do  
memo1.lines.add(  stringsTemp.strings[  intIndex  ]  );  
 
//列出Internet  Explorer中设置的默认连接名称  
if  registryTemp.OpenKey('.Default/RemoteAccess',false)  then  
memo1.lines.add(  'Internet  Explorer中设置的默认连接名称为'  +    
registryTemp.ReadString('InternetProfile')  );  
 
//释放内存  
registryTemp.free;  
stringsTemp.free;  
end;  
 
四、用指定的拨号连接拨号  
  以上的三个工作的目的就是为了拨号上网,现在就来看看如果用指定的拨号连接拨号上网。  
最好的方法就是调用WIN9X的拨号网络服务了,就是运行WIN9X下的现成程序。  
  在Delphi程序中可以用如下代码实现拨号上网:  
  winexec('rundll32.exe  rnaui.dll,RnaDial  163',SW_SHOWNORMAL);  
  其中字符串中的最后一个参数“163”为拨号连接的名称。  
 
  下面是一个用指定的拨号连接拨号上网的例子.  
{  用指定的拨号连接拨号上网  }  
procedure  TForm1.Button4Click(Sender:  TObject);  
var  
strDialName  :  string;  
begin  
strDialName  :=  '163';//拨号连接的名称设为163  
memo1.lines.add(  '******************用拨号连接'+  strDialName  
+'实现拨号上网****************');  
winexec(  PChar('rundll32.exe  rnaui.dll,RnaDial  '  +  strDialName),SW_SHOWNORMAL);

 

========================================================================

拨号完了,获取新的ip地址了。你想干什么?哈哈。。。自由发挥吧

相关文章
|
监控 网络协议 物联网
优秀的 Modbus 主站(主机、客户端)仿真器、串口调试工具
优秀的 Modbus 主站(主机、客户端)仿真器、串口调试工具。modbus master,modbus,串口,工控,物联网,PLC,嵌入式
244 1
优秀的 Modbus 主站(主机、客户端)仿真器、串口调试工具
|
C语言
树莓派已经通过网络连接通过串口通信在串口调试小助手打印与操作
树莓派已经通过网络连接通过串口通信在串口调试小助手打印与操作
265 0
树莓派已经通过网络连接通过串口通信在串口调试小助手打印与操作
|
网络协议 Windows
EVC远程设备连接
说明:测试机如下配置 PC WinXP系统 IP地址:192.168.0.167 CE WinCE.net 4.2 IP地址:192.168.0.170 已进行IP连接,用Ping命令,彼此正常
548 0
Win7笔记本电脑启用虚拟WIFI共享上网
今天看了一个帖子,win7系统通过笔记本的无线网卡,启用虚拟Wifi功能共享上网,自己尝试了一下,感觉很好用,至少没有无线路由的自己,手机可以上wifi了,更新软件玩微信等等,都方便多了,好了,废话不多说,先介绍下吧。
1473 0
|
Shell 网络架构 Windows
|
数据安全/隐私保护 Windows
|
数据安全/隐私保护 网络架构