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#使用FluentHttpClient实现请求WebApi

    C#使用FluentHttpClient实现请求WebApi

    FluentHttpClient 是一个REST API 异步调用 HTTP 客户端,调用过程非常便捷,下面我们就来学习一下C#如何使用FluentHttpClient实现请求WebApi吧
    2023-12-12
  • C#11新特性之file关键字的用法教程

    C#11新特性之file关键字的用法教程

    C#11 添加了文件作用域类型功能:一个新的 file 修饰符,可以应用于任何类型定义以限制其只能在当前文件中使用。这样,我们可以在一个项目中拥有多个同名的类。本文就来聊聊file关键字的用法,需要的可以参考一下
    2022-12-12
  • C#设置Word文本框中改变文字方向的方法

    C#设置Word文本框中改变文字方向的方法

    在Word中可插入文本框,默认情况下插入的文本框中的文字方向为横向排列,对于一些特殊文档的设计要求,需要改变文字方向,本文就详细的介绍一下使用,感兴趣的可以了解一下
    2021-06-06
  • c#简单判断是否是闰年的方法代码

    c#简单判断是否是闰年的方法代码

    这篇文章主要介绍了c#简单判断是否是闰年的方法,大家参考使用吧
    2013-11-11
  • C# dump系统lsass内存和sam注册表详细

    C# dump系统lsass内存和sam注册表详细

    这篇文章主要介绍了C# dump系统lsass内存和sam注册表,在这里选择 C# 的好处是体积小,结合 loadAssembly 方便免杀,希望对读者们有所帮助
    2021-09-09
  • C#实现时间戳的简单方法

    C#实现时间戳的简单方法

    这篇文章主要介绍了C#实现时间戳的简单方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-04-04
  • ASP.NET总结C#中7种获取当前路径的方法

    ASP.NET总结C#中7种获取当前路径的方法

    本文主要介绍了7种获取当前路径的方法,并做了代码演示,分享给大家,感兴趣的朋友可以参考一下。
    2016-03-03
  • C#内置泛型委托之Func委托

    C#内置泛型委托之Func委托

    这篇文章介绍了C#内置泛型委托之Func委托的用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • C#中日期时间的简单操作

    C#中日期时间的简单操作

    这篇文章介绍了C#中日期时间的简单操作,有需要的朋友可以参考一下
    2013-08-08
  • C#实现三元组的使用示例

    C#实现三元组的使用示例

    本文介绍了C#中的三元组数据结构,以及如何使用三元组在C#中进行一些特定的计算,具有一定的参考价值,感兴趣的可以了解一下
    2023-11-11

最新评论