关于超想
本站导航
邮件列表
  首页 | 本站产品 | Delphi资料 | 免费资源 | 程序人生 | 软件工程 | 网站设计 | 推荐网站
你所在的位置 -> 主页 -> 超想软件 -> 编程资料 -> delphi -> 开发技巧 -> 网络通讯 ->详细
相关内容  
 
 
在Delphi程序中应用IE浏览器控件
 
【新品推荐】

  详细内容
 

用Delphi编写可以断开Internet连接的程序
作者: 陈学军 评价: 上站日期: 2002-04-08
内容说明:
来源: 赛迪网


 在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
     lpszPhonebook: PChar; //在WIN9X下无用,可设置为NIL
     lpRasDialParams : PRASDIALPARAMS; // 拨号参数,类型指针
     dwNotifierType : DWORD;    { 消息通知方式}
     lpvNotifier: DWORD;    { 消息处理事件}
     var rasConn: HRASConn     { 返回成功连接的连接句柄}
    ): DWORD; stdcall;
   function RasEnumConnections(RASConn: PrasConn;
            var BufSize: DWord;
          var Connections: DWord
                 ): LongInt; stdcall;
   Function RasEnumEntries (
     reserved: PChar;    {保留字段,必须为空}
     lpszPhonebook: PChar ;    { 电话本名称,在WIN9X下无用,可设置为NIL}
     lprasentryname: PRASENTRYNAME ; {接收拨号连接名称的缓冲区,是一类型数组的指针}
     var lpcb :     DWORD; {接收拨号连接名称的缓冲区的大小}
     var lpcEntries : DWORD  {实际获得拨号连接 的数目}
    ) : DWORD; stdcall;
   function RasGetConnectStatus(RASConn: hrasConn;    { 指定活动连接的句柄 }
           RASConnStatus: PRASConnStatus { 获取活动连接状态信息的缓冲区}
                 ): LongInt; stdcall;
   function RasGetErrorString(ErrorCode: DWord;    { 错误代码标识}
                szErrorString: PChar;    { 错误提示信息的缓冲区}
                BufSize: DWord    {错误提示信息的缓冲区的大小 }
                ): LongInt; stdcall;
   function RasHangUp(RASConn: hrasConn ): LongInt; stdcall;
   function RasGetEntryDialParams(
     lpszPhonebook: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 -> 开发技巧 -> 网络通讯 ->详细
  首页 | 本站产品 | Delphi资料 | 免费资源 | 程序人生 | 软件工程 | 网站设计 | 推荐网站
声明:本站内容除注明原创以外均从网上摘抄,如有侵权请指明。
  如果您对我们的网站有什么意见或者建议,请与我们联系
powered by 建站易上手- V2.0