【问题标题】:How to get PC Hardware information using Java or CMD如何使用 Java 或 CMD 获取 PC 硬件信息
【发布时间】:2011-09-19 14:02:56
【问题描述】:

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

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

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

如果我找到想要列出的更多信息,参考页面会很棒。

【问题讨论】:

  • 我可以在侧边栏看到很多相关的问题。你经历过那些吗?
  • @VineetReynolds 我搜索了 Google 和 Stack Overflow 并浏览了几个。但是右边有一对我没见过。

标签: java windows command-line


【解决方案1】:

来自 sysinternals 的 psinfo 会做你想做的事吗?您可以从您的服务器运行它来查询每台 PC。 http://technet.microsoft.com/en-us/sysinternals/bb897550

【讨论】:

  • 我不想用这个。难道我不能使用这个程序用来获取我想要的信息的相同方法吗?
  • 是的 - 它显然使用了远程注册表 API support.microsoft.com/kb/315586
【解决方案2】:

制造商

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:

总内存

systeminfo | find "Total Physical Memory"

RAM 空闲或已用

systeminfo | find "Available Physical Memory"

【讨论】:

  • Dorothy:你可以缓存systeminfo的输出,很明显,这应该会加快速度。
  • Deepak:其中许多依赖于语言环境或根本不起作用,要么是由于大小写问题,要么是因为 find 仅返回一行,例如处理器不够用。
  • 您应该使用 /FO SCV 并在 java 中解析它(仅作为外部进程执行)并处理信息。
  • 如果应用程序必须在一台或多台非英语计算机上运行,​​由于国际化,此解决方案可能并非在所有情况下都适用。
【解决方案3】:

其中大部分内容应该可以通过 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" 之类的东西相反)。代码可以在in my SVN repository找到。

【讨论】:

    猜你喜欢
    • 2014-12-30
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    • 2010-09-12
    • 2013-04-14
    • 2011-07-08
    • 2011-05-14
    • 1970-01-01
    相关资源
    最近更新 更多