发信人: delfan( ) 
整理人: teleme(2001-03-29 19:37:38), 站内信件
 | 
 
 
[转载]
 挂断拨号连接的RasApi32函数为RasHangUp,其函数原型为: 
 function RasHangUp(HRASCONN : DWORD  ):DWORD;stdcall; ex
 参数说明: 
   HRASCONN : DWORD要挂断的拨号连接的句柄,此句柄是来源由调用函数RasEnumConnections的返回值。 
 返回值:函数的返回值为0表示执行成功;不为0执行失败。 
   由上面的函数得知:我们必须首先获得拨号连接的句柄,因此在应用程序中还需使用RasEnumConnections函数。 
   获取所有活动的拨号连接的信息列表(连接句柄和电话号码)的RasApi32函数为RasEnumConnections,其函数原型为: 
 function 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环境下调试通过。
 
 
  ---- 可不可以把钱还给我啊!     | 
 
 
 |