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;
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| } |