目录
  • 背景
  • 涉及框架及库
  • WMI查询小工具
  • 参数解释
    • U盘
    • 移动硬盘
    • 本机设备
  • 总结

    背景

    因为需求需要涉及获取硬盘的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框填写我们的查询语句,点击执行

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

    也可以只查询我们想要的数据,反正使用就像SQL一样简单

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

    参数解释

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

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

    U盘

    • InterfaceTypeUSB
    • MediaTypeRemovable Media

    移动硬盘

    • InterfaceTypeSCSI或其他
    • MediaTypeExternal hard disk media

    本机设备

    • InterfaceTypeSCSIIDE或其他,具体怎么安装,走什么总线
    • MediaTypeFixed hard disk media

    总结

    • 移动固态硬盘走的是SCSI也就是NVMe的总线,或者是IDE,也就是传统的走线
    • 本地如果是NVMe的硬盘,走的应该也是SCSI总线,如果是普通SATA接口的,应该是IDE

    不是所有的M.2硬盘都是NVMe协议

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

    • InterfaceType的值,主要是看设备走什么总线去判断的
    • 如果只是需要判断移动设备还是本机设备,直接在MediaType判断就行,比如获取本机固定的硬盘,不想包含U盘或移动硬盘,只需要添加执行下面的语句:
    SELECT * FROM Win32_DiskDrive WHERE MediaType = 'Fixed hard disk media'

    和SQL还是有区别的,语句后面不能有分号,字段不能用AS映射成有好名称,能用LIKE

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

    以上就是C#使用WMI获取硬盘参数的实现方法的详细内容,更多关于C# WMI获取硬盘参数的资料请关注其它相关文章!

    声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。