当前位置: 首页 > 图文教程 > 开发语言 > Delphi > 用Delphi编写可以断开Internet连接的程序

Delphi
Delphi 4.0 制作数据库发行盘技巧
用Delphi 开发数据库程序经验三则
在Delphi中定位文件位置
Delphi编程技巧实例
delphi构件制作方法简介
在Delphi中如何控制其它应用程序窗口
用Delphi实现远程屏幕抓取
用Delphi6制作网页特效软件
Delphi多层应用程序的实现
Delphi下汉字输入法的编程及使用
Delphi巧克力的滋味(1)
DELPHI下汉字输入法的编程及使用(1)
Delphi中高级DLL的编写和调用(1)
Delphi中实现多线程同步查询(1)
Delphi中实现多线程同步查询(2)
Delphi中对Oracle存取RTF文档(1)
Delphi5实现多层Client/Server应用程序(1)
扩展Delphi的线程同步对象(1)
Delphi制作带图标的弹出式选单
用Delphi编写安装程序(1)

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 120 ::
收藏到网摘: n/a

 
  在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;