首 页 ┆ 源码下载 ┆ IT学院 ┆ 字体下载 ┆ 模板下载 ┆ 源码发布 ┆ 广告合作 ┆ 网站地图
► 设为首页
► 加入收藏
► 联系我们
源码下载 >> ASP源码 | PHP源码 | ASP.net源码 | JSP源码 | CGI源码 | VC/C++源码 | VB源码 | Delphi源码 | Flash源码
文章学院 >> 网络编程 | 网页设计 | 图形图象 | 数据库 | 服务器 | 网络媒体 | 网络安全 | 操作系统 | 办公软件 | 软件开发 | 黑客知识
字体下载 >> 精制字体 | 非英字体 | 艺术字体 | 著名字体 | 哥特式 | 简单字体 | 手写体 | 节假日 | 图案字体 | 精度像素 | 中文字体
模板下载 >> 企业门户 | 数码网络 | 休闲娱乐 | 影视音乐 | 旅游名胜 | 文化艺术 | 电子商务 | 个性展示 | 登陆导航 | Flash模板
►►您当前的位置:源码园 → IT学院 → 软件开发 → Delphi编程 → 文章内容

用Delphi编写可以断开Internet连接的程序

作者:佚名  来源:网上收集  发布时间:2005-12-10 0:20:05
 
  在WIN9X下,如果安装了拨号网络,则在WINDOWS的系统目录(System目录)下将有两个拨号网络管理程序库RasApi32.DLL 和RasApi16.DLL,因此我们可以利用RAS(远程访问服务)系列函数实现断开指定的拨号连接。在这里我们将使用RasHangUp函数。然而如何正确使用这些API函数是完成应用程序的关键。

  挂断拨号连接的RasApi32函数为RasHangUp,其函数原型为:

  RasHangUp(

    HRASCONN : DWORD

   ):DWORD;stdcall;

  参数说明:

  HRASCONN : DWORD要挂断的拨号连接的句柄,此句柄是来源由调用函数RasEnumConnections的返回值。

  返回值:函数的返回值为0表示执行成功;不为0执行失败。

  由上面的函数得知:我们必须首先获得拨号连接的句柄,因此在应用程序中还需使用RasEnumConnections函数。

  获取所有活动的拨号连接的信息列表(连接句柄和电话号码)的RasApi32函数为RasEnumConnections,其函数原型为:

  RasEnumConnections(LPRASCONN lprasconn,LPDWORD lpcb,LPDWORD lpcConnections) :DWORD;stdcall;

  参数说明:

  lprasconn:接收活动连接的缓冲区的指针;

  lpcb:接收缓冲区的字节大小;

  lpcConnections:实际的活动连接数。

  返回值函数的返回值为0表示执行成功;不为0执行失败。

  为了正确使用这两个函数,我们要事先定义函数,常数,结构类型及其他信息,有关这一部份的内容都写入rasapi.pas单元。

  源程序:

  program main;

  uses

   Forms,

   Unit1 in ‘Unit1.pas‘ {Form1},

   rasapi in ‘rasapi.pas‘;

  {$R *.RES}

  begin

   Application.Initialize;

   Application.CreateForm(TForm1, Form1);

   Application.Run;

  end.

  unit Unit1;

  interface

  uses

   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

   StdCtrls, DdeMan;

  type

   TForm1 = class(TForm)

    Button1: TButton;

    procedure Button1Click(Sender: TObject);

   private

    { Private declarations }

     public

    { Public declarations }

   end;

  var

   Form1: TForm1;

  implementation

   uses rasapi;

  {$R *.DFM}

  procedure TForm1.Button1Click(Sender: TObject);

  var

     bufsize: Cardinal;

     numEntries: Cardinal;

     x: Integer;

     entries: Array[1..10] of TRasConn;//拨号连接数组(假设最多有10个活动的拨号连接)

     stat: TRasConnStatus;

     hRas: HRasConn;

     conexion:pRasConn;

   begin

    entries[1].dwSize := SizeOf(TRasConn);

    bufsize := SizeOf(TRasConn) * 10;

    FillChar(stat, Sizeof(TRasConnStatus), 0);

    stat.dwSize := Sizeof(TRasConnStatus);

    if RasEnumConnections(@entries[1], bufsize, numEntries) = 0 then

     begin

      if numEntries > 0 then

       with entries[1] do

       begin

        conexion:=Pointer(rasconn);

        hRas := Longint(conexion);

  

        if RasHangUp(hRas) <> 0 then

  

         ShowMessage(‘断开失败‘);

       end

       else

        ShowMessage(‘断开成功‘);

       end;

   end;

  unit rasapi;

  interface

   Uses WinTypes, WinProcs, Dialogs;

   Const

   UNLEN = 256;

   PWLEN = 256;

   DNLEN = 15;

   RAS_MaxEntryName   = 256;//连接名称最大长度

   RAS_MaxDeviceName   = 128;//设备名称最大长度

   RAS_MaxDeviceType   = 16;//设备类型名称长度

   { RAS_MaxParamKey   = 32;

   RAS_MaxParamValue   = 128;}

   RAS_MaxPhoneNumber  = 128;//电话号码的最大长度

   RAS_MaxCallbackNumber = RAS_MaxPhoneNumber;

   Type

   {UINT = Word;}

   PHRASConn = ^HRASConn;

   Type

   { 确认一活动的拨号连接. (为RasConnectEnum函数使用) }

   PRASConn = ^TRASConn;//拨号连接的句柄类型

   TRASConn = record

     dwSize: DWORD;//该结构类型所占内存的字节大小

     rasConn: HRASConn;//活动连接的句柄

     szEntryName: Array[0..RAS_MaxEntryName] Of Char;//

     szDeviceType : Array[0..RAS_MaxDeviceType] Of Char;

     szDeviceName : Array [0..RAS_MaxDeviceName] of char;

   end;

   PRASConnStatus = ^TRASConnStatus;

   TRASConnStatus = Record

     dwSize: LongInt;

     rasConnstate:
Word;

     dwError: LongInt;

     szDeviceType: Array[0..RAS_MaxDeviceType] Of Char;

     szDeviceName: Array[0..RAS_MaxDeviceName] Of Char;

   End;

   PRASDIALEXTENSIONS= ^TRASDIALEXTENSIONS;

   TRASDIALEXTENSIONS= Record

     dwSize: DWORD;

     dwfOptions: DWORD;

     hwndParent: HWnd;

     reserved: DWORD;

    end;

   PRASDialParams = ^TRASDialParams;

   TRASDialParams = Record

     dwSize: DWORD;

     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;

   PRASEntryName = ^TRASEntryName;

   TRASEntryName = Record

     dwSize: LongInt;

     szEntryName: Array[0..RAS_MaxEntryName] Of Char;

   {  Reserved: Byte;}

   End;

  //拨号函数

   Function RasDial(

     lpRasDialExtensions : PRASDIALEXTENSIONS ; //在WIN9X下无用,可设置为NIL

     lpszPhone
book: PChar; //在WIN9X下无用,可设置为NIL

     lpRasDialParams : PRASDIALPARAMS; // 拨号参数,类型指针

     dwNotifierType : DWORD;   { 消息通知方式}

     lpvNotifier: DWORD;    { 消息处理事件}

     var rasConn: HRASConn     { 返回成功连接的连接句柄}

    ): DWORD; stdcall;

   function RasEnumConnections(RASConn: PrasConn;

            var BufSize: D
Word;

         var Connections: D
Word

                 ): LongInt; stdcall;

   Function RasEnumEntries (

     reserved: PChar;    {保留字段,必须为空}

     lpszPhone
book: PChar ;    { 电话本名称,在WIN9X下无用,可设置为NIL}

     lprasentryname: PRASENTRYNAME ; {接收拨号连接名称的缓冲区,是一类型数组的指针}

     var lpcb :     DWORD; {接收拨号连接名称的缓冲区的大小}

     var lpcEntries : DWORD  {实际获得拨号连接 的数目}

    ) : DWORD; stdcall;

   function RasGetConnectStatus(RASConn: hrasConn;    { 指定活动连接的句柄 }

           RASConnStatus: PRASConnStatus { 获取活动连接状态信息的缓冲区}

                 ): LongInt; stdcall;

   function RasGetErrorString(ErrorCode: D
Word;    { 错误代码标识}

                szErrorString: PChar;    { 错误提示信息的缓冲区}

                BufSize: D
Word   {错误提示信息的缓冲区的大小 }

                ): LongInt; stdcall;

   function RasHangUp(RASConn: hrasConn ): LongInt; stdcall;

   function RasGetEntryDialParams(

     lpszPhone
book:PChar;    {电话本名称,在WIN9X下无用,可设置为NIL }

     VAR lprasdialparams:TRASDIALPARAMS; {拨号参数,是一类型指针}

     VAR lpfPassword : BOOL    {显示是否需要用户密码}

    ): DWORD; stdcall;

   implementation

   const

   RAS_DLL = ‘RASAPI32‘;

   function RasDial; external RAS_DLL name ‘RasDialA‘;

   function RasEnumConnections; external RAS_DLL name ‘RasEnumConnectionsA‘;

   function RasEnumEntries; external RAS_DLL name ‘RasEnumEntriesA‘;

   function RasGetConnectStatus; external RAS_DLL name ‘RasGetConnectStatusA‘;

   function RasGetErrorString; external RAS_DLL name ‘RasGetErrorStringA‘;

   function RasHangUp; external RAS_DLL name ‘RasHangUpA‘;

   function RasGetEntryDialParams; external RAS_DLL name ‘RasGetEntryDialParamsA‘;

  end.

  以上代码在PWIN98+DELPHI5环境下调试通过。

 

[] [返回上一页] [打 印]
  • 上一篇文章:在DELPHI中利用API实现网格内组件的嵌入
  • 下一篇文章:如何在Delphi中实现ASP编程

  • 相关文章:
  • [图文]利用Delphi编制IP地址转换器
  • [图文]用Delphi实现动态获取版本信息
  • [图文]用Delphi客户端访问EJB组件
  • [组图]用Delphi轻松实现背景播放
  • 用Delphi实现IP地址的隐藏
  • 用Delphi实现软件的在线升级
  • 用Delphi制作以浏览器为界面的应用程序
  • 用Delphi编写VxD设备驱动程序
  • 用Delphi进行OpenGL编程学习心得
  • 用Delphi制作动态菜单
  • [图文]用Delphi设计“抢三十”游戏
  • 利用Delphi编写Socket通信程序
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图 - 源码发布
Copyright © 2003-2009 Ymyasp.Com. All Rights Reserved .
备案序号:粤ICP备07029071号