关闭

delphi实现modem自动拨号

标签: delphiinternetfunctioninterface网络windows
2628人阅读 评论(0) 收藏 举报
分类:

如果能在我们的应用程序中启动拨号  
连接(如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地址了。你想干什么?哈哈。。。自由发挥吧

0
0
查看评论

Delphi的拨号连接类

Delphi的拨号连接类  前一阵因为工作需要写了一个类来进行windows拨号,整理了一下,多封装了几个windows ras api,放上来大家提提意见。现在支持读取windows拨号连接列表、拨号、挂断、创建/删除连接,可以适用98/2000/XP,windows me 和...
  • eulb
  • eulb
  • 2006-12-08 22:30
  • 597

Delphi拨号控件 TDialUp

  • 2013-11-08 22:17
  • 272KB
  • 下载

delphi实现modem自动拨号

如果能在我们的应用程序中启动拨号  连接(如IE浏览器程序中的自动拨号功能),无疑将会方便我们的软件用户(不用再切换应用程序,  运行拨号网络),提高我们的软件的友好性从而提高软件的竞争力.    在WIN9X下,如果安装了拨号网络,则在WINDOWS系统的系统目录Sy...
  • xzknet
  • xzknet
  • 2006-05-25 11:56
  • 2628

关于WIN7下,DELPHI利用RAS去创建拨号网络的问题解决

项目背景:        因项目需要,需要通过程序利用3G卡,去拨号上网,在利用RAS在WINXP 下可以正常拨号,但是在WIN7下却没有效果,经过分析,是因为创建的拨号器WINXP 下与WIN7上是有区别的,将处理代码贴上:functi...
  • snowyqian
  • snowyqian
  • 2012-02-09 09:28
  • 2525

delphi 拨号上网代码

转贴用MODEM拨号上网,仍是大多数个人网民选择上网的方式.如果能在我们的应用程序中管理拨号网络(如Foxmail、Sygate中的拨号功能),无疑将会方便我们的软件用户(不用再切换应用程序,运行拨号网络),提高我们的软件的友好性从而提高软件的竞争力.  在WIN9X下,如果安装了拨号网络,则在WI...
  • CometNet
  • CometNet
  • 2009-04-03 01:27
  • 3111

TDialUp -Delphi经典自动拨号程序

  • 2008-09-16 19:33
  • 20KB
  • 下载

Delphi实现的宽带拨号方法,换IP

  • 2010-09-11 15:42
  • 584B
  • 下载

delphi自动拨号组件DialUP

  • 2013-04-24 14:53
  • 19KB
  • 下载

在Delphi中使用RAS实现对系统拨号的控制

 在Delphi中使用RAS实现对系统拨号的控制  在企业应用中有时候希望能在程序中实现对拨号网络的控制,以实现自动拨号、自动断开网络。在尝试了多种方式之后,认为RAS是一种比较稳定的方式。在google了网上一些资料后,现整理如下:一、首先需要有个针对RAS的头文件定...
  • lfw802250
  • lfw802250
  • 2009-11-12 22:15
  • 3337

linux下的modem拨号上网

 linux下的modem拨号上网   在宽带接入还没有走进千家万户之时,我们要连上互联网,还是要驱“猫”,所以对于许多网民而言,Modem是一个十分可爱的东西。Windows对Modem提供了很好的支持,使得安装Modem十分简单。但是在Linux下安装这个可爱的东西...
  • jenshy
  • jenshy
  • 2006-09-13 19:58
  • 2518
    个人资料
    • 访问:1606825次
    • 积分:16830
    • 等级:
    • 排名:第712名
    • 原创:195篇
    • 转载:192篇
    • 译文:2篇
    • 评论:376条
    文章存档
    最新评论