获取 AIDA64 数据

通过 AIDA64 可以获得大量的传感器数据,例如 CPU 频率、温度,显存、内存使用情况等。并且,软件还可以将这些数据输出到兼容的 LCD 或 VFD 屏幕上。对于大部分 DIY 爱好者,这个功能已经足够强大了。不过,如果你试图通过高级语言编程来收集和处理数据,就会遇到困难 ——AIDA64 似乎并没有提供方便的接口。在设置项中苦苦搜寻了一番,笔者只找到了一个基于 HTTP 长连接的网络接口,配置起来还比较复杂。
为了避免重复造轮子,笔者转而前往 GitHub 搜索,发现了一个名为 aida64-to-json 的项目。它的原理非常简单:设置 AIDA64 将传感器数据写入注册表,然后读取注册表中的传感器参数并格式化。
Bingo!这正是一个完美的解决方案,之前居然没有想到。使用方法也很简单,需要进行一些设置:
文件 → 设置 → 外部程序 → 允许将监测数据写入注册表

AIDA64设置

然后就可以读取注册表信息了。aida64-to-json 是基于 Node.js 的,笔者又用 Python 重写了一遍:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import os, winreg

def query():
if os.name != "nt":
pass
db = {}
with winreg.OpenKey(winreg.HKEY_CURRENT_USER, "Software\\FinalWire\\AIDA64\\SensorValues") as key:
for i in range(winreg.QueryInfoKey(key)[1]):
name, data, _type = winreg.EnumValue(key, i)
attr = name.split(".")
if (attr[0] == "Label"):
db[attr[1]] = {}
db[attr[1]]["label"] = data
else:
db[attr[1]]["value"] = data
return db

if __name__ == "__main__":
db = query()
print(db)

此外还有一个可行的方案:利用 AIDA64 的共享内存特性,用 C++ 写一个 Node.js 或者 Python 的插件。其实 Rivatuner 也有共享内存可以用,可惜文档太少,不知从何下手。
笔者随后又到 AIDA64 的社区中搜寻,发现了诸如「如何将传感器数据通过串口输出 Arduino 上」这样的问题,但都没有得到可靠的回复。这样比较下来,读注册表似乎确凿是一个很省事的方案了。