private void GetFlowList(ViewType vt) { // 数据处理 BindData.Clear(); DataTable dt = new DataTable(); if (vt == ViewType.TheDay) { dt = Histroy.GetDataTale(DateTime.Now); } else if (vt == ViewType.Yesterday) { dt = Histroy.GetDataTale(DateTime.Now.AddDays(-1)); } else if (vt == ViewType.TheMonth) { dt = Histroy.GetDataTale(DateTime.Now.ToString("MM")); } foreach (DataRow data in dt.Rows) { Flow f = new Flow(); int id = Convert.ToInt32(data[0]); string name = (string)data[1]; string path = (string)data[2]; UInt32 up = Convert.ToUInt32(data[3]); UInt32 down = Convert.ToUInt32(data[4]); UInt32 total = up + down; System.Drawing.Icon icon = null; try { icon = System.Drawing.Icon.ExtractAssociatedIcon(path); } catch (Exception e) { icon = new System.Drawing.Icon("program_icon.ico"); } f.id = id; f.name = name; f.path = path; f.up = up; f.down = down; f.icon = icon; //f.iconPath = icon; BindData.Add(f); } }
/// <summary> /// 将Flow数据写入至数据库 /// </summary> /// <param name="f">Flow对象</param> public static void WriteDataByFlow(Flow f) { // 1 : 判断该程序是否存在数据库中 Y:下一步 N:新建 // 2 :查看今天是否存在该PID。 Y:更新 N:新建 //Flow f = (Flow)de.Value; string sql; string now = DateTime.Now.ToString("yyyy-MM-dd"); long up, down; sql = string.Format("select pid from program where name='{0}' AND path='{1}';", f.name, f.path); object id = db.ExecuteScalar(sql, null); if (id == null) { sql = string.Format("insert into program (name,path,describe) values ('{0}','{1}','{2}');", f.name, f.path, f.describe); db.ExecuteNonQuery(sql, null); id = db.ExecuteScalar("select MAX(pid) from program;", null); } sql = string.Format("select COUNT(*) from flow where pid={0} AND note_date='{1}';", id, now); // 如果不存在今天的程序流量 if (Convert.ToInt32(db.ExecuteScalar(sql, null)) == 0) { // 则插入 sql = string.Format("insert into flow (pid,flow_up,flow_down,note_date) values ({0},{1},{2},'{3}');", id, f.up, f.down, now); db.ExecuteNonQuery(sql, null); } else { sql = string.Format("select * from flow where pid={0} AND note_date='{1}';", id, now); DataRow dr = db.ExecuteDataTable(sql, null).Rows[0]; up = (long)dr["flow_up"]; down = (long)dr["flow_down"]; up += f.up - f.note_up; down += f.down - f.note_down; f.note_up = f.up; f.note_down = f.down; sql = string.Format("update flow set flow_up={0}, flow_down={1} where pid={2} AND note_date='{3}';", up, down, id, now); db.ExecuteNonQuery(sql, null); } }
/// <summary> /// 通过PID获取Flow类。 /// 包括进程的名称、描述、路径和图标等信息。 /// </summary> /// <param name="pid"></param> /// <returns></returns> private Flow getFlowFromPID(int pid) { // 不存在映射,则新建进程流量类 if (processFlow[pid] == null) { Flow f = new Flow(psid++); Process p = Process.GetProcessById(pid); f.name = p.ProcessName; f.pid.Add(pid); try { // 获取进程路径和图标 string path = p.MainModule.FileName; f.path = path; // .FileVersionInfo.FileDescription f.describe = p.MainModule.FileVersionInfo.FileDescription; f.icon = System.Drawing.Icon.ExtractAssociatedIcon(path); } catch (Exception e) { f.path = "null"; // 默认图标 f.icon = new Icon("program_icon.ico"); //BitmapImage bt = new BitmapImage(); } int i = -1; // 重复处理 foreach (DictionaryEntry de in processFlow) { //if (de.Value == null) MessageBox.Show("asd"); if (((Flow)de.Value).Equals(f)) { i = (int)de.Key; psid--; break; } } // 不存在重复进程的情况下 if (i == -1) { System.Windows.Application.Current.Dispatcher.Invoke(new Action(delegate { // 特殊程序不显示 if (SpecialPID.IndexOf(pid) == -1) { ViewData.Add(f); } })); processFlow[pid] = f; } else { processFlow[pid] = processFlow[i]; ((Flow)processFlow[pid]).pid.Add(pid); } } return((Flow)processFlow[pid]); }