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;
public
string
szEntryName;
}
public
class
RAS
{
[DllImport(
"Rasapi32.dll"
, EntryPoint =
"RasEnumConnectionsA"
,
SetLastError =
true
)]
internal
static
extern
int
RasEnumConnections
(
ref
RASCONN lprasconn,
ref
int
lpcb,
ref
int
lpcConnections
);
[DllImport(
"rasapi32.dll"
, CharSet = CharSet.Auto)]
internal
static
extern
uint
RasGetConnectionStatistics(
IntPtr hRasConn,
[In, Out]RasStats lpStatistics
);
[DllImport(
"rasapi32.dll"
, CharSet = CharSet.Auto)]
public
extern
static
uint
RasHangUp(
IntPtr hrasconn
);
[DllImport(
"rasapi32.dll"
, CharSet = CharSet.Auto)]
public
extern
static
uint
RasEnumEntries(
string
reserved,
string
lpszPhonebook,
[In, Out]RasEntryName[] lprasentryname,
ref
int
lpcb,
out
int
lpcEntries
);
[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,
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)
{
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;
发表评论