当前位置: 代码网 > it编程>编程语言>C# > C#使用WMI获取硬盘参数的实现方法

C#使用WMI获取硬盘参数的实现方法

2024年07月03日 C# 我要评论
背景因为需求需要涉及获取硬盘的sn参数,但是又不想要获取到u盘或移动硬盘设备的sn,所以就浅浅的研究了一下。以下就是我目前发现的一些参数的作用,够我用了。。。涉及框架及库nuget自己安装哈syste

背景

因为需求需要涉及获取硬盘的sn参数,但是又不想要获取到u盘或移动硬盘设备的sn,所以就浅浅的研究了一下。
以下就是我目前发现的一些参数的作用,够我用了。。。

涉及框架及库

nuget自己安装哈

system.management

wmi查询小工具

为了方便我调试代码,这里花了几分钟麻了一个wmi查询结果输出的小公举
项目代码就不发了,就只有两个文件mainwindow.xaml.csmainwindow.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盘

  • interfacetypeusb
  • mediatyperemovable media

移动硬盘

  • interfacetypescsi或其他
  • mediatypeexternal hard disk media

本机设备

  • interfacetypescsiide或其他,具体怎么安装,走什么总线
  • mediatypefixed 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获取硬盘参数的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com