using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Configuration;
using System.IO;
namespace ProcessMonitor
{
public partial class MainForm : Form
{
private int interval = 60000;//监控间隔
DateTime d_start = DateTime.Now;//统计累计监控时长
public MainForm()
{
InitializeComponent();
}
private void MainForm_Load(object sender, EventArgs e)
{
//读取进程列表
try
{
string[] names = ConfigurationManager.AppSettings.Get("processNames").Split(',');//读取config文件要监控的进程
interval = int.Parse(ConfigurationManager.AppSettings.Get("interval"));//读取监控间隔
//如果监控进程数量大于0
if (names.Where(o => !string.IsNullOrEmpty(o)).Count() > 0)
{
timer1.Enabled = true;//启动定时器
timer1.Interval = interval;//设置定时间监控间隔
}
else
{
MessageBox.Show("请配置要监控的进程");
}
}
catch (Exception ex)
{
MessageBox.Show("请配置要监控的进程");
}
}
/// <summary>
/// 通过定时器循环监控
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void timer1_Tick(object sender, EventArgs e)
{
dataGridView1.Rows.Clear();//将进程情况显示在表格中
DataGridViewRow row = new DataGridViewRow();
string[] names = ConfigurationManager.AppSettings.Get("processNames").Split(',');//读取config文件要监控的进程
foreach (var name in names)
{
row = new DataGridViewRow();
row.CreateCells(dataGridView1);
//获取应用程序名称
string exeName = Path.GetFileName(name).Replace(Path.GetExtension(name), "");
row.Cells[0].Value = exeName;
Process pName = Process.GetProcessesByName(exeName).FirstOrDefault();
//该进程不存在并且该文件存在
if (pName == null && File.Exists(@name))
{
try
{
Process.Start(@name);//启动程序
System.Threading.Thread.Sleep(500);
row.Cells[1].Value = "启动中";
row.Cells[2].Value = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
}
catch (Exception ex)
{
row.Cells[1].Value = "启动失败";
row.Cells[2].Value = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
}
}
else
{
row.Cells[1].Value = "已启动";
row.Cells[2].Value = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
}
dataGridView1.Rows.Add(row);
}
}
private void MainForm_SizeChanged(object sender, EventArgs e)
{
// 判断只有最小化时,隐藏窗体
if (this.WindowState == FormWindowState.Minimized)
{
this.Hide();
}
}
private void notifyIcon1_DoubleClick(object sender, EventArgs e)
{
// 正常显示窗体
this.Visible = true;
this.WindowState = FormWindowState.Normal;
}
private void timer2_Tick(object sender, EventArgs e)
{
double dd = (DateTime.Now - d_start).TotalDays;
lbl_time.Text = DateDiffByTime(dd);
}
/// <summary>
/// 时间转换
/// </summary>
/// <param name="ts"></param>
/// <returns></returns>
private string DateDiffByTime(double ts)
{
int days = (int)ts;//天
int hours = (int)((ts - days) * 24);
int minutes = (int)((((ts - days) * 24) - hours) * 60);
int second = (int)((((((ts - days) * 24) - hours) * 60) - minutes) * 60);
return days + "天" + hours + "小时" + minutes + "分" + second + "秒";
}
}
}
winform简单监控进程(关闭后自动启动)
最新推荐文章于 2024-04-20 08:56:01 发布