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 网络状态检查 /// /// 检查网络连接和传输数据 /// /// /// 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); } } /// /// 检查网络连接和传输数据 /// /// /// 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; } } } }