摘要

有时需要获取电脑的相关信息。这时可以通过调用windows api的方式,进行获取。

方法

可以通过在powershell中 通过下面的命令进行查询,然后可以通过c#调用获取需要的信息。

gwmi + windows api

如图所示

对应的c#代码为

  /// <summary>
/// 获取硬盘容量
/// </summary>
public string GetDiskSize()
{
string result = string.Empty;
StringBuilder sb = new StringBuilder();
try
{
string hdId = string.Empty;
ManagementClass hardDisk = new ManagementClass(WindowsAPIType.win32_DiskDrive.ToString());
ManagementObjectCollection hardDiskC = hardDisk.GetInstances();
foreach (ManagementObject m in hardDiskC)
{
long capacity = Convert.ToInt64(m[WindowsAPIKeys.Size.ToString()].ToString());
sb.Append(CommonUtlity.ToGB(capacity, 1000.0) + "+");
}
result = sb.ToString().TrimEnd('+');
}
catch
{ }
return result;
}

API和Keys枚举

    /// <summary>
/// windows api 名称
/// </summary>
public enum WindowsAPIType
{
/// <summary>
/// 内存
/// </summary>
Win32_PhysicalMemory,
/// <summary>
/// cpu
/// </summary>
Win32_Processor,
/// <summary>
/// 硬盘
/// </summary>
win32_DiskDrive,
/// <summary>
/// 电脑型号
/// </summary>
Win32_ComputerSystemProduct,
/// <summary>
/// 分辨率
/// </summary>
Win32_DesktopMonitor,
/// <summary>
/// 显卡
/// </summary>
Win32_VideoController,
/// <summary>
/// 操作系统
/// </summary>
Win32_OperatingSystem }
    public enum WindowsAPIKeys
{
/// <summary>
/// 名称
/// </summary>
Name,
/// <summary>
/// 显卡芯片
/// </summary>
VideoProcessor,
/// <summary>
/// 显存大小
/// </summary>
AdapterRAM,
/// <summary>
/// 分辨率宽
/// </summary>
ScreenWidth,
/// <summary>
/// 分辨率高
/// </summary>
ScreenHeight,
/// <summary>
/// 电脑型号
/// </summary>
Version,
/// <summary>
/// 硬盘容量
/// </summary>
Size,
/// <summary>
/// 内存容量
/// </summary>
Capacity,
/// <summary>
/// cpu核心数
/// </summary>
NumberOfCores
}

Computer类

    /// <summary>
/// 电脑信息类 单例
/// </summary>
public class Computer
{
private static Computer _instance;
private static readonly object _lock = new object();
private Computer()
{ }
public static Computer CreateComputer()
{
if (_instance == null)
{
lock (_lock)
{
if (_instance == null)
{
_instance = new Computer();
}
}
}
return _instance;
}
/// <summary>
/// 查找cpu的名称,主频, 核心数
/// </summary>
/// <returns></returns>
public Tuple<string, string> GetCPU()
{
Tuple<string, string> result = null;
try
{
string str = string.Empty;
ManagementClass mcCPU = new ManagementClass(WindowsAPIType.Win32_Processor.ToString());
ManagementObjectCollection mocCPU = mcCPU.GetInstances();
foreach (ManagementObject m in mocCPU)
{
string name = m[WindowsAPIKeys.Name.ToString()].ToString();
string[] parts = name.Split('@');
result = new Tuple<string, string>(parts[].Split('-')[] + "处理器", parts[]);
break;
} }
catch
{ }
return result;
} /// <summary>
/// 获取cpu核心数
/// </summary>
/// <returns></returns>
public string GetCPU_Count()
{
string str = "查询失败";
try
{
int coreCount = ;
foreach (var item in new System.Management.ManagementObjectSearcher("Select * from " +
WindowsAPIType.Win32_Processor.ToString()).Get())
{
coreCount += int.Parse(item[WindowsAPIKeys.NumberOfCores.ToString()].ToString());
}
if (coreCount == )
{
return "双核";
}
str = coreCount.ToString() + "核";
}
catch
{ }
return str;
} /// <summary>
/// 获取系统内存大小
/// </summary>
/// <returns>内存大小(单位M)</returns>
public string GetPhisicalMemory()
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher(); //用于查询一些如系统信息的管理对象
searcher.Query = new SelectQuery(WindowsAPIType.Win32_PhysicalMemory.ToString(), "",
new string[] { WindowsAPIKeys.Capacity.ToString() });//设置查询条件
ManagementObjectCollection collection = searcher.Get(); //获取内存容量
ManagementObjectCollection.ManagementObjectEnumerator em = collection.GetEnumerator(); long capacity = ;
while (em.MoveNext())
{
ManagementBaseObject baseObj = em.Current;
if (baseObj.Properties[WindowsAPIKeys.Capacity.ToString()].Value != null)
{
try
{
capacity += long.Parse(baseObj.Properties[WindowsAPIKeys.Capacity.ToString()].Value.ToString());
}
catch
{
return "查询失败";
}
}
}
return CommonUtlity.ToGB((double)capacity, 1024.0);
} /// <summary>
/// 获取硬盘容量
/// </summary>
public string GetDiskSize()
{
string result = string.Empty;
StringBuilder sb = new StringBuilder();
try
{
string hdId = string.Empty;
ManagementClass hardDisk = new ManagementClass(WindowsAPIType.win32_DiskDrive.ToString());
ManagementObjectCollection hardDiskC = hardDisk.GetInstances();
foreach (ManagementObject m in hardDiskC)
{
long capacity = Convert.ToInt64(m[WindowsAPIKeys.Size.ToString()].ToString());
sb.Append(CommonUtlity.ToGB(capacity, 1000.0) + "+");
}
result = sb.ToString().TrimEnd('+');
}
catch
{ }
return result;
}
/// <summary>
/// 电脑型号
/// </summary>
public string GetVersion()
{
string str = "查询失败";
try
{
string hdId = string.Empty;
ManagementClass hardDisk = new ManagementClass(WindowsAPIType.Win32_ComputerSystemProduct.ToString());
ManagementObjectCollection hardDiskC = hardDisk.GetInstances();
foreach (ManagementObject m in hardDiskC)
{
str = m[WindowsAPIKeys.Version.ToString()].ToString(); break;
}
}
catch
{ }
return str;
}
/// <summary>
/// 获取分辨率
/// </summary>
public string GetFenbianlv()
{
string result = "1920*1080";
try
{
string hdId = string.Empty;
ManagementClass hardDisk = new ManagementClass(WindowsAPIType.Win32_DesktopMonitor.ToString());
ManagementObjectCollection hardDiskC = hardDisk.GetInstances();
foreach (ManagementObject m in hardDiskC)
{
result = m[WindowsAPIKeys.ScreenWidth.ToString()].ToString() + "*" +
m[WindowsAPIKeys.ScreenHeight.ToString()].ToString();
break;
}
}
catch
{ }
return result;
}
/// <summary>
/// 显卡 芯片,显存大小
/// </summary>
public Tuple<string, string> GetVideoController()
{
Tuple<string, string> result = null;
try
{ ManagementClass hardDisk = new ManagementClass(WindowsAPIType.Win32_VideoController.ToString());
ManagementObjectCollection hardDiskC = hardDisk.GetInstances();
foreach (ManagementObject m in hardDiskC)
{
result = new Tuple<string, string>(m[WindowsAPIKeys.VideoProcessor.ToString()].ToString()
.Replace("Family", ""), CommonUtlity.ToGB(Convert.ToInt64(m[WindowsAPIKeys.AdapterRAM.ToString()].ToString()), 1024.0));
break;
}
}
catch
{ }
return result;
} /// <summary>
/// 操作系统版本
/// </summary>
public string GetOS_Version()
{
string str = "Windows 10";
try
{
string hdId = string.Empty;
ManagementClass hardDisk = new ManagementClass(WindowsAPIType.Win32_OperatingSystem.ToString());
ManagementObjectCollection hardDiskC = hardDisk.GetInstances();
foreach (ManagementObject m in hardDiskC)
{
str = m[WindowsAPIKeys.Name.ToString()].ToString().Split('|')[].Replace("Microsoft", "");
break;
}
}
catch
{ }
return str;
} }

这里只是枚举了部分api,有兴趣的可以查看其它的windows api 并通过power shell查看,然后转化为c# 代码即可。

这里需要注意,硬盘容量在转化的时候需要除以1000,而不是1024.但内存是需要除以1024的,这点需要注意。

转化方法:

   /// <summary>
/// 将字节转换为GB
/// </summary>
/// <param name="size">字节值</param>
/// <param name="mod">除数,硬盘除以1000,内存除以1024</param>
/// <returns></returns>
public static string ToGB(double size, double mod)
{
String[] units = new String[] { "B", "KB", "MB", "GB", "TB", "PB" };
int i = ;
while (size >= mod)
{
size /= mod;
i++;
}
return Math.Round(size) + units[i];
}

C#获取电脑型号、系统版本、内存大小、硬盘大小、CPU信息的更多相关文章

  1. PC-改变电脑的CPU,内存,硬盘大小!

    如何修改CPU频率及内存容量和硬盘大小 改变电脑的CPU,内存,硬盘大小!--------------------------------------------------------------- ...

  2. android API版本对应的系统版本及Android获取手机和系统版本等信息的代码

    学了这么久的Android,竟然一直对其API对应的名称关系一值搞不清楚,现在网上认真看了下资料,转载一个觉得写得不错的作者的文章,记下来: [背景] 之前折腾android期间,慢慢地知道了,And ...

  3. 怎样 获取 ios的系统版本

    获得Ios系统版本的函数,比方 函数定义: [cpp] view plaincopy + (float)getIOSVersion; 函数实现: [cpp] view plaincopy + (flo ...

  4. linux系统查看系统内存和硬盘大小

    1. 查看系统运行内存 free -m free -g(Gb查看) cat /proc/meminfo 2. 查看硬盘大小 df -hl

  5. python 获取cpu、内存、硬盘等实时信息 psutil

    psutil是一个跨平台库,能够轻松实现获取系统运行的进程和系统利用率(CPU,内存,磁盘,网络等)信息,主要应用于系统监控,分析和限制系统资源及进程的管理,它实现了同等命令行工具提供的功能,如ps, ...

  6. linux一些硬件详情查看的高级方法(网卡,内存,硬盘,cpu)

    网卡-lspci内存大小和个数—— dmidecode|grep -A16 "Memory Device$"查看硬盘型号——smartctl -a /dev/sda查看硬盘大小—— ...

  7. linux下查看cpu,内存,硬盘等硬件信息的方法

    说明:Linux下可以在/proc/cpuinfo中看到每个cpu的详细信息.但是对于双核的cpu,在cpuinfo中会看到两个cpu.常常会让人误以为是两个单核的cpu. 一.linux CPU大小 ...

  8. Unity3D研究院编辑器之脚本获取资源内存和硬盘大小

    内存 使用Profiler可以查看某个资源的内存占用情况,但是必须启动游戏,并且待查看的资源已经载入游戏中.我希望的是不启动游戏,也能看到它的内存好做统计. 硬盘 由于unity中的资源压缩格式记录在 ...

  9. linux系统预留内存和磁盘大小

    默认情况下, Linux 会最多使用 40% 的可用内存作为文件系统缓存.当超过这个阈值后,文件系统会把将缓存中的内存全部写入磁盘, 导致后续的 IO 请求都是同步的. 将缓存写入磁盘时,有一个默认1 ...

随机推荐

  1. Azure DevOps Server: 使用Rest Api获取拉取请求Pull Request中的变更文件清单

    需求: Azure DevOps Server 的拉取请求模块,为开发团队提供了强大而且灵活的代码评审功能.拉取请求中变更文件清单,对质量管理人员,是一个宝贵的材料.质量保障人员可以从代码清单中分析不 ...

  2. python网络爬虫抓取网站图片

    本文介绍两种爬取方式: 1.正则表达式 2.bs4解析Html 以下为正则表达式爬虫,面向对象封装后的代码如下: import urllib.request # 用于下载图片 import os im ...

  3. .NET MVC中如何使用手机验证码注册登陆

    #region 手机验证码 /// <summary> /// /// </summary> /// <param name="Yonghushouji&quo ...

  4. DS博客作业03—栈和队列

    1.本周学习总结 本周学习了栈和队列两种数据结构,分别对应后进先出,先进先出两种数据操作 学会栈的特殊类型-共享栈,队列的特殊类型-循环队列的一系列操作 学会熟练使用栈和队列的STL容器,使代码简洁 ...

  5. “全栈2019”Java多线程第二十九章:可重入锁与不可重入锁详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  6. 通过Metasploit生成各种后门

    生成windows后门 1.首先生成后门 [root@localhost ~]# msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ ...

  7. IOS渗透测试第一步-基础知识统一放送

    原文: http://www.websecgeeks.com/2017/04/ios-application-pentesting-part-3.html http://www.websecgeeks ...

  8. Java代码审计连载之—SQL注入

    前言近日闲来无事,快两年都没怎么写代码了,打算写几行代码,做代码审计一年了,每天看代码都好几万行,突然发现自己都不会写代码了,真是很DT.想当初入门代码审计的时候真是非常难,网上几乎找不到什么java ...

  9. Redis---基础数据结构

    1.String(字符串) 1.1 概述 字符串 string 是 Redis 最简单的数据结构.Redis 所有的数据结构都是以唯一的 key 字符串作为名称,然后通过这个唯一 key 值来获取相应 ...

  10. WebDriver高级应用实例(2)

    2.1在日期选择器上进行日期选择 被测网页的网址: https://www.html5tricks.com/demo/Kalendae/index.html Java语言版本的API实例代码 impo ...