如何得到硬盘信息?

三碗猪脚 2019-01-03 03:47:11


机子挂了多块硬盘,如何得到如DG类似的硬盘分支结构

即根据硬盘系列号得分每块硬盘的全部分区.现在可以得到分区,也可以得到硬盘系列号,但都是分开得的
我想得到硬盘系列号与分区对应关系,有没有同学做过

得到系列号

public static List<string> GetHardDiskSerialNumber()
{
List<string> re = new List<string>();
string hardDiskID = null;
ManagementClass cimobject1 = new ManagementClass("Win32_DiskDrive");
ManagementObjectCollection moc1 = cimobject1.GetInstances();
foreach (ManagementObject mo in moc1)
{
if (hardDiskID == null)
{
hardDiskID = mo.Properties["Model"].Value.ToString();
}
else
{
hardDiskID = mo.Properties["Model"].Value.ToString();
}
re.Add(hardDiskID);
}
return re;
}


得到分区

System.IO.DriveInfo[] drives = System.IO.DriveInfo.GetDrives();
foreach (System.IO.DriveInfo di in drives)
{
Console.WriteLine(di.Name+" "+di.VolumeLabel);
}


...全文
678 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
liups 2019-05-12
  • 打赏
  • 举报
回复
wmi可以搞定
jx315425246 2019-05-12
  • 打赏
  • 举报
回复
硬盘序列号有时是得不到的,可以用DOS命令:wmic diskdrive get serialnumber


public static string RunCommand(string dosCommand, int milliseconds)
{
string output = ""; //输出字符串
if (dosCommand != null && dosCommand != "")
{
Process process = new Process(); //创建进程对象
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = "cmd.exe"; //设定需要执行的命令
startInfo.Arguments = "/C " + dosCommand; //设定参数,其中的“/C”表示执行完命令后马上退出
startInfo.UseShellExecute = false; //不使用系统外壳程序启动
startInfo.RedirectStandardInput = false; //不重定向输入
startInfo.RedirectStandardOutput = true; //重定向输出
startInfo.CreateNoWindow = true; //不创建窗口
process.StartInfo = startInfo;
try
{
if (process.Start()) //开始进程
{
if (milliseconds == 0)
process.WaitForExit(); //这里无限等待进程结束
else
process.WaitForExit(milliseconds); //当超过这个毫秒后,不管执行结果如何,都不再执行这个DOS命令
output = process.StandardOutput.ReadToEnd();//读取进程的输出
}
}
catch
{
}
finally
{
if (process != null)
process.Close();
}
}
return output;
}


程序中用

string rs = RunCommand("wmic diskdrive get serialnumber", 0);
三碗猪脚 2019-05-11
  • 打赏
  • 举报
回复
已沉入大海,没有人做过吗
三碗猪脚 2019-01-08
  • 打赏
  • 举报
回复
谢谢楼上的兄台

引用 5 楼 ilikeff8 的回复:
Get Hard disk serial Number


提供的程序 Hardware ID Extractor.exe我在window 7下可以运行,但在window 10不行,提示

The program needs to access the disk at low level but in some conditions Windows 7 UAC may block the program from doing so. Please temporary elevate program's rights.


我以管理员身份运行也没有获取,在VS下使用示例


[DllImport("HardwareIDExtractorC.dll")]
public static extern String GetIDESerialNumber(byte DriveNumber);

无法正常得到,但至少让我看到了希望,能正确得到SN
ilikeff8 2019-01-04
  • 打赏
  • 举报
回复
desperaso 2019-01-04
  • 打赏
  • 举报
回复
https://www.haolizi.net/example/view_11535.html
三碗猪脚 2019-01-04
  • 打赏
  • 举报
回复
谢谢楼上的两位同学,都没有获得正确的硬盘系列号.2楼的同学只得到了温度等信息,我去官网看了一下,下载了测试一下,看不到过多的硬盘信息,3楼的同学,这种方式得到的不是硬盘的系列号,而是硬盘的型号【Model】.
qq14923349 2019-01-04
  • 打赏
  • 举报
回复

using System;

using System.Collections.Generic;

using System.Linq;

using System.Management;

using System.Text;



namespace Formular

{

/// <summary>

/// Author ZZH

///

/// 获取计算机硬件信息

///

/// 可根据以下信息比对

///

/// CPU(CPU序列号)

/// 网卡(Mac地址)

/// 硬盘(硬盘ID)

/// 系统(系统名称,系统型号)

/// 内存(内存大小)

/// </summary>

public class Computer

{

/// <summary>

/// CPU序列号

/// </summary>

public string CpuID;

/// <summary>

/// 网卡/Mac地址

/// </summary>

public string MacAddress;

/// <summary>

/// 硬盘ID

/// </summary>

public string DiskID;

/// <summary>

/// IP地址

/// </summary>

public string IpAddress;

/// <summary>

/// 系统登录用户名

/// </summary>

public string LoginUserName;

/// <summary>

/// 系统名称

/// </summary>

public string ComputerName;

/// <summary>

/// 系统型号

/// </summary>

public string SystemType;

/// <summary>

/// 物理内存(单位b)

/// </summary>

public string TotalPhysicalMemory;

private static Computer _instance;

public static Computer Instance()

{

if (_instance == null)

_instance = new Computer();

return _instance;

}

protected Computer()

{

CpuID = GetCpuID();

MacAddress = GetMacAddress();

DiskID = GetDiskID();

IpAddress = GetIPAddress();

LoginUserName = GetUserName();

SystemType = GetSystemType();

TotalPhysicalMemory = GetTotalPhysicalMemory();

ComputerName = GetComputerName();

}

string GetCpuID()

{

try

{

//获取CPU序列号代码

string cpuInfo = "";//cpu序列号

ManagementClass mc = new ManagementClass("Win32_Processor");

ManagementObjectCollection moc = mc.GetInstances();

foreach (ManagementObject mo in moc)

{

cpuInfo = mo.Properties["ProcessorId"].Value.ToString();

}

moc = null;

mc = null;

return cpuInfo;

}

catch

{

return "unknow";

}

}

string GetMacAddress()

{

try

{

//获取网卡硬件地址

string mac = "";

ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");

ManagementObjectCollection moc = mc.GetInstances();

foreach (ManagementObject mo in moc)

{

if ((bool)mo["IPEnabled"] == true)

{

mac = mo["MacAddress"].ToString();

break;

}

}

moc = null;

mc = null;

return mac;

}

catch

{

return "unknow";

}

}

string GetIPAddress()

{

try

{

//获取IP地址

string st = "";

ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");

ManagementObjectCollection moc = mc.GetInstances();

foreach (ManagementObject mo in moc)

{

if ((bool)mo["IPEnabled"] == true)

{

//st=mo["IpAddress"].ToString();

System.Array ar;

ar = (System.Array)(mo.Properties["IpAddress"].Value);

st = ar.GetValue(0).ToString();

break;

}

}

moc = null;

mc = null;

return st;

}

catch

{

return "unknow";

}

}



string GetDiskID()

{

try

{

//获取硬盘ID

String HDid = "";

ManagementClass mc = new ManagementClass("Win32_DiskDrive");

ManagementObjectCollection moc = mc.GetInstances();

foreach (ManagementObject mo in moc)

{

HDid = (string)mo.Properties["Model"].Value;

}

moc = null;

mc = null;

return HDid;

}

catch

{

return "unknow";

}

}



/// <summary>

/// 操作系统的登录用户名

/// </summary>

/// <returns></returns>

string GetUserName()

{

try

{

string st = "";

ManagementClass mc = new ManagementClass("Win32_ComputerSystem");

ManagementObjectCollection moc = mc.GetInstances();

foreach (ManagementObject mo in moc)

{

st = mo["UserName"].ToString();

}

moc = null;

mc = null;

return st;

}

catch

{

return "unknow";

}

}





/// <summary>

/// PC类型

/// </summary>

/// <returns></returns>

string GetSystemType()

{

try

{

string st = "";

ManagementClass mc = new ManagementClass("Win32_ComputerSystem");

ManagementObjectCollection moc = mc.GetInstances();

foreach (ManagementObject mo in moc)

{

st = mo["SystemType"].ToString();

}

moc = null;

mc = null;

return st;

}

catch

{

return "unknow";

}



}



/// <summary>

/// 物理内存

/// </summary>

/// <returns></returns>

string GetTotalPhysicalMemory()

{

try

{



string st = "";

ManagementClass mc = new ManagementClass("Win32_ComputerSystem");

ManagementObjectCollection moc = mc.GetInstances();

foreach (ManagementObject mo in moc)

{

st = mo["TotalPhysicalMemory"].ToString();

}

moc = null;

mc = null;

return st;

}

catch

{

return "unknow";

}

}

/// <summary>

/// 系统名称

/// </summary>

/// <returns></returns>

string GetComputerName()

{

try

{

return System.Environment.GetEnvironmentVariable("ComputerName");

}

catch

{

return "unknow";

}

}

}

}
三碗猪脚 2019-01-03
  • 打赏
  • 举报
回复
刚发现,Model只是硬盘的型号,没有得到真正系列号,那只是一个型号,
真正的系列号在AIDA64软件中看到,找了半天也没有找到这样的类实现过,微软官方的也看了不少...

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧