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

 更新时间:2024年06月16日 11:14:07   作者:0564丶Kang  
因为需求需要涉及获取硬盘的SN参数,但是又不想要获取到U盘或移动硬盘设备的SN,所以就浅浅的研究了一下,本文给大家介绍了C#使用WMI获取硬盘参数的实现方法,需要的朋友可以参考下

背景

因为需求需要涉及获取硬盘的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获取硬盘参数的资料请关注脚本之家其它相关文章!

相关文章

  • C#使用Windows Service的简单教程(创建、安装、卸载、调试)

    C#使用Windows Service的简单教程(创建、安装、卸载、调试)

    这篇文章主要为大家详细介绍了C#创建、安装、卸载、调试Windows Service(Windows 服务)的简单教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • C#实现NPOI的Excel导出详解

    C#实现NPOI的Excel导出详解

    这篇文章主要介绍了C#实现NPOI的Excel导出的示例代码,文中的实现过程讲解详细,对我们的学习或工作有一定的帮助,感兴趣的可以跟随小编一起学习一下
    2022-01-01
  • c# 单例模式的实现方法

    c# 单例模式的实现方法

    这篇文章主要介绍了c# 单例模式的实现方法,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-08-08
  • C#语法糖(Csharp Syntactic sugar)大汇总

    C#语法糖(Csharp Syntactic sugar)大汇总

    首先需要声明的是“语法糖”这个词绝非贬义词,它可以给我带来方便,是一种便捷的写法,编译器会帮我们做转换;而且可以提高开发编码的效率,在性能上也不会带来损失。这让java开发人员羡慕不已,呵呵。
    2010-06-06
  • C#非递归先序遍历二叉树实例

    C#非递归先序遍历二叉树实例

    这篇文章主要介绍了C#非递归先序遍历二叉树的实现方法,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • C#游戏开发之实现贪吃蛇游戏

    C#游戏开发之实现贪吃蛇游戏

    这篇文章主要为大家详细介绍了C#如何实现经典贪吃蛇游戏,文中的示例代码讲解详细,对我们学习C#有一定的帮助,感兴趣的小伙伴可以跟随小编一起了解一下
    2023-01-01
  • C#实现HSL颜色值转换为RGB的方法

    C#实现HSL颜色值转换为RGB的方法

    这篇文章主要介绍了C#实现HSL颜色值转换为RGB的方法,涉及C#数值判定与转换的相关技巧,需要的朋友可以参考下
    2015-06-06
  • DataTables List互相转换的实现类示例

    DataTables List互相转换的实现类示例

    这篇文章主要介绍了将DataTable转换为List,将List转换为DataTable的实现类实例方法,大家参考使用吧
    2013-11-11
  • C#流类FileStream学习使用笔记

    C#流类FileStream学习使用笔记

    这篇文章主要介绍了C#流类FileStream学习使用笔记,本文直接给出示例代码,代码中每一步都有详细注释,需要的朋友可以参考下
    2015-06-06
  • C#实现客户端弹出消息框封装类实例

    C#实现客户端弹出消息框封装类实例

    这篇文章主要介绍了C#实现客户端弹出消息框封装类,实例分析了C#弹出窗口的实现技巧,非常具有实用价值,需要的朋友可以参考下
    2015-03-03

最新评论