431 lines
14 KiB
C#
431 lines
14 KiB
C#
using System;
|
|
using System.Linq;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
using Urovo;
|
|
using Microsoft.WindowsCE.Forms;
|
|
|
|
namespace NetworkDemo
|
|
{
|
|
public partial class Form1 : Form
|
|
{
|
|
|
|
public enum NetImageType
|
|
{
|
|
NoConnect = 0,
|
|
Connecting = 1,
|
|
WlanConnected = 2,
|
|
GprsConnected = 3
|
|
}
|
|
|
|
public enum SignalImageType
|
|
{
|
|
None = 0,
|
|
Low = 1,
|
|
Normal = 2,
|
|
Good = 3,
|
|
Strong = 4,
|
|
}
|
|
|
|
public enum BatteryImageType
|
|
{
|
|
Danger = 0,
|
|
Low = 1,
|
|
Normal = 2,
|
|
Good = 3,
|
|
Full = 4,
|
|
AC = 5
|
|
}
|
|
|
|
NetworkManager networkMgr = new NetworkManager();
|
|
public NetworkManager NetworkMgr
|
|
{
|
|
get { return networkMgr; }
|
|
set { networkMgr = value; }
|
|
}
|
|
|
|
PowerManager powerMgr = new PowerManager();
|
|
public PowerManager PowerMgr
|
|
{
|
|
get { return powerMgr; }
|
|
set { powerMgr = value; }
|
|
}
|
|
|
|
private int signalCount = 0; //取信号计数器
|
|
private DateTime lastAlertTime = DateTime.Now;
|
|
|
|
private string JianPanInput = "42429667-ae04-11d0-a4f8-00aa00a749b9";
|
|
|
|
public Form1()
|
|
{
|
|
InitializeComponent();
|
|
networkMgr.ConnectNotify += new ConnectNotifyEventHandler(ConnectNotify);
|
|
powerMgr.PowerNotify += new PowerNotifyEventHandler(PowerNotify);
|
|
batteryStatus.BackgroundImage = Properties.Resources.battery;
|
|
netStatus.BackgroundImage = Properties.Resources.net;
|
|
signalStatus.BackgroundImage = Properties.Resources.signal;
|
|
}
|
|
|
|
private void Form1_Load(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
CreateIMEMenu();
|
|
timer1.Enabled = true;
|
|
NetworkManager.ConnectType = rbGprs.Checked ? ConnType.Gprs : ConnType.Wlan;
|
|
this.lblNetType.Text = rbGprs.Checked ? "GPRS" : "WIFI";
|
|
networkMgr.Start();
|
|
powerMgr.Start();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show("程序启动失败!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);
|
|
}
|
|
}
|
|
|
|
private void timer1_Tick(object sender, EventArgs e)
|
|
{
|
|
//26秒取一次信号
|
|
#region
|
|
|
|
if (++signalCount % 26 == 0)
|
|
{
|
|
signalCount = 0;
|
|
|
|
SignalImageType signalImageType = SignalImageType.None;
|
|
|
|
if (NetworkManager.ConnectType == ConnType.Gprs)
|
|
{
|
|
if (Device.GetGsmPowerStatus() == 1)
|
|
{
|
|
int iStrength = Device.GetGsmSignalStrength();
|
|
this.lblSignalStrength.Text = iStrength.ToString();
|
|
|
|
if (iStrength == 99 || iStrength == 0)
|
|
{
|
|
signalImageType = SignalImageType.None;
|
|
}
|
|
else if (iStrength > 21)
|
|
{
|
|
signalImageType = SignalImageType.Strong;
|
|
}
|
|
else if (iStrength > 16)
|
|
{
|
|
signalImageType = SignalImageType.Good;
|
|
}
|
|
else if (iStrength > 11)
|
|
{
|
|
signalImageType = SignalImageType.Normal;
|
|
}
|
|
else
|
|
{
|
|
signalImageType = SignalImageType.Low;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
lblSignalStrength.Text = "无";
|
|
}
|
|
}
|
|
else if (NetworkManager.ConnectType == ConnType.Wlan)
|
|
{
|
|
if (Device.GetWlanPowerStatus() == 1)
|
|
{
|
|
int iStrength = Device.GetWlanSignalStrength();
|
|
this.lblSignalStrength.Text = iStrength.ToString();
|
|
|
|
if (iStrength == 0)
|
|
{
|
|
signalImageType = SignalImageType.None;
|
|
}
|
|
else if (iStrength >= -57)
|
|
{
|
|
signalImageType = SignalImageType.Strong;
|
|
}
|
|
else if (iStrength >= -70)
|
|
{
|
|
signalImageType = SignalImageType.Good;
|
|
}
|
|
else if (iStrength >= -81)
|
|
{
|
|
signalImageType = SignalImageType.Normal;
|
|
}
|
|
else if (iStrength >= -91)
|
|
{
|
|
signalImageType = SignalImageType.Low;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
lblSignalStrength.Text = "无";
|
|
}
|
|
}
|
|
this.signalStatus.ImageIndex = (int)signalImageType;
|
|
}
|
|
#endregion
|
|
}
|
|
|
|
#region 网络状态检查
|
|
/// <summary>
|
|
/// 检查网络连接和传输数据
|
|
/// </summary>
|
|
/// <param name="wParam"></param>
|
|
/// <param name="lParam"></param>
|
|
public void ConnectNotify(object sender, ConnectNotifyEventArgs e)
|
|
{
|
|
if (this.InvokeRequired)
|
|
{
|
|
object[] param = new object[2] { sender, e };
|
|
this.BeginInvoke(new ConnectNotifyEventHandler(OnConnectNotify), param);
|
|
}
|
|
else
|
|
{
|
|
OnConnectNotify(sender, e);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 检查网络连接和传输数据
|
|
/// </summary>
|
|
/// <param name="wParam"></param>
|
|
/// <param name="lParam"></param>
|
|
private void OnConnectNotify(object sender, ConnectNotifyEventArgs e)
|
|
{
|
|
try
|
|
{
|
|
#region Signal
|
|
NetImageType netImageType = NetImageType.NoConnect;
|
|
switch (e.ConnectResult)
|
|
{
|
|
case ConnState.ConnectSuccess:
|
|
{
|
|
switch (e.ConnectType)
|
|
{
|
|
case ConnType.Gprs:
|
|
netImageType = NetImageType.GprsConnected;
|
|
lblNetStatus.Text = "已连接";
|
|
break;
|
|
case ConnType.Wlan:
|
|
netImageType = NetImageType.WlanConnected;
|
|
lblNetStatus.Text = "已连接";
|
|
break;
|
|
default:
|
|
netImageType = NetImageType.NoConnect;
|
|
lblNetStatus.Text = "未连接";
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
case ConnState.Connecting:
|
|
netImageType = NetImageType.Connecting;
|
|
lblNetStatus.Text = "正在连接...";
|
|
break;
|
|
case ConnState.Disconnectiong:
|
|
netImageType = NetImageType.Connecting;
|
|
lblNetStatus.Text = "正在断开连接...";
|
|
break;
|
|
default:
|
|
netImageType = NetImageType.NoConnect;
|
|
lblNetStatus.Text = "未连接";
|
|
break;
|
|
}
|
|
this.netStatus.ImageIndex = (int)netImageType;
|
|
#endregion
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region 电源状态
|
|
void PowerNotify(object sender, PowerNotifyEventArgs e)
|
|
{
|
|
if (this.InvokeRequired)
|
|
{
|
|
object[] param = new object[2] { sender, e };
|
|
this.BeginInvoke(new PowerNotifyEventHandler(OnPowerNotify), param);
|
|
}
|
|
else
|
|
{
|
|
OnPowerNotify(sender, e);
|
|
}
|
|
|
|
}
|
|
|
|
void OnPowerNotify(object sender, PowerNotifyEventArgs e)
|
|
{
|
|
if (e.ACLineStatus != 0x01)
|
|
{
|
|
if (e.BatteryLifePercent <= 7)
|
|
{
|
|
if (DateTime.Now - lastAlertTime > new TimeSpan(60 * 10))
|
|
{
|
|
lastAlertTime = DateTime.MaxValue;
|
|
MessageBox.Show("电量太低,请注意换电池", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1);
|
|
Application.DoEvents();
|
|
lastAlertTime = DateTime.Now;
|
|
}
|
|
}
|
|
}
|
|
|
|
BatteryImageType batteryImageType = BatteryImageType.Danger;
|
|
|
|
if (e.ACLineStatus == 0x01)
|
|
{
|
|
batteryImageType = BatteryImageType.AC;
|
|
}
|
|
else if (e.BatteryLifePercent > 80)
|
|
{
|
|
batteryImageType = BatteryImageType.Full;
|
|
}
|
|
else if (e.BatteryLifePercent > 60)
|
|
{
|
|
batteryImageType = BatteryImageType.Good;
|
|
}
|
|
else if (e.BatteryLifePercent > 40)
|
|
{
|
|
batteryImageType = BatteryImageType.Normal;
|
|
}
|
|
else if (e.BatteryLifePercent > 20)
|
|
{
|
|
batteryImageType = BatteryImageType.Low;
|
|
}
|
|
|
|
this.batteryStatus.ImageIndex = (int)batteryImageType;
|
|
|
|
}
|
|
#endregion
|
|
|
|
private void Form1_Closed(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
networkMgr.Stop();
|
|
powerMgr.Stop();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
}
|
|
}
|
|
|
|
private void btnNetChange_Click(object sender, EventArgs e)
|
|
{
|
|
if (rbGprs.Checked)
|
|
{
|
|
networkMgr.Connect(ConnType.Gprs);
|
|
this.lblNetType.Text = "GPRS";
|
|
}
|
|
else
|
|
{
|
|
networkMgr.Connect(ConnType.Wlan);
|
|
this.lblNetType.Text = "WIFI";
|
|
}
|
|
}
|
|
|
|
private void gbtnCloseNetwork_Click(object sender, EventArgs e)
|
|
{
|
|
networkMgr.Disconnect();
|
|
}
|
|
|
|
private void picClose_Click(object sender, EventArgs e)
|
|
{
|
|
if (MessageBox.Show("Exit?[Y/N]", "Tip", MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1) == DialogResult.Yes)
|
|
{
|
|
this.Close();
|
|
}
|
|
}
|
|
|
|
private void imageButton1_Click(object sender, EventArgs e)
|
|
{
|
|
this.contextMenu1.Show(this.imageButton1, new Point(-100, -80));
|
|
}
|
|
|
|
private void IMEMenu_Click(object sender,EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
MenuItem item = (MenuItem)sender;
|
|
|
|
if (item.Text == "隐藏输入面板")
|
|
{
|
|
this.inputPanel1.Enabled = false;
|
|
}
|
|
else
|
|
{
|
|
foreach (InputMethod im in inputPanel1.InputMethods)
|
|
{
|
|
if (im.Name == item.Text)
|
|
{
|
|
inputPanel1.CurrentInputMethod = im;
|
|
}
|
|
}
|
|
|
|
inputPanel1.Enabled = true;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show("软键盘出现错误,详细情况请参阅日志!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1);
|
|
}
|
|
}
|
|
|
|
private void CreateIMEMenu()
|
|
{
|
|
MenuItem item;
|
|
foreach (InputMethod im in this.inputPanel1.InputMethods)
|
|
{
|
|
item = new MenuItem();
|
|
item.Text = im.Name;
|
|
item.Click += new EventHandler(IMEMenu_Click);
|
|
this.contextMenu1.MenuItems.Add(item);
|
|
}
|
|
|
|
item = new MenuItem();
|
|
item.Text = "-";
|
|
contextMenu1.MenuItems.Add(item);
|
|
|
|
item = new MenuItem();
|
|
item.Text = "隐藏输入面板";
|
|
item.Click += new EventHandler(IMEMenu_Click);
|
|
contextMenu1.MenuItems.Add(item);
|
|
}
|
|
|
|
public void EnableInputMethod()
|
|
{
|
|
try
|
|
{
|
|
foreach (InputMethod im in this.inputPanel1.InputMethods)
|
|
{
|
|
string clsid = im.Clsid.ToString();
|
|
if (im.Clsid.ToString() == JianPanInput)
|
|
{
|
|
this.inputPanel1.CurrentInputMethod = im;
|
|
this.inputPanel1.Enabled = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
}
|
|
}
|
|
|
|
private void Form1_KeyDown(object sender, KeyEventArgs e)
|
|
{
|
|
switch (e.KeyCode)
|
|
{
|
|
case Keys.F2:
|
|
{
|
|
EnableInputMethod();
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
} |