C# 获取 PC 序列号的方法示例

在 C++ 需要使用 GetSystemFirmwareTable 的方法来获得 PC 的序列号,需要写的代码很多,但是在 C# 可以使用 WMI 来拿到序列号

首先是安装 System.Management ,安装了这个库,在 dotnet framework 和 dotnet core 都可以使用本文的方法获取 PC 的序列号

安装 System.Management 的方法是通过 Nuget 搜索System.Management然后安装,如果使用的是VisualStudio 2017项目格式就可以复制下面代码到项目文件

<PackageReference Include="System.Management" Version="4.5.0" />

我比较喜欢第二个方法来安装,因为这个速度比较快

安装完成使用 WMI 拿到序列号需要的代码很少,请看下面

        var search = new ManagementObjectSearcher("SELECT * FROM Win32_BIOS");
        var mobos = search.Get();
        foreach (var temp in mobos)
        {
          object serial = temp["SerialNumber"]; // ProcessorID if you use Win32_CPU
          pcsn = serial.ToString();
          Console.WriteLine(pcsn);
        }

这样就可以拿到序列号,但是可能有些设备是没有序列号,很多时候是返回下面代码

To be filled by O.E.M
To be filled by O.E.M.
Default
Default string

上面代码最后一行就是空白,所以需要先做判断是不是存在序列号,所有代码请看下面

    /// <summary>
    /// 获得pc号
    /// </summary>
    public static string GetPcsnString()
    {
      var pcsn = "";
      try
      {
        var search = new ManagementObjectSearcher("SELECT * FROM Win32_BIOS");
        var mobos = search.Get();
        foreach (var temp in mobos)
        {
          object serial = temp["SerialNumber"]; // ProcessorID if you use Win32_CPU
          pcsn = serial.ToString();
          Console.WriteLine(pcsn);

          if
          (
            !string.IsNullOrEmpty(pcsn)
            && pcsn != "To be filled by O.E.M" //没有找到
            && !pcsn.Contains("O.E.M")
            && !pcsn.Contains("OEM")
            && !pcsn.Contains("Default")
          )
          {
            break;
          }
          else
          {
            Console.WriteLine("默认值");
          }
        }
      }
      catch (Exception e)
      {
        Debug.WriteLine(e);
        // 无法处理
      }

      return pcsn;
    }

需要知道,使用这个方法获取 序列号是比较耗性能的,建议放在其他线程获取

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C#利用win32 Api 修改本地系统时间、获取硬盘序列号

    C#利用win32 Api 修改本地系统时间.获取硬盘序列号,可以用于软件注册机制的编写! 复制代码 代码如下: using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; namespace Fengyun {     public class Win32     {         #region 修改本地系统时间         [DllIm

  • C#获取U盘序列号的方法

    本文实例讲述了C#获取U盘序列号的方法.分享给大家供大家参考.具体如下: using System.Management; private List<string> _serialNumber = new List<string>(); /// <summary> /// 调用这个函数将本机所有U盘序列号存储到_serialNumber中 /// </summary> private void matchDriveLetterWithSerial() { s

  • 用C#获取硬盘序列号,CPU序列号,网卡MAC地址的源码

    privatestring[]GetMoc() { string[]str=newstring[3]; ManagementClassmcCpu=newManagementClass("win32_Processor"); ManagementObjectCollectionmocCpu=mcCpu.GetInstances(); foreach(ManagementObjectminmocCpu) { str[0]=m["ProcessorId"].ToStrin

  • C#实现读取指定盘符硬盘序列号的方法

    本文实例讲述了C#实现读取指定盘符硬盘序列号的方法.分享给大家供大家参考,具体如下: using System; using System.IO; using System.Runtime.InteropServices; using System.Text; using Microsoft.Win32; namespace Wjb.ReadOrWriteIniAndReg { /**/////// 读取指定盘符的硬盘序列号 /// public class HardDiskVal { [Dll

  • C#获取硬盘序列号的问题小结

    先给大家描述下问题的来龙去脉. 具体问题是这样的:我用下面这段获取硬盘型信息的代码做成的exe文件,在机子上测试的时候,出现直接双击运行和用管理员身份运行结果不一样的情况,这个问题该怎么解决? public static String GetHardWareId() { String num = null; List<String> hdids = new List<string>(); ManagementClass mc = new ManagementClass("

  • C#获得MAC地址(网卡序列号)的实现代码

    代码如下: 复制代码 代码如下: //获得网卡序列号    public string GetMoAddress()    {        string MoAddress = " ";        ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");        ManagementObjectCollection moc2 = mc.GetInstanc

  • C# 获取 PC 序列号的方法示例

    在 C++ 需要使用 GetSystemFirmwareTable 的方法来获得 PC 的序列号,需要写的代码很多,但是在 C# 可以使用 WMI 来拿到序列号 首先是安装 System.Management ,安装了这个库,在 dotnet framework 和 dotnet core 都可以使用本文的方法获取 PC 的序列号 安装 System.Management 的方法是通过 Nuget 搜索System.Management然后安装,如果使用的是VisualStudio 2017项目

  • vue树形结构获取键值的方法示例

    本文介绍了vue树形结构获取键值的方法示例,分享给大家,具体如下: 把键值文件放入 引入控件 import { getTypeValue } from '@/api/dict/dictValue/index'; 点击搜索,打开弹窗 <el-form-item label="机构名称" placeholder="请选择机构" prop="orgName"> <el-input readonly type="text&qu

  • Golang通过小程序获取微信openid的方法示例

    为什么要获取小程序的 openid 在开发微信小程序的过程中,小程序可以通过微信官方提供的登录能力方便地获取微信提供的用户身份标识,快速建立小程序内的用户体系.那么这个用户身份标识就是 openid. 小程序获取 openid 的流程 那么小程序获取 openid 的流程具体如下,这里我简化了一下,因为我们只需要获取到 openid 即可,具体可以参考 这里 我们需要在小程序中调用 wx.login() 获取 code 码,然后将这个 code 码发送给后端,后端带着这个 code 码和 app

  • Go语言反射获取类型属性和方法示例

    本系列文章,我将会进一步加深对 Go 语言的讲解,更一步介绍 Go 中的包管理.反射和并发等高级特性. 前面一篇文章主要介绍了 reflect.Type 类型对象.本文将会继续介绍 Go 反射 reflect.StructField 和 reflect.Method 相关的内容. reflect.StructField 和 reflect.Method 如果变量是一个结构体,我们还可以通过结构体域类型对象 reflect.StructField 来获取结构体下字段的类型属性.Type 接口下提供

  • Python如何获取实时股票信息的方法示例

    如何获取实时股票信息 股票信息的接口有很多,之前大家常用的是新浪的,但在年初的时候,新浪的接口突然不能使用,给大家造成了很大的困扰,为此网上也有很多教程教大家如何从新浪获取数据,跟着教程弄了半天也不行,索性换到126(也就是网易了),感觉速度都还不错. 首先我们看下接口地址:http://api.money.126.net/data/feed/1000001,money.api 其中的1000001就是股票代码了,跟新浪的不同,他的第一位代表交易所,后面6位是股票代码 0:上交所 1:深交所 2

  • Java使用正则表达式匹配获取链接地址的方法示例

    本文实例讲述了Java使用正则表达式匹配获取链接地址的方法.分享给大家供大家参考,具体如下: 获取页面中字符串的url地址我们都会使用正则表达式来匹配获取了,下面我来给大家总结几个匹配获取链接地址示例. 1.正则表达式中Matcher中find()方法的应用. 2.String对象中的 replaceAll(String regex,String replacement) 方法的使用.通过这个方法去除了不必要的字符串,从而得到了需要的网址和链接文字 例1.超简单的 String content

  • JavaScript和JQuery获取DIV值的方法示例

    本文实例讲述了JavaScript和JQuery获取DIV值的方法.分享给大家供大家参考,具体如下: 1.示例代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtm

  • Android应用获取设备序列号的方法

    软硬件环境 Macbook Pro MGX 72 Android studio 2.1.2 Android 5.1.1 前言 上一篇介绍了如何获取ethernet的MAC地址,对于厂商来讲,除了MAC号,还有一项数据也很重要,那就是机器序列号,它是机器出厂时确定的,也是主要标识,每台机器都不一样. 要想获取到序列号,必须要先知道序列号从哪里来,写到了哪里.一般情况下,序列号都是厂商自己定义的一串字串,字串中的某几位会有不同含义,比如厂商的ID.出厂时间.机器类型等,另外,运营商定义的序列号几乎也

  • Python数据分析之获取双色球历史信息的方法示例

    本文实例讲述了Python数据分析之获取双色球历史信息的方法.分享给大家供大家参考,具体如下: 每个人都有一颗中双色球大奖的心,对于技术人员来说,通过技术分析,可以增加中奖几率,现使用python语言收集历史双色球中奖信息,之后进行预测分析. 说明:采用2016年5月15日获取的双色球数据为基础进行分析,总抽奖数1940次. 初级代码,有些内容比较繁琐,有更好的代码,大家可以分享. #!/usr/bin/python # -*- coding:UTF-8 -*- #coding:utf-8 #a

  • PHP实现动态获取函数参数的方法示例

    本文实例讲述了PHP实现动态获取函数参数的方法.分享给大家供大家参考,具体如下: PHP 在用户自定义函数中支持可变数量的参数列表.其实很简单,只需使用 func_num_args() , func_get_arg() ,和 func_get_args()  函数即可. 可变参数并不需要特别的语法,参数列表仍按函数定义的方式传递给函数,并按通常的方式使用这些参数. 1. func_num_args - 返回传入函数的参数总个数 int func_num_args ( void ) 示例 <?ph

随机推荐