コード例 #1
0
 public WorkInfoData(WorkInfoKey key)
 {
     this.key = key;
 }
コード例 #2
0
        /// <summary>
        /// 1000 [ms]毎に情報取得
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void tick(object sender, EventArgs e)
        {
            Console.WriteLine("ticked.");

            // アクティブウィンドウ(フォアグラウンド)のハンドル取得
            IntPtr hWnd = GetForegroundWindow();

            // プロセスID取得
            int id;

            GetWindowThreadProcessId(hWnd, out id);

            // プロセス情報取得
            Process p = Process.GetProcessById(id);

            if (p == null)
            {
                return;
            }

            StringBuilder sb = new StringBuilder(65535);    //256とかでええんか?に特に意味はない

            GetWindowText(GetForegroundWindow(), sb, 65535);

            WorkInfoKey key = new WorkInfoKey(p.ProcessName, sb.ToString());


            // まずはすでに存在するデータかどうか検索
            WorkInfoData foundData = null;

            foreach (var data in this.blist)
            {
                if (key.Equals(data.key))
                {
                    foundData = data;
                    break;
                }
            }

            if (foundData != null)
            {
                // すでにあるのでデータ更新のみ
                foundData.incTestCounter();
            }
            else
            {
                // 新規データ
                var value = new WorkInfoData(key);
                this.blist.Add(value);

                value.incTestCounter();
            }


            // 以下でもいいが、ポーリングしたくないのでDataにINotifyPropertyChangedを実装する方式にする
            // this.dataGridView1.Refresh();


// ここで、改めてソートした方がいいかも?
// TODO:以下のやり方でいいのかよくわからない。。。

#if false
            // ソート状態を調べる
            DataGridViewColumn sortOrderColumn = null;
            SortOrder          sortOrder       = SortOrder.None;

            foreach (DataGridViewColumn column in this.dataGridView1.Columns)
            {
                if (column.HeaderCell.SortGlyphDirection != SortOrder.None)
                {
                    sortOrderColumn = column;
                    sortOrder       = column.HeaderCell.SortGlyphDirection;

                    break;      // とりあえず、単一ソートのみと仮定
                }
            }

            if (sortOrderColumn != null)
            {
                // ソートされている列があるので、並び替えを行う
                this.dataGridView1.Sort(sortOrderColumn, (sortOrder == SortOrder.Ascending) ? ListSortDirection.Ascending : ListSortDirection.Descending);
            }
#endif
        }