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地址了。你想干什么?哈哈。。。自由发挥吧

相关文章
|
7月前
|
监控 网络协议 物联网
优秀的 Modbus 主站(主机、客户端)仿真器、串口调试工具
优秀的 Modbus 主站(主机、客户端)仿真器、串口调试工具。modbus master,modbus,串口,工控,物联网,PLC,嵌入式
184 1
优秀的 Modbus 主站(主机、客户端)仿真器、串口调试工具
|
8月前
|
监控 网络协议 测试技术
优秀的 Modbus 从站(从机、服务端)仿真器、串口调试工具
- 监视串行线路或以太网上的通信数据 - 支持多达 28 种数据格式,包括:Signed、Unsigned、Hex、Binary、Long、Float、Double等 - 支持 Modbus 协议地址和 PLC 地址相互切换 - 对任意数量寄存器中的数据绘制实时图表,监控数据的变化趋势 - 支持同时创建多个连接网络和大量从站设备 - 通过多个标签页进行管理,快速在从站设备之间进行切换 - 通过表格的形式管理寄存器,支持添加变量名和注释,支持切换背景与前景颜色 - 导出/导出从站设备寄存器数据到Excel - 内置字节转换工具,方便将Long、Float、Double类型数据转换为寄存器中的数据
227 0
优秀的 Modbus 从站(从机、服务端)仿真器、串口调试工具
|
自然语言处理 Go Windows
asterisk的拨号配置
配置文件 “extensions.conf” 包含了Asterisk的拨号方案(dial plan)。它的所有操作的控制和执行流程的主要方案。它控制呼入和呼出是如何被处理和路由。这里是你配置连接行为的地方。
Win7笔记本电脑启用虚拟WIFI共享上网
今天看了一个帖子,win7系统通过笔记本的无线网卡,启用虚拟Wifi功能共享上网,自己尝试了一下,感觉很好用,至少没有无线路由的自己,手机可以上wifi了,更新软件玩微信等等,都方便多了,好了,废话不多说,先介绍下吧。
1436 0
|
数据安全/隐私保护 Windows
|
Windows 数据安全/隐私保护 编解码