C#使用WMI獲取硬盤參數(shù)的實(shí)現(xiàn)方法
背景
因?yàn)樾枨笮枰婕矮@取硬盤的SN參數(shù),但是又不想要獲取到U盤或移動(dòng)硬盤設(shè)備的SN,所以就淺淺的研究了一下。
以下就是我目前發(fā)現(xiàn)的一些參數(shù)的作用,夠我用了。。。
涉及框架及庫
NuGet自己安裝哈
System.Management
WMI查詢小工具
為了方便我調(diào)試代碼,這里花了幾分鐘麻了一個(gè)WMI查詢結(jié)果輸出的小公舉
項(xiàng)目代碼就不發(fā)了,就只有兩個(gè)文件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="執(zhí)行" 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("查詢語句不能為空!", "錯(cuò)誤", 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, "錯(cuò)誤", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
}
}
在Query框填寫我們的查詢語句,點(diǎn)擊執(zhí)行

也可以只查詢我們想要的數(shù)據(jù),反正使用就像SQL一樣簡(jiǎn)單

參數(shù)解釋


U盤
InterfaceType為USBMediaType為Removable Media
移動(dòng)硬盤
InterfaceType為SCSI或其他MediaType為External hard disk media
本機(jī)設(shè)備
InterfaceType為SCSI、IDE或其他,具體怎么安裝,走什么總線MediaType為Fixed hard disk media
總結(jié)
- 移動(dòng)固態(tài)硬盤走的是SCSI也就是NVMe的總線,或者是IDE,也就是傳統(tǒng)的走線
- 本地如果是NVMe的硬盤,走的應(yīng)該也是SCSI總線,如果是普通SATA接口的,應(yīng)該是IDE
不是所有的M.2硬盤都是NVMe協(xié)議

InterfaceType的值,主要是看設(shè)備走什么總線去判斷的- 如果只是需要判斷移動(dòng)設(shè)備還是本機(jī)設(shè)備,直接在
MediaType判斷就行,比如獲取本機(jī)固定的硬盤,不想包含U盤或移動(dòng)硬盤,只需要添加執(zhí)行下面的語句:
SELECT * FROM Win32_DiskDrive WHERE MediaType = 'Fixed hard disk media'
和SQL還是有區(qū)別的,語句后面不能有分號(hào),字段不能用AS映射成有好名稱,能用LIKE

以上就是C#使用WMI獲取硬盤參數(shù)的實(shí)現(xiàn)方法的詳細(xì)內(nèi)容,更多關(guān)于C# WMI獲取硬盤參數(shù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C#使用FluentHttpClient實(shí)現(xiàn)請(qǐng)求WebApi
FluentHttpClient 是一個(gè)REST API 異步調(diào)用 HTTP 客戶端,調(diào)用過程非常便捷,下面我們就來學(xué)習(xí)一下C#如何使用FluentHttpClient實(shí)現(xiàn)請(qǐng)求WebApi吧2023-12-12
C# dump系統(tǒng)lsass內(nèi)存和sam注冊(cè)表詳細(xì)
這篇文章主要介紹了C# dump系統(tǒng)lsass內(nèi)存和sam注冊(cè)表,在這里選擇 C# 的好處是體積小,結(jié)合 loadAssembly 方便免殺,希望對(duì)讀者們有所幫助2021-09-09
C#實(shí)現(xiàn)時(shí)間戳的簡(jiǎn)單方法
這篇文章主要介紹了C#實(shí)現(xiàn)時(shí)間戳的簡(jiǎn)單方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04
ASP.NET總結(jié)C#中7種獲取當(dāng)前路徑的方法
本文主要介紹了7種獲取當(dāng)前路徑的方法,并做了代碼演示,分享給大家,感興趣的朋友可以參考一下。2016-03-03

