我有一个关于RAM信息的问题-如何获得其名称?
到目前为止,从Win32_PhysicalMemory
和Win32_PhysicalMemoryArray
类中,我能够获得除了名称(显示名称;例如CRUCIAL BALLISTIX运动版(浅红色)
我编写代码的平台是.NET WinForms - C#。
我查看的参考资料
- https://learn.microsoft.com/en-us/windows/win32/cimwin32prov/win32-physicalmemoryarray
- https://learn.microsoft.com/en-us/windows/win32/cimwin32prov/win32-physicalmemory
我的问题是:如何获得RAM名称?
下面是我用来检索RAM名称和/或制造商的一段代码。
ManagementObjectSearcher myRamObject = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMemory");
foreach(ManagementObject obj in myRamObject.Get())
{
RAM.NAME = obj["Name"].ToString();
}
1条答案
按热度按时间nfs0ujit1#
以下说明如何查找计算机内存信息,包括制造商信息。
获取计算机制造商:(PowerShell)
打开
PowerShell
窗口并键入以下内容:获取计算机制造商:(指令)
打开
cmd
窗口并键入以下内容:C#:
创建类(名称:内存信息(Wmi)
内存信息窗口:
获取内存:
有时,制造商的名称显示为一个或多个十六进制数字(没有空格)。
如果发生这种情况,需要参考Standard Manufacturer's Identification Code (JEP106)出版物以查找相关信息。文档名称为
JEP106<revision number>
(例如:JEP 106 BE)-该清单定期修订。值可以采用以下格式:
两个十六进制值:第一个十六进制值是连续数,第二个十六进制值是(从1开始的)条目/索引号。(如果有5个连续数,则意味着所需的值在第6个存储体/组中)。
例如:
859B
注意:
859B
的值实际上是两个十六进制数字:85
和9B
中的一个或多个。我相信还有第二种使用的格式,其中每个连续使用
7F
列出。最后一个十六进制值将是所需的值。例如:
7F7F7F7F7F9B
在文档中,数据以一系列组(库)的形式列出,值从1到126。一个组可以少于126个条目,但不能多于126个条目。本质上,它是一个列表的列表。
在查看文档时,您会注意到值
1, 2, 3, 4, 5...
,以及列出的十六进制值。但是,您也会注意到十六进制值似乎与十进制值不对应。十进制的1, 2, 3, 4, 5
也应该是十六进制的1, 2, 3, 4, 5
。为什么值不同?根据文档,十六进制值使用7个数据位和1个奇偶校验位(奇校验)。
让我们看一下第5个条目的样子。条目编号使用从1开始的索引,所以人们会认为该值是
5
。但是,由于奇偶校验位,该值显示为85
。在Windows中打开计算器,选择“Programmer”。然后点击“Hex”。然后键入“85”。您将注意到以下内容:
请注意,第8位是“1”。如果我们查看第0-7位,我们有
000 0101
。在计算器中,如果我们单击“BIN”并输入此数字,我们将看到以下内容:如前所述,第8位是校验位。获取位0-7的一种方法是将第8位替换为“0”,然后读取整个8位。我们如何做到这一点?
我们需要利用逻辑规则,让我们看一些真值表。
**给定:**False = 0;真值= 1
我们用重复创造所有可能的排列。
在C#中,我们可以使用
&
来进行AND
逻辑运算。同样,|
也可以用于OR
逻辑运算。为了将其付诸实践,让我们从测试十六进制值开始:
85
.我们需要确定逻辑
AND
可以使用什么值来将第8位更改为0
。位序为[8][7][6][5][4][3][2][1]
(小端)确定字节顺序:(PowerShell)
当使用奇校验时,以下代码将把校验位更改为0。
获取无奇偶校验的值:
如果某个值没有奇偶校验,则可以通过执行以下操作在添加奇偶校验位后获得该值:
获取带奇偶校验的值:
注意:此方法的代码来自here.
现在,我们可以将十六进制值解码为没有奇偶校验的值。在删除
85
的奇偶校验位后,我们确定没有奇偶校验的值为5
。如前所述,第一个十六进制值是连续数,第二个十六进制值是(从1开始)条目/索引号。(如果有5个连续,则意味着所需值在第6个存储体/组中)。在解码第二个值之后,我们发现(从1开始的)索引/条目是
27
在继续之前,让我们创建一些类来存储数据。我决定将数据存储为JSON。如果愿意,可以使用XML。
下载/安装NuGet软件包:
Newtonsoft.Json
创建类:(名称:制造商)
创建类:(名称:根对象Json)
将以下using语句添加到类中:
ToDo:将数据加载到类中。此repository可能有用。
注意:使用下面的代码时,需要对齐数据,以便所需的数据从索引1开始。一种简单的方法是在索引0中添加填充数据(不会使用的数据)。
示例:
以下表示索引0中的数据项。不会使用此数据,但用于使数据看起来像是使用基于1的索引。
然后给定一个值(例如:
859B
),则可以进行类似于以下的操作来检索所需数据。注意:如果您不想使用“填充数据”(将未使用的数据放在索引0中),请使用下面的方法更改索引。
解码制造商:
资源: