aardio调用.net组件-LibreHardwareMonitorLib.dll
格式化网速
在显示网速的时候,我们可以用任务栏鼠标移动到图标上显示内容,比如上传下载网速,温度,CPU使用率,内存使用率等等.
LibreHardwareMonitorLib比起OpenHardwareMonitorLib,功能要强很多,更建议使用这个组件.
aardio语言,我们定义一个网速显示,如果1M以下显示KB/s,大于这个速度显示MB/s
function seep(size){
if(size < 1024 * 1000){//1000kb以下
v= string.format("%.2f KB/s",size / 1024.0)
}else if(size < 1024 * 1024 * 1000){//1000MB以下
v= string.format("%.2f MB/s",size / 1024.0 / 1024.0)
}
return v;
}
格式化数据类型
aardio可以用table类型定义数据格式化
hardwareType = {
[0] = "Motherboard";
[1] = "SuperIO";
[2] = "Cpu";
[3] = "Memory";
[4] = "GpuNvidia";
[5] = "GpuAmd";
[6] = "GpuIntel";
[7] = "Storage";
[8] = "Network";
[9] = "Cooler";
[10] = "EmbeddedController";
[11] = "Psu";
[12] = "Battery";
}
sensorType = {
[0] = "电压", // V
[1] = "现在";
[2] = "功耗", // W
[3] = "时钟", //MHZ
[4] = "温度", //C
[5] = "负载", // %
[6] = "频率", //
[7] = "风扇转速", // rpm
[8] = "流", // L/h
[9] = "控制", // %
[10] = "等级", // %
[11] = "因素", // 1
[12] = "数据", //GB
[13] = "低数据", //MB
[14]="网速",//MB/s
[15]="时间线",
[16]="电量",
[17]="噪音",
}
sensorFormat = {
[0] = lambda(v) ..string.format("%.3f V", v);
[1] = lambda(v) ..string.format("%.1f MHz", v);
[2] = lambda(v) ..string.format("%.1f W", v);
[3] = lambda(v) ..string.format("%.1f MHz", v);
[4] = lambda(v) ..string.format("%.1f °C", v);
[5] = lambda(v) ..string.format("%.1f %%", v);
[6] = lambda(v) ..string.format("%.1f MHz", v);
[7] = lambda(v) ..string.format("%d RPM", v); // RPM
[8] = lambda(v) ..string.format("%.1f L/h", v);
[9] = lambda(v) ..string.format("%.1f %%", v);
[10] = lambda(v) ..string.format("%.1f %%", v);
[11] = lambda(v) ..string.format("%d", v); //因素
[12] = lambda(v) ..string.format("%.2f GB", v);
[13] = lambda(v) ..string.format("%.2f MB", v);
[14] = lambda(v) ..seep(v);
[15] = lambda(v) ..string.format("%d", v);
[16] = lambda(v) ..string.format("%d", v);
[17] = lambda(v) ..string.format("%d", v);
}
调用数据
我们需要两个dll,LibreHardwareMonitorLib依赖HidSharp.dll,所以两个都要放到res目录下,为了编译exe不带这两个dll,我们还需要加载时候也加载HidSharp.dll.具体实现如下
import dotNet;
dotNet.reference({
"HidSharp"="/res/HidSharp.dll";
})
dotNet.loadFile("/res/LibreHardwareMonitorLib.dll").import("LibreHardwareMonitor");
var c = ..LibreHardwareMonitor.Hardware.Computer();
c.IsBatteryEnabled = true;
c.IsControllerEnabled = true;
c.IsCpuEnabled = true;
c.IsGpuEnabled = true;
c.IsMemoryEnabled = true;
c.IsMotherboardEnabled = true;
c.IsNetworkEnabled = true;
c.IsPsuEnabled = true;
c.IsStorageEnabled = true;
c.Open();
var hardware = c.Hardware;
import win.taskScheduler;
var taskScheduler = win.taskScheduler( mainForm );//创建计划任务
var task1 = taskScheduler.create("每1秒更换一次",function(){
var tb = {};
for(i=1;hardware.Count;1){
hardware[i].Update()
for(j=1;hardware[i].Sensors.Length;1){
var sensor =hardware[i].Sensors[j]
var sensors = sensorFormat[sensor.SensorType];
if(i==2){
if(sensor.Name=="CPU Total"){
tb["CPU总使用率"] =sensors(sensor.Value:0);
}
if(sensor.Name=="Core Average"){
tb["平均温度"] =sensors(sensor.Value:0);
}
if(sensor.Name=="CPU Package"){
tb["CPU功率"] =sensors(sensor.Value:0);
}
if(sensor.Name=="CPU Core"){
tb["CPU电压"] =sensors(sensor.Value:0);
}
}
if(i==3){
if(sensor.Name=="Memory"){
tb["内存使用率"] =sensors(sensor.Value:0);
}
if(sensor.Name=="Virtual Memory"){
tb["虚拟内存使用率"] =sensors(sensor.Value:0);
}
if(sensor.Name=="Memory Used"){
tb["内存已使用"] =sensors(sensor.Value:0);
}
if(sensor.Name=="Memory Available"){
tb["内存未使用"] =sensors(sensor.Value:0);
}
}
if(i==5){
if(sensor.Name=="Temperature"){
tb["硬盘温度"] =sensors(sensor.Value:0);
}
if(sensor.Name=="Used Space"){
tb["硬盘已使用"] =sensors(sensor.Value:0);
}
if(sensor.Name=="Data Written"){
tb["硬盘写数据量"] =sensors(sensor.Value:0);
}
if(sensor.Name=="Data Read"){
tb["硬盘读数据量"] =sensors(sensor.Value:0);
}
}
if(hardware[i].Name=="WLAN"){
if(sensor.Name=="Upload Speed"){
tb["上传速度"] =sensors(sensor.Value:0);
}
if(sensor.Name=="Download Speed"){
tb["下载速度"] =sensors(sensor.Value:0);
}
}
}
}
mainForm.tray.tip = "上传:"++ tb["上传速度"]++" 下载:"++tb["下载速度"]
++"
CPU:"++tb["CPU总使用率"]++" 内存:"++tb["内存使用率"]++" CPU温度:"++tb["平均温度"]++"
硬盘温度:"++tb["硬盘温度"]++" 内存:"++tb["内存已使用"]++"/"++tb["内存未使用"];
} )
task1.interval = {
second = 1;
}
taskScheduler.start();
更多细节
调用dll可以显示平均值,最大值,最小值,这里只显示调用了平均值.只需要Value换成Max/Min就能调用对应的值.
aardio语言调用其他语言非常方便,特别是.net写的dll库,官方有很多例子.可以很容易实现截图功能,定时换壁纸,
甚至做一个php集成环境也很容易.
LibreHardwareMonitorLib.dll在github是开源的,所以搜索一下就能找到,就不在此提供了!
- 原文作者:Yoby
- 原文链接:/2023/08/29/2023082902.html
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),关于内容请通过关于我方式联系作者!