c# 我想用WMI 来读取远程的(同一个局域网的)机器的cpu ID,主板ID,硬盘ID等,可以实现么

c# 我想用WMI 来读取远程的(同一个局域网的)机器的cpu ID,主板ID,硬盘ID等,可以实现么,第1张

public class CPUInfo

{

#region 属性

#region CPU名称

string strCPUName = stringEmpty;

public string CPUName

{

get { return strCPUName; }

set { strCPUName = value; }

}

#endregion

#region CPU序列号

string strCPUID = stringEmpty;

public string CPUID

{

get { return strCPUID; }

set { strCPUID = value; }

}

#endregion

#region CPU个数

int nCPUCount = 0;

public int CPUCount

{

get { return nCPUCount; }

set { nCPUCount = value; }

}

#endregion

#region CPU制造商

string strCPUManufacturer = stringEmpty;

public string CPUManufacturer

{

get { return strCPUManufacturer; }

set { strCPUManufacturer = value; }

}

#endregion

#region 当前时钟频率

string strCPUCurrentClockSpeed = stringEmpty;

public string CPUCurrentClockSpeed

{

get { return strCPUCurrentClockSpeed; }

set { strCPUCurrentClockSpeed = value; }

}

#endregion

#region 最大时钟频率

string strCPUMaxClockSpeed = stringEmpty;

public string CPUMaxClockSpeed

{

get { return strCPUMaxClockSpeed; }

set { strCPUMaxClockSpeed = value; }

}

#endregion

#region 外部频率

string strCPUExtClock = stringEmpty;

public string CPUExtClock

{

get { return strCPUExtClock; }

set { strCPUExtClock = value; }

}

#endregion

#region 当前电压

string strCPUCurrentVoltage = stringEmpty;

public string CPUCurrentVoltage

{

get { return strCPUCurrentVoltage; }

set { strCPUCurrentVoltage = value; }

}

#endregion

#region 二级缓存

string strCPUL2CacheSize = stringEmpty;

public string CPUL2CacheSize

{

get { return strCPUL2CacheSize; }

set { strCPUL2CacheSize = value; }

}

#endregion

#region 数据带宽

string strCPUDataWidth = stringEmpty;

public string CPUDataWidth

{

get { return strCPUDataWidth; }

set { strCPUDataWidth = value; }

}

#endregion

#region 地址带宽

string strCPUAddressWidth = stringEmpty;

public string CPUAddressWidth

{

get { return strCPUAddressWidth; }

set { strCPUAddressWidth = value; }

}

#endregion

#region 运用百分比

int iCPUUsedPercent;

public int CPUUsedPercent

{

get { return iCPUUsedPercent; }

set { iCPUUsedPercent = value; }

}

#endregion

#region CPU温度

double strCPUTemperature;

public double CPUTemperature

{

get { return strCPUTemperature; }

set { strCPUTemperature = value; }

}

#endregion

#endregion

#region 构造函数

public CPUInfo()

{

GetCPUInfo();

}

#endregion

//GetCPUInfo

#region GetCPUInfo

public void GetCPUInfo()

{

#region 运用百分比

GetCPULoadPercentage();

#endregion

CPUCount = EnvironmentProcessorCount; //CPU个数

//GetCPUCurrentTemperature();

//实例化一个ManagementClass类,并将Win32_Processor作为参数传递进去,

//这样就能够查询Win32_Processor这个类里面的一些信息了。

ManagementClass mClass = new ManagementClass("Win32_Processor");

//获取Win32_Processor这个类的所有实例

ManagementObjectCollection moCollection = mClassGetInstances();

//对Win32_Processor这个类执行 遍历

foreach (ManagementObject mObject in moCollection)

{

CPUName = mObject["Name"]ToString(); //获取CPU名称

CPUID = mObject["ProcessorId"]ToString(); //获取 CPU ID

CPUManufacturer = mObject["Manufacturer"]ToString(); //获取CPU制造商

CPUCurrentClockSpeed = mObject["CurrentClockSpeed"]ToString(); //获取当前时钟频率

CPUMaxClockSpeed = mObject["MaxClockSpeed"]ToString(); //获取最大时钟频率

CPUExtClock = mObject["ExtClock"]ToString(); //获取外部频率

CPUCurrentVoltage = mObject["CurrentVoltage"]ToString(); //获取当前电压

CPUL2CacheSize = mObject["L2CacheSize"]ToString(); //获取二级缓存

CPUDataWidth = mObject["DataWidth"]ToString(); //获取数据带宽

CPUAddressWidth = mObject["AddressWidth"]ToString(); //获取地址带宽

}

}

public void GetCPUCurrentTemperature()

{

ManagementObjectSearcher mos = new ManagementObjectSearcher(@"root\wmi", @"select from MSAcpi_ThermalZoneTemperature");

foreach (ManagementObject mo in mosGet())

{

CPUTemperature = ConvertToDouble(ConvertToDouble(mo["CurrentTemperature"]ToString()) - 2732) / 10;

}

}

public int GetCPULoadPercentage()

{

int CPUusedpercent = 0;

try

{

ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT FROM Win32_Processor");

foreach (ManagementObject queryObj in searcherGet())

{

CPUusedpercent = intParse(queryObj["LoadPercentage"]ToString());

CPUUsedPercent = CPUusedpercent;

break;

}

}

catch

{

CPUusedpercent = 0;

}

return CPUusedpercent;

}

#endregion

}

var os=require('os');

//获取cpu(处理器架构)

var arch=osarch();

consolelog(arch);

//获取cpu信息

var cpus=oscpus();

consolelog(cpus);

//字节顺序 高位优先返回BE,低位优先的返回LE

var endianness=osendianness();

consolelog(endianness);

//空闲内存字节

var freemem=osfreemem()

consolelog(freemem);

//当前登录用户的根目录

var homedir=oshomedir();

consolelog(homedir);

// *** 作系统主机名

var hostname=oshostname()

consolelog(hostname);

//系统最近5、10、15分钟的平均负载,这是一个针对linux或unix的统计,windows下始终返回[0,0,0]

var loadavg=osloadavg();

consolelog(loadavg);

//网络配置列表

var networkInterfaces=osnetworkInterfaces();

consolelog(networkInterfaces);

// *** 作系统类型,返回值有'darwin', 'freebsd', 'linux', 'sunos' , 'win32'

var platform=osplatform();

consolelog(platform);

// *** 作系统版本

var release=osrelease();

consolelog(release);

// *** 作系统临时文件的默认目录

var tmpdir=ostmpdir()

consolelog(tmpdir);

//系统总内存

var totalmem=ostotalmem()

consolelog(totalmem);

// *** 作系统名称,基于linux的返回linux,基于苹果的返回Darwin,基于windows的返回Windows_NT

var type=ostype();

consolelog(type);

//计算机正常运行时间

var uptime=osuptime();

consolelog(uptime);

参考:>

朋友,这是你的电脑“丢失”或“误删”了“系统文件”,或“系统文件”被病

毒和“顽固”木马“破坏”,我给你8套方案!

(答案原创,严禁盗用,如有雷同,纯属山寨!)

(提示:360急救箱不能联网,就先用:(5)网络修复,重启电脑,或者使

用:离线模式)

1下载个:“360系统急救箱”!(安全模式下,联网使用,效果更好!)

(注意:已经安装了“360安全卫士”的朋友,直接打开“木马云查杀”,

点击:快速扫描,扫描结束后,中间有:没有问题,请用360急救箱,点击它!)

1先点:“开始急救”查杀病毒,删除后,“立即重启”!

2重启开机后,再点开“文件恢复区”,全选,点:“彻底删除文件”和“可

疑启动项”!

3再点开“系统修复”,“全选”,再“立即修复”文件!(关键一步)

4再点开:“dll文件恢复”,扫描一下,如果没有就行了,如果有丢失,添

加恢复,手动添加,立即恢复!

5点开:“网络修复”,点:“开始修复”,重启电脑!(关键一步)

2。用“360安全卫士”里“系统修复”,点击“使用360安全网址导航”,“一

键修复”!(关键一步)

3。用“360安全卫士”的“扫描插件”,然后再“清理插件”,把它删除!

4。再用“360杀毒双引擎版”,勾选“自动处理扫描出的病毒威胁”,用“全盘

扫描”和“自定义扫描”,扫出病毒木马,再点删除!

重启电脑后,来到“隔离区”,点“彻底删除”!

5。使用360安全卫士的“木马查杀”,全盘扫描,完毕再“自定义扫描”!

扫出木马或恶意病毒程序,就点删除!

重启电脑后,来到“文件恢复区”,点“彻底删除”!

6。如果还是不行,试试:“金山急救箱”的扩展扫描和“金山网盾”,一键修

复!或者:可牛免费杀毒,浏览器医生,浏览器修复,立即扫描,立即修复!

7。再不行,重启电脑,开机后,按F8,回车,回车,进到“安全模式”里,

“高级启动选项”里,“最后一次正确配置”,按下去试试,看看效果!

8。实在不行,做“一键还原”系统!(

#include "StdAfxh"

#include "\puiddiskh"

#define _WIN32_DCOM

#include <iostream>

using namespace std;

#include <comdefh>

#include <Wbemidlh># pragma comment(lib, "wbemuuidlib")

CpuIDDisk::CpuIDDisk(void)

{

GetInfomation();

}CpuIDDisk::~CpuIDDisk(void)

{

}

int CpuIDDisk::GetInfomation(void)

{

HRESULT hres;

//步骤1:不是必须的,COM只须也只能初始化一次

hres = CoInitializeEx(0, COINIT_MULTITHREADED );

if (FAILED(hres))

{

return 1; //初始化COM异常:注意,COM只须也只能初始化一次

}

//步骤2:不是必须的,COM只须也只能设置一次

//Set general COM security levels

hres = CoInitializeSecurity(

NULL,

-1, // COM authentication

NULL, // Authentication services

NULL, // Reserved

RPC_C_AUTHN_LEVEL_DEFAULT, // Default authentication

RPC_C_IMP_LEVEL_IMPERSONATE, // Default Impersonation

NULL, // Authentication info

EOAC_NONE, // Additional capabilities

NULL // Reserved

);

if (FAILED(hres))

{

CoUninitialize();

return 1; // Program has failed

}

//以上不是必须的,若已有“::COMInit();”,则要跳过

//步骤3: Obtain the initial locator to WMI

IWbemLocator pLoc = NULL;

hres = CoCreateInstance(

CLSID_WbemLocator,

0,

CLSCTX_INPROC_SERVER,

IID_IWbemLocator, (LPVOID ) &pLoc);

if (FAILED(hres))

{

CoUninitialize();

return 1;//Failed to create IWbemLocator object

} //步骤4:Connect to WMI through the IWbemLocator::ConnectServer method

IWbemServices pSvc = NULL;

hres = pLoc->ConnectServer(

_bstr_t(L"ROOT\\CIMV2"), // Object path of WMI namespace

NULL, // User name NULL = current user

NULL, // User password NULL = current

0, // Locale NULL indicates current

NULL, // Security flags

0, // Authority (eg Kerberos)

0, // Context object

&pSvc // pointer to IWbemServices proxy

);

if (FAILED(hres))

{

pLoc->Release();

CoUninitialize();

return 1; // Program has failed

}

// 步骤5: Set security levels on the proxy

hres = CoSetProxyBlanket(

pSvc, // Indicates the proxy to set

RPC_C_AUTHN_WINNT, // RPC_C_AUTHN_xxx

RPC_C_AUTHZ_NONE, // RPC_C_AUTHZ_xxx

NULL, // Server principal name

RPC_C_AUTHN_LEVEL_CALL, // RPC_C_AUTHN_LEVEL_xxx

RPC_C_IMP_LEVEL_IMPERSONATE, // RPC_C_IMP_LEVEL_xxx

NULL, // client identity

EOAC_NONE // proxy capabilities

); if (FAILED(hres))

{

pSvc->Release();

pLoc->Release();

CoUninitialize();

return 1;

} // 步骤6:Use the IWbemServices pointer to make requests of WMI ----

IEnumWbemClassObject pEnumerator = NULL;

//计算CPUID

hres = pSvc->ExecQuery(

bstr_t("WQL"),

bstr_t("SELECT FROM Win32_Processor"),//Win32_OperatingSystem

WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,

NULL,

&pEnumerator);

if (FAILED(hres))

{

pSvc->Release();

pLoc->Release();

CoUninitialize();

return 1;

}

// 步骤7:Get the data from the query

IWbemClassObject pclsObj;

ULONG uReturn = 0;

while (pEnumerator)

{

HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1,

&pclsObj, &uReturn); if(0 == uReturn)

{

break;

}

VARIANT vtProp;

VariantInit(&vtProp);

hr = pclsObj->Get(L"ProcessorId", 0, &vtProp, 0, 0);

strProcessID=_com_util::ConvertBSTRToString(vtPropbstrVal);//strProcessID:类级变量

} //计算硬盘系列号

hres = pSvc->ExecQuery(

bstr_t("WQL"),

bstr_t("SELECT FROM Win32_DiskDrive"),

WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,

NULL,

&pEnumerator); if (FAILED(hres))

{

pSvc->Release();

pLoc->Release();

CoUninitialize();

return 1;

}

while (pEnumerator)

{

HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1,

&pclsObj, &uReturn); if(0 == uReturn)

{

break;

} VARIANT vtProp;

VariantInit(&vtProp);

hr = pclsObj->Get(L"PNPDeviceID", 0, &vtProp, 0, 0);

strDisk=_com_util::ConvertBSTRToString(vtPropbstrVal);

} pSvc->Release();

pLoc->Release();

pEnumerator->Release();

pclsObj->Release();

CoUninitialize(); return 0;

尊敬的用户您好,从P III以后CPU不支持序列号了,可以读取CPU名字之类的。

一般用WMI读就行,硬盘的话,也可以直接读取SMART。

写过一个,留下邮箱,给你发过去。

希望可以帮到您

  Dim MemoyCounter As New ComputerInfo()

   Dim CPUCounter As New PerformanceCounter("Processor", "% Processor Time", "_Total")

   Private Sub Timer1_Tick(ByVal sender As SystemObject, ByVal e As SystemEventArgs) Handles Timer1Tick

    Dim CPU As Double = CPUCounterNextValue

    Dim neicun As Double = (MemoyCounterTotalPhysicalMemory - MemoyCounterAvailablePhysicalMemory) / MemoyCounterTotalPhysicalMemory  100%

获取CPU及物理内存使用率

以上就是关于c# 我想用WMI 来读取远程的(同一个局域网的)机器的cpu ID,主板ID,硬盘ID等,可以实现么全部的内容,包括:c# 我想用WMI 来读取远程的(同一个局域网的)机器的cpu ID,主板ID,硬盘ID等,可以实现么、怎么用nodejs代码实现获取cpuID和主板ID、如何获取多核,多cpu系统中指定cpu的序列号等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9285662.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-26
下一篇2023-04-26

发表评论

登录后才能评论

评论列表(0条)

    保存