using
System;
![]()
using System.Runtime.InteropServices;
![]()
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);
![]()
}
![]()
}