当前位置:网站首页>C# 监听WMI事件
C# 监听WMI事件
2022-04-23 05:55:00 【begeneral】
1、什么是WMI事件
看了一下微软MSDN上对WMI事件的解释,但是没怎么看懂,不过也大概明白了。WMI事件是系统内部在执行一些动作时触发的事件,比如:打开(或关闭)某一个进程、打印、插入USB检测、打开某一个文件。
2、WMI事件查询
SELECT * FROM __InstanceCreationEvent WITHIN 0.001 WHERE TargetInstance ISA \"Win32_PrintJob\"
这条看似SQL语句的查询语句就是查询WMI事件的,我们来分析一下这条语句。
__InstanceCreationEvent这个对象翻译成中文就是:实例创建事件,就是添加或创建类的事件都是从这个对象中查询,比如我们创建一个进程或一个文件。我们不止可以查询创建事件,增、删、改这几种类型的事件都可以查询到,修改是:__InstanceModificationEvent,删除是:__InstanceDeletionEvent。查询好像没有。
within 0.001,这个参数指的是查询的轮询时间,隔多长时间去查询一次这个事件,单位是秒,这里的轮询时间是1毫秒
TargetInstance,目标实例的名称;ISA,就是is a 的缩写,连起来就是目标实例是什么
Win32_PrintJob,目标实例的名称,这里的例子是windows系统的打印任务。
整个查询的意思就是:每隔1毫秒去查询windows系统中的新建的打印任务
如果我们要查询具体实例的名称,比如我们要查询系统创建一个什么进程,那查询语句应该是这样的:
Select * From __InstanceCreationEvent WITHIN 60 Where TargetInstance ISA 'Win32_Process' and TargetInstance.Name = 'notepad.exe'
3、代码实现
引用程序集:System.Management
ManagementEventWatcher createPrintJobWatcher = new ManagementEventWatcher();
// Create event query to be notified within 1 milli second of a change in a service
WqlEventQuery createPrintJobQuery = new WqlEventQuery("SELECT * FROM __InstanceCreationEvent WITHIN 0.001 WHERE TargetInstance ISA \"Win32_PrintJob\"");
createPrintJobWatcher.Query = createPrintJobQuery;
// times out watcher.WaitForNextEvent in 20 seconds
createPrintJobWatcher.Options.Timeout = new TimeSpan(0, 0, 20);
//set the print event handler
createPrintJobWatcher.EventArrived += new EventArrivedEventHandler(createPrintJobListener);
createPrintJobWatcher.Start();
监听到事件后的事件处理程序
static void createPrintJobListener(object sender, EventArrivedEventArgs e)
{
SelectQuery query = new SelectQuery("Win32_PrintJob");
using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query))
using (ManagementObjectCollection printJobs = searcher.Get())
foreach (ManagementObject printJob in printJobs)
{
foreach (var item in printJob.Properties)
{
Console.WriteLine($"属性名称:{item.Name},属性值:{item.Value}");
}
Console.WriteLine("c1:", printJob);
Console.WriteLine("ID: {0}", printJob.GetPropertyValue("JobId").ToString());
Console.WriteLine("name: {0}", printJob.GetPropertyValue("name").ToString());
Console.WriteLine("status: {0}", printJob.GetPropertyValue("status").ToString());
if (printJob.GetPropertyValue("JobStatus") != null)
{
Console.WriteLine("JobStatus: {0}", printJob.GetPropertyValue("JobStatus").ToString());
}
else
{
Console.WriteLine("JobStatus: NULLLLLL");
}
Console.WriteLine("PC: {0}", printJob.GetPropertyValue("HostPrintQueue").ToString());
Console.WriteLine("TOTOAL PAGES: {0}", printJob.GetPropertyValue("TotalPages").ToString());
}
}
最后附上MSDN的地址:WMI 事件 | Microsoft Docs
版权声明
本文为[begeneral]所创,转载请带上原文链接,感谢
https://blog.csdn.net/niechaoya/article/details/121858736
边栏推荐
- Set up a personal blog of jpress
- .Net Core 下使用 Quartz —— 【7】作业和触发器之简单触发器
- MOS管特性和导通过程
- el-form表单多重循环校验
- Informatics one book pass - small ball
- Running QT program in visual Stdio
- Overview of node file system and buffer
- VHDL finite state machine (FSM) code example
- MOS tube characteristics and conduction process
- C language advanced notes 3
猜你喜欢
ASP.NET CORE JWT认证
SiteServer CMS5.0使用总结
.Net Core3.1 使用 RazorEngine.NetCore 制作实体生成器 (MVC网页版)
Detailed explanation and application of PN junction and diode principle
常用sql语句收藏
VHDL-任意分频器(50%占空比)
Makefile foundation, common functions and general makefile
欢迎使用Markdown编辑器
CUDA environment installation
获取当前一周的时间范围
随机推荐
元素计算距离与event事件对象
Makefile基础、常用函数及通用Makefile
Redux概述
Router对象、Route对象、声明式导航、编程式导航
Assembler 32-bit unsigned addition calculator
Sdoi2009-hh Necklace
JS中的this指向
赛氪-zeal
Krypton binary
信息学一本通-小球
小程序学习笔记(一)
【无标题】js中的类型判断
POJ-The Unique MST
C language structure specifying initialization
CUDA project encountered a series of compilation problems after changing the environment (computer)
Multibyte and Unicode in VS
微信小程序之点击取消,返回上页,修改上页的参数值,let pages=getCurrentPages() let prevPage=pages[pages.length - 2] // 上一页的数据
2020 Jiangsu Collegiate Programming Contest-A.Array
小米摄像头异常解决
el-form表单多重循环校验