window c# 拨号 网络相关的 api

window c# 拨号 网络相关的 api


很管用的拨号类网上找到的.






namespace  ConsoleApplication1
{
 
/*
ADSL自动拨号类,前提是在系统中已经有了一个宽带拨号连接
调用代码:
RASDisplay ras = new RASDisplay();
ras.Disconnect();//断线
ras.Connect("adsl");//拨号 

 
*/

public   struct  RASCONN
{
    
public   int  dwSize;
    
public  IntPtr hrasconn;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst
= 257 )]
    
public   string  szEntryName;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst
= 17 )]
    
public   string  szDeviceType;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst
= 129 )]
    
public   string  szDeviceName;
}

[StructLayout(LayoutKind.Sequential,CharSet
= CharSet.Auto)]
public   struct  RasStats
{
    
public   int  dwSize;
    
public   int  dwBytesXmited;
    
public   int  dwBytesRcved;
    
public   int  dwFramesXmited;
    
public   int  dwFramesRcved;
    
public   int  dwCrcErr;
    
public   int  dwTimeoutErr;
    
public   int  dwAlignmentErr;
    
public   int  dwHardwareOverrunErr;
    
public   int  dwFramingErr;
    
public   int  dwBufferOverrunErr;
    
public   int  dwCompressionRatioIn;
    
public   int  dwCompressionRatioOut;
    
public   int  dwBps;
    
public   int  dwConnectionDuration;
}

[StructLayout(LayoutKind.Sequential,CharSet
= CharSet.Auto)]
public   struct  RasEntryName 

    
public   int  dwSize; 
    
// [MarshalAs(UnmanagedType.ByValTStr,SizeConst=(int)RasFieldSizeConstants.RAS_MaxEntryName + 1)]
     public   string  szEntryName; 
    
// #if WINVER5
    
//   public int dwFlags;
    
//   [MarshalAs(UnmanagedType.ByValTStr,SizeConst=260+1)]
    
//   public string szPhonebookPath;
    
// #endif
}
public   class  RAS

{


    [DllImport(
" rasapi32.dll " , EntryPoint  =   " RasEnumConnectionsA " , SetLastError = true )]

    
internal   static   extern   int  RasEnumConnections
        (
        
ref  RASCONN lprasconn,  //  buffer to receive connections data
         ref   int  lpcb,  //  size in bytes of buffer
         ref   int  lpcConnections  //  number of connections written to buffer
        );


    [DllImport(
" rasapi32.dll " ,CharSet = CharSet.Auto)]
    
internal   static   extern   uint  RasGetConnectionStatistics(
        IntPtr hRasConn,       
//  handle to the connection
        [In,Out]RasStats lpStatistics   //  buffer to receive statistics
        );
    [DllImport(
" rasapi32.dll " ,CharSet = CharSet.Auto)]
    
public   extern   static   uint  RasHangUp(
        IntPtr hrasconn  
//  handle to the RAS connection to hang up
        );

    [DllImport(
" rasapi32.dll " ,CharSet = CharSet.Auto)]
    
public   extern   static   uint  RasEnumEntries (
        
string  reserved,               //  reserved, must be NULL
         string  lpszPhonebook,          //  pointer to full path and
        
//   file name of phone-book file
        [In,Out]RasEntryName[] lprasentryname,  //  buffer to receive
        
//   phone-book entries
         ref   int  lpcb,                   //  size in bytes of buffer
         out   int  lpcEntries              //  number of entries written
        
//   to buffer
        );

    [DllImport(
" wininet.dll " ,CharSet = CharSet.Auto)]
    
public   extern   static   int  InternetDial(
        IntPtr hwnd,
        [In]
string  lpszConnectoid, 
        
uint  dwFlags,
        
ref   int  lpdwConnection,
        
uint  dwReserved
        );

    
public  RAS()
    {

    }

        
}
public   enum  DEL_CACHE_TYPE  // 要删除的类型。
{
    File,
// 表示internet临时文件
    Cookie  // 表示Cookie
};
public   class  RASDisplay
{
    [DllImport(
" wininet.dll " ,CharSet = CharSet.Auto)]
    
public   static   extern   bool   DeleteUrlCacheEntry(
        DEL_CACHE_TYPE type
        );
    
private   string  m_duration;
    
private   string  m_ConnectionName;
    
private   string [] m_ConnectionNames;
    
private   double  m_TX;
    
private   double  m_RX;
    
private   bool  m_connected;
    
private  IntPtr m_ConnectedRasHandle;

    RasStats status 
=   new  RasStats();
    
    
    
public  RASDisplay()
    {
        m_connected 
=   true ;

        RAS lpras 
=   new  RAS();
        RASCONN lprasConn 
=   new  RASCONN();

        lprasConn.dwSize 
=  Marshal.SizeOf( typeof (RASCONN));
        lprasConn.hrasconn 
=  IntPtr.Zero;

        
int  lpcb  =   0 ;
        
int  lpcConnections  =   0 ;
        
int  nRet  =   0 ;
        lpcb 
=  Marshal.SizeOf( typeof (RASCONN));


        nRet 
=  RAS.RasEnumConnections( ref  lprasConn,  ref  lpcb,  ref   lpcConnections);


        
if (nRet  !=   0 )

        {
            m_connected 
=   false ;
            
return ;

        }

        
if (lpcConnections  >   0 )
        {


            
// for (int i = 0; i < lpcConnections; i++)

            
// {
            RasStats stats  =   new  RasStats();

            m_ConnectedRasHandle 
=  lprasConn.hrasconn;
            RAS.RasGetConnectionStatistics(lprasConn.hrasconn, stats);


            m_ConnectionName 
=  lprasConn.szEntryName;

            
int  Hours  =   0 ;
            
int  Minutes  =   0 ;
            
int  Seconds  =   0 ;

            Hours 
=  ((stats.dwConnectionDuration  / 1000 / 3600 );
            Minutes 
=  ((stats.dwConnectionDuration  / 1000 / 60 -  (Hours  *   60 );
            Seconds 
=  ((stats.dwConnectionDuration  / 1000 ))  -  (Minutes  *   60 -  (Hours  *   3600 );


            m_duration 
=  Hours   +    "  hours  "    +  Minutes  +   "  minutes  "   +  Seconds  +   "  secs " ;
            m_TX 
=  stats.dwBytesXmited;
            m_RX 
=  stats.dwBytesRcved;


            
// }


        }
        
else
        {
            m_connected 
=   false ;
        }


        
int  lpNames  =   1 ;
        
int  entryNameSize  =   0 ;
        
int  lpSize  =   0 ;
        RasEntryName[] names 
=   null ;

        entryNameSize
= Marshal.SizeOf( typeof (RasEntryName));
        lpSize
= lpNames * entryNameSize;

        names
= new  RasEntryName[lpNames];
        names[
0 ].dwSize = entryNameSize;

        
uint  retval  =  RAS.RasEnumEntries( null , null ,names, ref  lpSize, out  lpNames);

        
// if we have more than one connection, we need to do it again
         if (lpNames  >   1 )
        {
            names
= new  RasEntryName[lpNames];
            
for ( int  i = 0 ;i < names.Length;i ++ )
            {
                names[i].dwSize
= entryNameSize;
            }

            retval 
=  RAS.RasEnumEntries( null , null ,names, ref  lpSize, out  lpNames);

        }
        m_ConnectionNames 
=   new   string [names.Length];


        
if (lpNames > 0 )
        {
            
for ( int  i = 0 ;i < names.Length;i ++ )
            {

                m_ConnectionNames[i] 
=  names[i].szEntryName;

            }
        }
    }

    
public   string  Duration
    {
        
get
        {
            
return  m_connected  ?  m_duration :  "" ;
        }
    }

    
public   string [] Connections
    {
        
get
        {
            
return  m_ConnectionNames;
        }
    }

    
public   double  BytesTransmitted
    {
        
get
        {
            
return  m_connected  ?  m_TX :  0 ;
        }
    }
    
public   double  BytesReceived
    {
        
get
        {
            
return  m_connected  ?  m_RX :   0 ;

        }
    }
    
public   string  ConnectionName
    {
        
get
        {
            
return  m_connected  ?  m_ConnectionName :  "" ;
        }
    }
    
public   bool  IsConnected
    {
        
get
        {
            
return  m_connected;
        }
    }

    
public   int  Connect( string  Connection)
    {
        
int  temp  =   0 ;
        
uint  INTERNET_AUTO_DIAL_UNATTENDED  =   2 ;
        
int  retVal  =  RAS.InternetDial(IntPtr.Zero,Connection,INTERNET_AUTO_DIAL_UNATTENDED, ref  temp, 0 );
        
return  retVal;
    }
    
public   void  Disconnect()
    {
        RAS.RasHangUp(m_ConnectedRasHandle);
    }
}





}


你可能感兴趣的:(window c# 拨号 网络相关的 api)