因为需求需要涉及获取硬盘的SN参数,但是又不想要获取到U盘或移动硬盘设备的SN,所以就浅浅的研究了一下。
以下就是我目前发现的一些参数的作用,够我用了。。。
NuGet自己安装哈
为了方便我调试代码,这里花了几分钟麻了一个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
{
///
/// MainWindow.xaml 的交互逻辑
///
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一样简单
InterfaceType
为USB
MediaType
为Removable Media
InterfaceType
为SCSI
或其他MediaType
为External hard disk media
InterfaceType
为SCSI
、IDE
或其他,具体怎么安装,走什么总线MediaType
为Fixed hard disk media
不是所有的M.2硬盘都是NVMe协议
InterfaceType
的值,主要是看设备走什么总线去判断的MediaType
判断就行,比如获取本机固定的硬盘,不想包含U盘或移动硬盘,只需要添加执行下面的语句:SELECT * FROM Win32_DiskDrive WHERE MediaType = 'Fixed hard disk media'
LIKE