C#使用WMI对进程和可移动磁盘的监控

注意:代码运行需引用System.Management.dll并且加入using System.Management;命名空间。


//注意:引用System.Management.dll 和 using System.Management;
static void Main(string[] args)
{
    //创建WQL事件查询,用于实例创建
    var qCreate = new WqlEventQuery("__InstanceCreationEvent",
        TimeSpan.FromSeconds(1),  //WHTHIN = 1
        "TargetInstance ISA 'Win32_Process'");
    //创建WQL事件查询,用于实例删除
    var qDelete = new WqlEventQuery("__InstanceDeletionEvent",
        TimeSpan.FromSeconds(1),  //WHTHIN = 1
        "TargetInstance ISA 'Win32_Process'");

    //创建事件查询的侦听器(ManagementEventWatcher)
    var wCreate = new ManagementEventWatcher(qCreate);
    var wDelete = new ManagementEventWatcher(qDelete);

    //事件注册代码
    wCreate.EventArrived += (sender, e) =>
    {
        Console.WriteLine("运行:{0}", GetInfo(e.NewEvent));
    };
    wDelete.EventArrived += (sender, e) =>
    {
         Console.WriteLine("关闭:{0}", GetInfo(e.NewEvent));
    };

    //异步开始侦听
    wCreate.Start();
    wDelete.Start();

    Console.WriteLine("按任意键停止监控");
    Console.ReadKey(true);
}

//输出事件对应的ManagementBaseObject(本例中的Win32_Process实例)的信息
static string GetInfo(ManagementBaseObject mobj)
{
    var instance = (ManagementBaseObject)mobj["TargetInstance"];
    return string.Format("{0} - {1}", instance["Name"], DateTime.Now);
}

//注意:引用System.Management.dll 和 using System.Management;
static void Main(string[] args)
{
    //创建WQL事件查询,用于实例创建
    //加入条件判断 TargetInstance.DriveType = 2
    //代表判断Win32_LogicalDisk.DriveType属性,2则代表可移动磁盘
    var qCreate = new WqlEventQuery("__InstanceCreationEvent",
        TimeSpan.FromSeconds(1),
        "TargetInstance ISA 'Win32_LogicalDisk' AND TargetInstance.DriveType = 2");
    //创建WQL事件查询,用于实例删除
    var qDelete = new WqlEventQuery("__InstanceDeletionEvent",
        TimeSpan.FromSeconds(1),
        "TargetInstance ISA 'Win32_LogicalDisk' AND TargetInstance.DriveType = 2");

    //创建事件查询的侦听器(ManagementEventWatcher)
    var wCreate = new ManagementEventWatcher(qCreate);
    var wDelete = new ManagementEventWatcher(qDelete);

    //事件注册代码
    wCreate.EventArrived += (sender, e) =>
    {
        Console.WriteLine("接入可移动磁盘:{0}", GetInfo(e.NewEvent));
    };
    wDelete.EventArrived += (sender, e) =>
    {
        Console.WriteLine("拔出可移动磁盘:{0}", GetInfo(e.NewEvent));
    };

    //异步开始侦听
    wCreate.Start();
    wDelete.Start();

    Console.WriteLine("按任意键停止监控");
    Console.ReadKey(true);
}

//输出事件对应的ManagementBaseObject(本例中的Win32_LogicalDisk实例)的信息
static string GetInfo(ManagementBaseObject mobj)
{
    var instance = (ManagementBaseObject)mobj["TargetInstance"];
    return string.Format("{0} - {1}", instance["Name"], DateTime.Now);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值