背景
因为需求需要涉及获取硬盘的sn参数,但是又不想要获取到u盘或移动硬盘设备的sn,所以就浅浅的研究了一下。
以下就是我目前发现的一些参数的作用,够我用了。。。
涉及框架及库
nuget自己安装哈
system.management
wmi查询小工具
为了方便我调试代码,这里花了几分钟麻了一个wmi查询结果输出的小公举
项目代码就不发了,就只有两个文件mainwindow.xaml.cs
和mainwindow.xaml
,从如此low的界面也能看出来,没有其它代码了
前端代码:
<window x:class="wmiquery.mainwindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:wmiquery" mc:ignorable="d" windowstartuplocation="centerscreen" title="wmiquery" height="450" width="800"> <grid margin="5 5 5 5"> <grid.rowdefinitions> <rowdefinition height="auto"></rowdefinition> <rowdefinition height="auto"></rowdefinition> <rowdefinition height="auto"></rowdefinition> <rowdefinition height="auto"></rowdefinition> <rowdefinition height="*"></rowdefinition> <rowdefinition height="auto"></rowdefinition> <rowdefinition height="auto"></rowdefinition> </grid.rowdefinitions> <textblock grid.row="0" text="query:"></textblock> <textbox grid.row="1" x:name="txt_query" textwrapping="wrap" acceptsreturn="true" acceptstab="true" height="60"></textbox> <stackpanel grid.row="2" margin="0 5 0 5" orientation="horizontal"> <button content="执行" x:name="btn_start" click="btn_start_click"></button> </stackpanel> <textblock grid.row="3" text="out:"></textblock> <textbox grid.row="4" x:name="txt_out"></textbox> </grid> </window>
后端代码:
using system; using system.text; using system.windows; using system.management; namespace wmiquery { /// <summary> /// mainwindow.xaml 的交互逻辑 /// </summary> public partial class mainwindow : window { public mainwindow() { initializecomponent(); } private void btn_start_click(object sender, routedeventargs e) { var query = txt_query.text; if (string.isnullorempty(query) || string.isnullorwhitespace(query)) { messagebox.show("查询语句不能为空!", "错误", messageboxbutton.ok, messageboximage.error); return; } var outbuilder = new stringbuilder(); try { var searcher = new managementobjectsearcher(query); int i = 0; foreach (var drive in searcher.get()) { outbuilder.appendline($"===>index:{i++}<==="); foreach (var item in drive.properties) { outbuilder.appendline(item.name + ": " + item.value); } outbuilder.appendline(); } txt_out.text = outbuilder.tostring(); } catch (exception ex) { messagebox.show(ex.message, "错误", messageboxbutton.ok, messageboximage.error); } } } }
在query框填写我们的查询语句,点击执行
也可以只查询我们想要的数据,反正使用就像sql一样简单
参数解释
u盘
interfacetype
为usb
mediatype
为removable media
移动硬盘
interfacetype
为scsi
或其他mediatype
为external hard disk media
本机设备
interfacetype
为scsi
、ide
或其他,具体怎么安装,走什么总线mediatype
为fixed hard disk media
总结
- 移动固态硬盘走的是scsi也就是nvme的总线,或者是ide,也就是传统的走线
- 本地如果是nvme的硬盘,走的应该也是scsi总线,如果是普通sata接口的,应该是ide
不是所有的m.2硬盘都是nvme协议
interfacetype
的值,主要是看设备走什么总线去判断的- 如果只是需要判断移动设备还是本机设备,直接在
mediatype
判断就行,比如获取本机固定的硬盘,不想包含u盘或移动硬盘,只需要添加执行下面的语句:
select * from win32_diskdrive where mediatype = 'fixed hard disk media'
和sql还是有区别的,语句后面不能有分号,字段不能用as映射成有好名称,能用like
以上就是c#使用wmi获取硬盘参数的实现方法的详细内容,更多关于c# wmi获取硬盘参数的资料请关注代码网其它相关文章!
发表评论