如何使用Java或CMD获取PC硬件信息

7

我正在创建一个Java桌面应用程序,用于报告Windows机器(XP、Vista和W7)的性能和统计信息。

使用Java或命令行,如何获取以下信息:

  • 制造商(戴尔、惠普...)
  • 型号号码
  • 处理器类型
  • 处理器大小
  • 系统类型
  • 存储空间
  • RAM总量
  • RAM空闲或已使用

如果我找到更多要列出的信息,提供参考页面将会很好。


2
我可以看到侧边栏中有很多相关的问题。你看过那些了吗? - Vineet Reynolds
@VineetReynolds 我在谷歌和 Stack Overflow 上搜索了很多,但右边有几个我没看过的。 - Dorothy
3个回答

11

大部分信息都可以通过WMI进行查询(很可能是 systeminfo 在底层使用的方式 - 它只是倾向于搜集所有可得到的而不是特定的信息)。

我编写了以下简单的批处理文件。不太确定您所说的处理器大小是什么意思 - 没有软件会进入电脑盒子并测量芯片尺寸,但也许这接近了。您可以在批处理文件末尾执行 set 命令来查看所有创建的环境变量。也许其中一些对您有帮助:

@echo off
setlocal enableextensions enabledelayedexpansion

for /f "delims=" %%l in ('wmic computersystem get Manufacturer^,Model^,SystemType^,TotalPhysicalMemory /format:list') do >nul 2>&1 set "System_%%l"
for /f "delims=" %%l in ('wmic cpu get * /format:list') do >nul 2>&1 set "CPU_%%l"
for /f "delims=" %%l in ('wmic os get FreePhysicalMemory^,TotalVisibleMemorySize /format:list') do >nul 2>&1 set "OS_%%l"
set /a OS_UsedPhysicalMemory=OS_TotalVisibleMemorySize-OS_FreePhysicalMemory

for /f "delims=" %%l in ('wmic volume get DriveLetter^,FreeSpace /format:list') do (
    >nul 2>&1 set "TEMP_%%l"
    if "!TEMP_DriveLetter:~1,1!"==":" if defined TEMP_FreeSpace set StorageSpace_!TEMP_DriveLetter:~0,2!=!TEMP_FreeSpace:~0,-1!&set TEMP_DriveLetter=&set TEMP_FreeSpace=
)

echo Manufacturer: %System_Manufacturer%
echo Model: %System_Model%
echo Processor Type: %PROCESSOR_ARCHITECTURE%
echo Processor Size: %CPU_AddressWidth%
echo System Type: %System_SystemType%
echo Storage Space:
set StorageSpace_
echo RAM total: %OS_TotalVisibleMemorySize% KiB
echo RAM free: %OS_FreePhysicalMemory% KiB
echo RAM used: %OS_UsedPhysicalMemory% KiB

顺便提一下:这是不受地区限制的免费内容,因此应该在任何地方都可以使用(与诸如dir | find "free"之类的内容相反)。 代码可以在我的SVN存储库中找到


6

制造商

systeminfo | find "System Manufacturer"

型号

systeminfo | find "System Model"

处理器类型

echo %PROCESSOR_IDENTIFIER% %PROCESSOR_LEVEL%

处理器大小

systeminfo | find "Processor"

系统类型

systeminfo | find "System type"

存储空间

dir | find "free"

或者

fsutil volume diskfree C:

RAM总量

systeminfo | find "Total Physical Memory"

可用内存或已使用内存

systeminfo | find "Available Physical Memory"

1
Dorothy:你可以缓存systeminfo的输出,这显然会提高一些速度。 - Joey
Deepak:其中许多是与语言环境有关的,或者根本不起作用,这要么是由于大小写问题,要么是由于“find”仅返回单行,例如对于处理器而言这是不够的。 - Joey
1
你应该在Java中使用/FO SCV并解析它(作为外部进程执行)来处理信息。 - bestsss
这个解决方案可能并不适用于所有情况,因为涉及到国际化问题,如果应用程序需要在一个或多个非英语的计算机上运行。 - Vasile Bors

0

我宁愿不使用这个。我难道不能使用与该程序相同的方法来获取我想要的信息吗? - Dorothy
是的 - 显然它使用了远程注册表 API http://support.microsoft.com/kb/315586 - Wudang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接