C#使用WMI獲取硬盤參數(shù)的實(shí)現(xiàn)方法
背景
因?yàn)樾枨笮枰婕矮@取硬盤的SN參數(shù),但是又不想要獲取到U盤或移動(dòng)硬盤設(shè)備的SN,所以就淺淺的研究了一下。
以下就是我目前發(fā)現(xiàn)的一些參數(shù)的作用,夠我用了。。。
涉及框架及庫(kù)
NuGet自己安裝哈
System.Management
WMI查詢小工具
為了方便我調(diào)試代碼,這里花了幾分鐘麻了一個(gè)WMI查詢結(jié)果輸出的小公舉
項(xiàng)目代碼就不發(fā)了,就只有兩個(gè)文件MainWindow.xaml.cs
和MainWindow.xaml
,從如此LOW的界面也能看出來(lái),沒有其它代碼了
前端代碼:
<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("查詢語(yǔ)句不能為空!", "錯(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框填寫我們的查詢語(yǔ)句,點(diǎn)擊執(zhí)行
也可以只查詢我們想要的數(shù)據(jù),反正使用就像SQL一樣簡(jiǎn)單
參數(shù)解釋
U盤
InterfaceType
為USB
MediaType
為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í)行下面的語(yǔ)句:
SELECT * FROM Win32_DiskDrive WHERE MediaType = 'Fixed hard disk media'
和SQL還是有區(qū)別的,語(yǔ)句后面不能有分號(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#使用Windows Service的簡(jiǎn)單教程(創(chuàng)建、安裝、卸載、調(diào)試)
這篇文章主要為大家詳細(xì)介紹了C#創(chuàng)建、安裝、卸載、調(diào)試Windows Service(Windows 服務(wù))的簡(jiǎn)單教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01C#實(shí)現(xiàn)NPOI的Excel導(dǎo)出詳解
這篇文章主要介紹了C#實(shí)現(xiàn)NPOI的Excel導(dǎo)出的示例代碼,文中的實(shí)現(xiàn)過(guò)程講解詳細(xì),對(duì)我們的學(xué)習(xí)或工作有一定的幫助,感興趣的可以跟隨小編一起學(xué)習(xí)一下2022-01-01C#語(yǔ)法糖(Csharp Syntactic sugar)大匯總
首先需要聲明的是“語(yǔ)法糖”這個(gè)詞絕非貶義詞,它可以給我?guī)?lái)方便,是一種便捷的寫法,編譯器會(huì)幫我們做轉(zhuǎn)換;而且可以提高開發(fā)編碼的效率,在性能上也不會(huì)帶來(lái)?yè)p失。這讓java開發(fā)人員羨慕不已,呵呵。2010-06-06C#實(shí)現(xiàn)HSL顏色值轉(zhuǎn)換為RGB的方法
這篇文章主要介紹了C#實(shí)現(xiàn)HSL顏色值轉(zhuǎn)換為RGB的方法,涉及C#數(shù)值判定與轉(zhuǎn)換的相關(guān)技巧,需要的朋友可以參考下2015-06-06DataTables List互相轉(zhuǎn)換的實(shí)現(xiàn)類示例
這篇文章主要介紹了將DataTable轉(zhuǎn)換為L(zhǎng)ist,將List轉(zhuǎn)換為DataTable的實(shí)現(xiàn)類實(shí)例方法,大家參考使用吧2013-11-11C#實(shí)現(xiàn)客戶端彈出消息框封裝類實(shí)例
這篇文章主要介紹了C#實(shí)現(xiàn)客戶端彈出消息框封裝類,實(shí)例分析了C#彈出窗口的實(shí)現(xiàn)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-03-03