格式化网速

在显示网速的时候,我们可以用任务栏鼠标移动到图标上显示内容,比如上传下载网速,温度,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是开源的,所以搜索一下就能找到,就不在此提供了!