CPU & MEMORY 사용량

private void btn_process_Click(object sender, EventArgs e)
{
    //timer 추가 하여 1초마다 update
    timer1.Interval = 1000;
    timer1.Start();
    GetProcess();
}

public void GetProcess()
{
    //Process 정보
    ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_PerfFormattedData_PerfProc_Process");

    //DataTable 생성
    DataTable table = new DataTable();
    table.Columns.Add("Name", typeof(object));
    table.Columns.Add("CPU(%)", typeof(double));
    table.Columns.Add("Memory(M)", typeof(double));
    table.Columns.Add("ProcessID", typeof(object));
    table.Columns.Add("Handles", typeof(object));
    table.Columns.Add("Threads", typeof(object));

    //CPU 개수
    int cpusn = Environment.ProcessorCount;
    
    try
    {
        foreach (ManagementObject queryObj in searcher.Get())
        {
            //CPU - dataGridView에서 정렬 가능하도록
            var name = queryObj.GetPropertyValue("Name");
            string cputemp = queryObj.GetPropertyValue("PercentProcessorTime").ToString();
            double cpu = double.Parse(cputemp) / cpusn;
            cputemp = string.Format("{0:N2}", cpu);
            cpu = double.Parse(cputemp);
            //memory - dataGridView에서 정렬 가능하도록
            string memorytemp = queryObj.GetPropertyValue("WorkingSetPrivate").ToString();
            double memory = double.Parse(memorytemp) / 1024 / 1024;
            memorytemp = string.Format("{0:N2}", memory);
            memory = double.Parse(memorytemp);
            
            var process = queryObj.GetPropertyValue("IDProcess");
            var handle = queryObj.GetPropertyValue("HandleCount");
            var thread = queryObj.GetPropertyValue("ThreadCount");

            table.Rows.Add(name, cpu, memory, process, handle, thread);
        }
    }
    catch (Exception ex)
    {
        //MessageBox.Show(ex.ToString());
    }

    //cpu 기준으로 정렬
    table.DefaultView.Sort = "CPU(%) DESC";
    //dataGridView에 입력
    dataGridView1.DataSource = table;

    try
    {
        //txt 저장
        StreamWriter SW;
        SW = File.CreateText(@"d:\temp\test.txt");
        foreach (ManagementObject queryObj in searcher.Get())
        {
            SW.Write("Name: {0} ", queryObj["Name"]);
            SW.Write("ProcessID: {0} ", queryObj["IDProcess"]);
            SW.Write("Handles: {0} ", queryObj["HandleCount"]);
            SW.Write("Threads: {0} ", queryObj["ThreadCount"]);
            SW.Write("Memory: {0} ", queryObj["WorkingSetPrivate"]);
            SW.WriteLine("CPU%: {0}", queryObj["PercentProcessorTime"]);
        }
        SW.Close();
    }
    catch (Exception ex)
    {
        //MessageBox.Show(ex.ToString());
    }
    
}

//timer 이용하여 강제 버튼 크릭 (1초마다 update)
private void timer1_Tick(object sender, EventArgs e)
{
  	btn_process.PerformClick();
}

참고 : https://duongame.tistory.com/356

Posted by agape93
,

TIMER 이용한 ALARM

 

public Form1()
{
    InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
    //타이머 시작
    timer1.Enabled = true;
    timer1.Interval = 1000; //1초마다 갱신

    //ComboBox item 추가
    datelist.Items.Add("회의");
    datelist.Items.Add("약속");
    datelist.Items.Add("식사");
    datelist.Items.Add("휴식");
    datelist.Items.Add("퇴근");
    //기본 설정 지정
    datelist.SelectedIndex = 1;
    
}

//추가 버튼
private void btn_add_Click(object sender, EventArgs e)
{
    string date = "";
    if (datelist.SelectedIndex >= 0)
    {
        date = datelist.Items[datelist.SelectedIndex].ToString();
    }
    //입력
    if (maskedTextBox1.Text.Length == 5)
    {
        string list = maskedTextBox1.Text.Substring(0, 5).Trim();
        list = list + ", " + date;
        listBox1.Items.Add(list);
        maskedTextBox1.Clear();
        datelist.SelectedIndex = 1;
        //커서 위치 변경
        maskedTextBox1.Focus();
        maskedTextBox1.SelectionStart = 0;
    }
    //입력을 잘못 했을 경우
    else
    {
        MessageBox.Show("다시 입력해주세요");
        maskedTextBox1.Clear();
        datelist.SelectedIndex = 1;
        //커서 위치 변경
        maskedTextBox1.Focus();
        maskedTextBox1.SelectionStart = 0;
    }
}

//제거 버튼
private void btn_remove_Click(object sender, EventArgs e)
{
    listBox1.Items.Remove(listBox1.SelectedItem);
}


//timer
private void timer1_Tick(object sender, EventArgs e)
{
    ArrayList delinex = new ArrayList();

    //현재 시간 출력
    DateTime date = DateTime.Now;
    label1.Text = $"{date.Hour}시 {date.Minute}분 {date.Second}초";

    //입력한 시간과 현재 시간 비교
    int i = 0;
    foreach (var input_item in listBox1.Items)
    {
        string result = string.Format("{0}", input_item);
        string[] cols = result.Split(',');
        string time = cols[0].Trim();
        string job = cols[1].Trim();
        string hourstr = time.Substring(0, 2).Trim();
        string minstr = time.Substring(3, 2).Trim();
        int hour = int.Parse(hourstr);
        int min = int.Parse(minstr);

        //입력한 시간과 현재 시간이 같을때
        if (date.Hour == hour && date.Minute == min && date.Second == 00)
        {
            if (job == "퇴근")
            {
                MessageBox.Show("퇴근입니다.");
            }
            else
            {
                MessageBox.Show(new Form { TopMost = true }, $"{job} 예정되어 있습니다.~~~ : \r\n현재 : {date.Hour}시 {date.Minute}분 {date.Second}초 입니다.", "Message");
            }
            delinex.Add(i);
        }
        i++;
    }
    

    //지난 일정은 삭제
    if (delinex != null)
    {
        delinex.Reverse();
        foreach (var del in delinex)
        {
            string delstr = string.Format("{0}", del);
            int delint = (int)Convert.ChangeType(del, typeof(int));
            listBox1.Items.RemoveAt(delint);
            delinex.Remove(delstr);

        }
    }
    
}
Posted by agape93
,

TIMER 만들기

public partial class Form1 : Form
{
    private int second;
    private int minute;
    private int start;
    private int stop;

    public Form1()
    {
        InitializeComponent();

        //프로그램 실행시 타이머 미작동
        timer1.Enabled = false;

        //초기화
        second = 0;
        minute = 0;
        start = 0;
        stop = 0;

        //프로그램 실행시 "00" 입력
        lb_sec.Items.Add("00");
        lb_min.Items.Add("00");
        lb_col.Items.Add(":");

    }

    private void btn_start_Click(object sender, EventArgs e)
    {


        //시작시 초기화
        timer1.Enabled = false;
        //처음일때만 분, 초에 "00" 제거
        if (start == 0)
        {
            lb_sec.Items.Remove("00");
            lb_min.Items.Remove("00");
            lb_col.Items.Remove(":");
        }
        //그외에는 시간 제거
        else 
        {
            lb_sec.Items.Remove(second);
            lb_min.Items.Remove(minute);
            lb_col.Items.Remove(":");
        }

        //입력
        try
        {
            minute = Int32.Parse(tb_input.Text);
            start = 0;
            stop = 0;
            lb_sec.Items.Add("00");
            lb_min.Items.Add(minute);
            lb_col.Items.Add(":");
            timer1.Enabled = true;
        }
        catch (Exception ex)
        {
            MessageBox.Show("잘못 입력하였습니다. 다시 입력하세요");
        }

    }

    private void btn_stop_Click(object sender, EventArgs e)
    {
        //정지
        if (stop == 0)
        {
            timer1.Enabled = false;
            stop = 1;
            return;
        }
        //다시 시작
        if (stop == 1)
        {
            timer1.Enabled = true;
            stop = 0;
            return;
        }

    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        //처음 시작시
        if (start == 0)
        {
            lb_min.Items.Remove(minute);
            minute--;
            lb_min.Items.Add(minute);

            lb_sec.Items.Remove("00");
            second = 60;
            second--;
            lb_sec.Items.Add(second);

            lb_col.Items.Remove(":");
            start++;
        }
        //그 외
        else 
        {
            if (second == 60)
            {
                lb_sec.Items.Remove("00");
            }
            else
            {
                lb_sec.Items.Remove(second);
            }
            second--;

            if (second == 59)
            {
                lb_min.Items.Remove(minute);
                minute--;
                lb_min.Items.Add(minute);
            }

            //2초에 한번씩 ":" 깜박임
            if (second % 2 == 1)
            {
                lb_col.Items.Remove(":");
            }
            else
            {
                lb_col.Items.Add(":");
            }

            if (second == 0 && minute == 0)
            {
                timer1.Enabled = false;
                lb_sec.Items.Add(second);
                MessageBox.Show("완료되었습니다.");
                return;
            }

            if (second == 0)
            {
                lb_sec.Items.Add("00");
                second = 60;
            }
            else
            {
                lb_sec.Items.Add(second);
            }
        }

    }
}

참고
https://makemethink.tistory.com/127

Posted by agape93
,