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