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);
            }
        }
Exemple #2
0
        /// <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);
            }
        }
Exemple #3
0
        /// <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]);
        }