基本思路是封装对于Windows API InternetGetConnectedState 的调用,然后显示在UI上。
UI的基本布局如下:
具体封装实现代码如下:
public partial class ConnectQualityView
{
#region "Declarations"
string ConnectionQualityString = "Off";
[DllImport("wininet.dll", ExactSpelling=true, CharSet=CharSet.Ansi, SetLastError=true)]
privatestaticexternbool InternetGetConnectedState(refint lpSFlags, int dwReserved);
publicenumInetConnState
{
modem = 0x1,
lan = 0x2,
proxy = 0x4,
ras = 0x10,
offline = 0x20,
configured = 0x40
}
#endregion
#region "Control Methods"
privatevoid ConnectQualityView_Load(object sender, System.EventArgs e)
{
Timer1.Enabled = true;
this.DoubleBuffered = true;
}
privatevoid Timer1_Tick(System.Object sender, System.EventArgs e)
{
lblConnectStatus.Refresh();
bool blnState;
blnState = CheckInetConnection();
}
publicbool CheckInetConnection()
{
long lngFlags;
int temp_int = (int) lngFlags;
if (InternetGetConnectedState(ref temp_int, 0))
{
// True
if (System.Convert.ToBoolean(lngFlags) && System.Convert.ToBoolean(InetConnState.lan))
{
switch (ConnectionQualityString)
{
case"Good":
lblConnectStatus.ForeColor = Color.Green;
lblConnectStatus.Text = "Connection Quality: Good";
ConnectionQualityString = "Good";
break;
case"Intermittent":
lblConnectStatus.ForeColor = Color.Green;
lblConnectStatus.Text = "Connection Quality: Good";
ConnectionQualityString = "Good";
break;
case"Off":
lblConnectStatus.ForeColor = Color.DarkOrange;
lblConnectStatus.Text = "Connection Quality: Intermittent";
ConnectionQualityString = "Intermittent";
break;
}
this.Refresh();
}
elseif (System.Convert.ToInt64(System.Convert.ToBoolean(lngFlags )) & (long)
InetConnState.modem)
{
switch (ConnectionQualityString)
{
case"Good":
lblConnectStatus.ForeColor = Color.Green;
lblConnectStatus.Text = "Connection Quality: Good";
ConnectionQualityString = "Good";
break;
case"Intermittent":
lblConnectStatus.ForeColor = Color.Green;
lblConnectStatus.Text = "Connection Quality: Good";
ConnectionQualityString = "Good";
break;
case"Off":
lblConnectStatus.ForeColor = Color.DarkOrange;
lblConnectStatus.Text = "Connection Quality: Intermittent";
ConnectionQualityString = "Intermittent";
break;
}
}
elseif (System.Convert.ToInt64(System.Convert.ToBoolean(lngFlags )) & (long)
InetConnState.configured)
{
switch (ConnectionQualityString)
{
case"Good":
lblConnectStatus.ForeColor = Color.Green;
lblConnectStatus.Text = "Connection Quality: Good";
ConnectionQualityString = "Good";
break;
case"Intermittent":
lblConnectStatus.ForeColor = Color.Green;
lblConnectStatus.Text = "Connection Quality: Good";
ConnectionQualityString = "Good";
break;
case"Off":
lblConnectStatus.ForeColor = Color.DarkOrange;
lblConnectStatus.Text = "Connection Quality: Intermittent";
ConnectionQualityString = "Intermittent";
break;
}
}
elseif (System.Convert.ToInt64(System.Convert.ToBoolean(lngFlags )) & (long) InetConnState.proxy)
{
switch (ConnectionQualityString)
{
case"Good":
lblConnectStatus.ForeColor = Color.Green;
lblConnectStatus.Text = "Connection Quality: Good";
ConnectionQualityString = "Good";
break;
case"Intermittent":
lblConnectStatus.ForeColor = Color.Green;
lblConnectStatus.Text = "Connection Quality: Good";
ConnectionQualityString = "Good";
break;
case"Off":
lblConnectStatus.ForeColor = Color.DarkOrange;
lblConnectStatus.Text = "Connection Quality: Intermittent";
ConnectionQualityString = "Intermittent";
break;
}
}
elseif (System.Convert.ToInt64(System.Convert.ToBoolean(lngFlags)) & (long) InetConnState.ras)
{
switch (ConnectionQualityString)
{
case"Good":
lblConnectStatus.ForeColor = Color.Green;
lblConnectStatus.Text = "Connection Quality: Good";
ConnectionQualityString = "Good";
break;
case"Intermittent":
lblConnectStatus.ForeColor = Color.Green;
lblConnectStatus.Text = "Connection Quality: Good";
ConnectionQualityString = "Good";
break;
case"Off":
lblConnectStatus.ForeColor = Color.DarkOrange;
lblConnectStatus.Text = "Connection Quality: Intermittent";
ConnectionQualityString = "Intermittent";
break;
}
}
elseif (System.Convert.ToInt64(System.Convert.ToBoolean(lngFlags )) & (long) InetConnState.offline)
{
switch (ConnectionQualityString)
{
case"Good":
lblConnectStatus.ForeColor = Color.Green;
lblConnectStatus.Text = "Connection Quality: Good";
ConnectionQualityString = "Good";
break;
case"Intermittent":
lblConnectStatus.ForeColor = Color.Green;
lblConnectStatus.Text = "Connection Quality: Good";
ConnectionQualityString = "Good";
break;
case"Off":
lblConnectStatus.ForeColor = Color.DarkOrange;
lblConnectStatus.Text = "Connection Quality: Intermittent";
ConnectionQualityString = "Intermittent";
break;
}
}
}
else
{
// False
switch (ConnectionQualityString)
{
case"Good":
lblConnectStatus.ForeColor = Color.DarkOrange;
lblConnectStatus.Text = "Connection Quality: Intermittent";
ConnectionQualityString = "Intermittent";
break;
case"Intermittent":
lblConnectStatus.ForeColor = Color.Red;
lblConnectStatus.Text = "Connection Quality: Off";
ConnectionQualityString = "Off";
break;
case"Off":
lblConnectStatus.ForeColor = Color.Red;
lblConnectStatus.Text = "Connection Quality: Off";
ConnectionQualityString = "Off";
break;
}
}
}
#endregion
}