精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● Delphi>>Delphi 网络编程>>Re:关于在线的问题?

主题:Re:关于在线的问题?
发信人: 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环境下调试通过。



----
可不可以把钱还给我啊!    

[关闭][返回]