camusice 发表于 2018-9-6 20:09:15

关于4.2版本中新插件:UsageMonitor的使用方法

本帖最后由 camusice 于 2020-2-11 22:25 编辑

须知:本教程应算是中级教程。需要了解一定的数据结构。对于刚接触雨滴的人我的建议是不要落下任何一句话的看。教程前半部分介绍了大量铺垫知识,不建议跳过。此外,本教程内容全部是根据官网文档个人理解所制作,没有与任何人探讨,若有错误和不足请指正。欢迎下方提问和探讨。
在更新到 Rainmeter 4.2 之后,本人一直在研究里边的新功能。其中就包括增加的一个新插件——UsageMonitor.dll。按照官方使用手册的说法,其用于与 Windows 性能监视器进行交互,并且官方希望皮肤制作者用其替代原来的 AdvancedCPU.dll 和 PerfMon.dll 插件的功能来升级皮肤。
在以前,AdvancedCPU插件用于测量进程的CPU使用率,比如获取当前占用CPU最高的进程名与使用率等;而PerfMon之前就是用于从Windows 性能监视器中获取数据的插件,可以说是UsageMonitor插件的旧版本,可用于获取比如内存,磁盘使用情况等。而最新的UsageMonitor插件可以从性能监视器中获取任何信息,除了前面两个插件提到的功能外,还有比如网络流量,总线情况,设备信息,系统信息,如果你使用的系统是Win10 1709版本以上,甚至不需要第三方插件还能监测GPU的使用情况,显存的使用情况。可以说只要是性能监视器中包含的内容,使用正确相关语法都能获取。此外,相比于PerfMon插件,新插件增加了更多功能,比如设置黑、白名单,简化了计数器的使用方式,效率提高等等。想要使用好这个听上去很厉害的插件,你需要先知道什么是Windows 性能监视器。这是很重要的事情,只有先了解了Windows 性能监视器的工作方式才能了解UsageMonitor的工作方式,而不了解的话你甚至连这个插件的使用教程都看不懂,哪怕翻译成中文版!本教程不会介绍性能监视器里的每个计数器都是测量什么的,只会介绍其文件结构方便使用插件。想知道自己需要测量的系统信息怎么寻找请自行百度。
那么言归正传,Windows 性能监视器是Windows系统用于监视各种不同类别的系统指标,并跟踪指示其使用情况的一个系统内置应用。你肯定知道任务管理器是什么东西,有些细心的同学还见过资源监视器(注意两个字的差别,资源监视器和性能监视器不是一个东西。)是什么,如下图。不过,这两个程序被红色框圈起来的部分,全部来自Windows性能监视器。

任务管理器
资源监视器
那Windows性能监视器在哪里?按键盘上的Win+R调出运行对话框,直接输入Perfmon.exe就能打开性能监视器了。如图展示。
性能监视器
上图展示的是性能监视器刚打开的样子,其下边展示了一些系统摘要,不同计算机显示的可能不同。图中展示的是这台计算机的内存,网络,磁盘和CPU各线程的使用情况。现在我想看其他的信息怎么办呢?点击左边控制台里边的监视工具里边的性能监视器模块,可以得到下边的结果:
性能监视器
你可以使用更改图形类型来切换显示模式。一共有线条,直方图条和报告三种显示模式。为方便后边讲解,接下来均使用报告模式。
性能监视器报告模式
重点来了:点击工具条上的添加模块,就能打开添加计数器页面,内部囊括了Windows性能监视器的所有计数器及其类别。下面这张图的文字部分务必仔细体会:

点击确定后,就能看到其中的内容添加到主界面上了:

当然,我们也可以在之前添加计数器那里选择<全部实例>,就能看到每个程序占用资源的情况了,需要注意的是:虽然上图展示的实例全是进程名,但是这是在特定的一些计数器中是这样的。实例不等于进程名!不同的计数器中实例种类是不一样的!例如如果计数器是测量磁盘的使用量的,实例可能就是磁盘序号,类似C:,D:;如果计数器是测量每个CPU核心的使用量,实例又变成了0,1,2,3......;如果计数器测量的是每张网卡的流量,实例就是你的网卡型号名称。这么说能明白吗?
看完看了上面的内容,你应该知道了下面这三个概念:计数器,计数器的类别,计数器的实例。都清楚了,你就能开始学习使用UsageMonitor这个插件了。下面正式介绍UsageMonitor使用方法:
===========================分割线===========================
选项
通用Measure选项
所有的通用Measure选项都是可用的。
Category      默认值:无所需计数器的类别名称。需要区分大小写且必须是性能监视器里含有的名称。注意:如果定义了Category,则还必须同时定义Counter。例: Category=Process,Category=PhysicalDisk
Counter      默认值:无计数器名称。需要区分大小写且必须是性能监视器里含有的名称。注意:如果定义了Counter,则还必须同时定义Category。例: Counter=%Processor Time,Counter=Bytes Read/sec
Alias      默认值:无本选项提供一些可能最常用的计数器别名,其本质上就是内置在插件里的一些Category和Counter选项的组合。注意:如果定义了Alias就无需定义Category和Counter了;而如果定义了Category和Counter,本选项就会被忽略。当然,为简化皮肤文件,建议优先使用本选项。目前支持的别名以及其代表的计数器内容是:Alias = CPU
等同于:Category = Process | Counter = % Processor Time
表示进程的CPU使用百分率。Alias = RAM
等同于:Category = Process | Counter = Working Set - Private
表示进程的专用内存占用大小,单位字节。Alias = RAMSHARED
等同于:Category = Process | Counter = Working Set
表示进程的共享内存占用大小,单位字节。(译者注:共享内存不是虚拟内存哈!)Alias = IO
等同于:Category = Process | Counter = IO Data Bytes/sec
表示进程在磁盘上的总读写速度,单位字节/秒。Alias = IOREAD
等同于:Category = Process | Counter = IO Read Bytes/sec
表示进程在磁盘上的读取速度,单位字节/秒。Alias = IOWRITE
等同于:Category = Process | Counter = IO Write Bytes/sec
表示进程在磁盘上的写入速度,单位字节/秒。Alias = GPU
等同于:Category = GPU Engine | Counter = Utilization Percentage
表示进程的GPU使用百分率。
注意:需要Windows 10 1709或更高版本。Alias = VRAM
等同于:Category = GPU Process Memory | Counter = Dedicated Usage表示进程的GPU专属内存,即显存的占用大小,单位字节。
注意:需要Windows 10 1709或更高版本。Alias = VRAMSHARED
等同于:Category = GPU Process Memory | Counter = Shared Usage
表示进程的GPU共享内存,即用作显存的内存的占用大小,单位字节。
注意:需要Windows 10 1709或更高版本。
Index      默认值: 0计数器包含的所有实例将会从最高值到最低值进行汇总和排序。Index会根据此排序返回每个实例的单个数值、总和或者平均值。Index=0
返回所有实例的数值总和,以及字符串“Total”。这是Index的默认值。Index=-1
返回所有实例的数值平均值,以及字符串“Average”。Index=1,Index=2等等。
返回排序中相应的实例的数值,以及该实例名称的字符串值。注意:实例的排序是动态的,实例顺序会发生变化。无论Index定义为何值,如果返回的当前数值结果是 0 的话,字符串会变为空字符串。没有数值的实例不参加排序,也不会存在于此排序列表中,因为插件无法区分开它和其他数值为0的实例的区别。另外,黑名单中的实例也会参加排序。
Name      默认值:无指定特定实例名称。需要区分大小写且必须是性能监视器里含有的名称。注意:如果定义了Name,则忽略任何Index选项。例: Name=Rainmeter,Name=chrome,Name=C:
Blacklist      默认值: _Total|Idle实例黑名单列表。使插件不获取该表中的实例数值。实例名称用 | 字符分隔。需要区分大小写且必须是性能监视器里含有的名称。注意:在默认情况下黑名单中包含实例名称_Total,和Idle。如果要定义其他名称,请别忘了将这两个名字添加上,因为设置黑名单是替换默认值的行为,不是补充。例: Blacklist=_Total|Idle|dwm|csrss|svchost|lsass|system|spoolsv
Whitelist      默认值:无实例白名单列表。使插件只获取该表中的实例数值而忽略其他的实例。实例名称用 | 字符分隔。需要区分大小写且必须是性能监视器里含有的名称。注意:如果定义了白名单,则忽略任何黑名单选项。例: Whitelist=Rainmeter|firefox|hexchat
Rollup      默认值: 1有些程序的进程会有多个副本。这个现象对于浏览器类应用程序打开多个网页以及一些Windows内部进程(如explorer,RunTimeBroker或svchost)来说是很常见的。当Rollup设置为默认值1时,会将这些副本汇总到单个进程中一起统计。如果设置为0,则插件对此程序的每个单独的进程分别进行统计:processName#1,processName#2
Percent      默认值: 0如果你想要获取一个百分数形式的_Total实例但计数器返回的不是百分比数值,就可以将Percent设置为 1。如果计数器没有_Total实例,或者返回值已经是百分数形式了,则它将失效且不应该设置为 1。注意:当Alias=CPU被使用时,Percent的默认值会自动变为 1。不过如果需要的话你也可以强制手动设置为 0。
RawValue    默认值: 0设置1为时,这将从性能监视器的数据库中返回原始值,而不是性能监视器中显示的我们能看懂的格式。
PIDToName    默认值: 0设置1为时,将查找并返回与实例PID字符串值关联的进程名称。注意:当Alias=GPU,Alias=VRAM或Alias=VRAMSHARED被使用时,PIDToName的默认值会自动变为 1,返回的是进程的GPU相关使用情况。不过如果需要的话你也可以强制手动设置为0,返回的是每个GPU引擎的使用情况。不过其字符串值因为与内存地址有关,可能每次开机都会变更。

关于数值与字符串值的注释
UsageMonitor插件返回的是实例的当前数值以及实例名称的字符串值。这意味着你使用String meter时需要注意了,其MeasureName选项默认获取的是字符串值。如果你想要展示的是数值,可以在Text选项中使用以显示数字值,且务必同时设置DynamicVariables=1。而且使用此方法,NumOfDecimals或AutoScale这类设置数值的选项无效。如果想要使用NumOfDecimals的功能限制小数点位数,可以直接定义:将显示带有两位小数的数值。
另一种方案是建立一个Calc Measure来获取UsageMonitor插件的数值。这样NumOfDecimals或AutoScale这类设置数值的选项就都能使用了。
关于出现错误
虽然这种情况很少,但有可能会发生,即:Windows性能监视器的计数器数据库可能会受不可控因素被损坏。这将导致UsageMonitor插件停止正常运行。在这种情况下,可以通过Windows自带的命令行“重建”数据库来解决此问题。以管理员身份运行cmd.exe,按顺序输入以下命令:cd C:\Windows\System32
lodctr /R
cd C:\Windows\SysWOW64
lodctr /R如果看到以下结果即为成功。Info: Successfully rebuilt performance counter setting from system backup store
示例
因为单个帖子字数限制,请见下方置顶。

camusice 发表于 2018-9-20 11:38:39


Update=1000
DynamicWindowSize=1
AccurateText=1
SkinWidth=360
BackgroundMode=2
SolidColor=0,0,0,1


Browser=firefox
;Browser=chrome


Measure=Plugin
Plugin=UsageMonitor
Alias=CPU
Index=0


Measure=Plugin
Plugin=UsageMonitor
Alias=CPU
Index=1
Whitelist=Rainmeter|#Browser#|hexchat|CCleaner64


Measure=Plugin
Plugin=UsageMonitor
Alias=CPU
Index=1
Blacklist=_Total|Idle|dwm|wmpnetwk|csrss|svchost|lsass|System|system|Memory Compression|wininit|RemindersServer|spoolsv|IpOverUsbSvc


Measure=Plugin
Plugin=UsageMonitor
Category=Process
Counter=% Processor Time
Index=1
Percent=1
Blacklist=_Total|Idle|dwm|wmpnetwk|csrss|svchost|lsass|System|system|Memory Compression|wininit|RemindersServer|spoolsv|IpOverUsbSvc


Measure=Plugin
Plugin=UsageMonitor
Alias=CPU
Name=Rainmeter


Measure=Plugin
Plugin=UsageMonitor
Alias=CPU
Name=#Browser#


Measure=Plugin
Plugin=UsageMonitor
Category=System
Counter=Threads
Index=0


Measure=Plugin
Plugin=UsageMonitor
Category=Processor
Counter=% Processor Time
Name=0
MinValue=0
MaxValue=100


Measure=Plugin
Plugin=UsageMonitor
Category=Processor
Counter=% Processor Time
Name=1
MinValue=0
MaxValue=100


Measure=Plugin
Plugin=UsageMonitor
Alias=GPU
Index=1
MinValue=0
MaxValue=100
Blacklist=dwm|csrss


Measure=Plugin
Plugin=UsageMonitor
Alias=VRAM
Index=0
MinValue=0
MaxValue=4831838208


Measure=Calc
Formula=TotalVRAM


Measure=Plugin
Plugin=UsageMonitor
Alias=IO
Name=Rainmeter


Measure=Calc
Formula=RainmeterIO


Measure=Plugin
Plugin=UsageMonitor
Alias=IO
Index=1


Measure=Calc
Formula=TopIORead


Measure=Plugin
Plugin=UsageMonitor
Alias=IOWrite
Name=#Browser#


Measure=Calc
Formula=BrowserIOWrite


Measure=Plugin
Plugin=UsageMonitor
Alias=RAM
Name=#Browser#


Measure=Calc
Formula=BrowserRAM


Measure=Plugin
Plugin=UsageMonitor
Category=Network Adapter
Counter=Bytes Received/sec
Index=1


Measure=Calc
Formula=NetworkIn
IfAboveValue=0
IfAboveAction=[!SetOption MeterNetworkName Text ""][!UpdateMeter *][!Redraw]


Measure=Plugin
Plugin=UsageMonitor
Category=Network Adapter
Counter=Bytes Sent/sec
Index=1


Measure=Calc
Formula=NetworkOut
IfAboveValue=0
IfAboveAction=[!SetOption MeterNetworkName Text ""][!UpdateMeter *][!Redraw]

; Meters


FontSize=11
FontWeight=400
FontColor=255,255,255,255
AntiAlias=1
DynamicVariables=1


X=360
StringAlign=Right


Meter=String
MeterStyle=AllStyle
Text=Total CPU Usage


Meter=String
MeterStyle=AllStyle | RightStyle
Text= : %


Meter=String
MeterStyle=AllStyle
Y=3R
Text=Top MyApps


Meter=String
MeterStyle=AllStyle | RightStyle
Y=0r
Text= : %


Meter=String
MeterStyle=AllStyle
Y=3R
Text=Top Process by Alias


Meter=String
MeterStyle=AllStyle | RightStyle
Y=0r
Text= : %


Meter=String
MeterStyle=AllStyle
Y=3R
Text=Top Process by Counter


Meter=String
MeterStyle=AllStyle | RightStyle
Y=0r
Text= : %


Meter=String
MeterStyle=AllStyle
Y=3R
Text=Rainmeter CPU


Meter=String
MeterStyle=AllStyle | RightStyle
Y=0r
Text= : %


Meter=String
MeterStyle=AllStyle
Y=3R
Text=Browser CPU


Meter=String
MeterStyle=AllStyle | RightStyle
Y=0r
Text= : %


Meter=String
MeterStyle=AllStyle
Y=3R
Text=Total Threads


Meter=String
MeterStyle=AllStyle | RightStyle
Y=0r
Text= :


Meter=String
MeterStyle=AllStyle
Y=3R
Text=CPU Core 0 Usage


Meter=String
MeterStyle=AllStyle | RightStyle
Y=0r
Text= : %


Meter=String
MeterStyle=AllStyle
Y=3R
Text=CPU Core 1 Usage


Meter=String
MeterStyle=AllStyle | RightStyle
Y=0r
Text= : %


Meter=String
MeterStyle=AllStyle
Y=3R
Text=Top GPU Usage


Meter=String
MeterStyle=AllStyle | RightStyle
Y=0r
Text= : %


Meter=String
MeterStyle=AllStyle
Y=3R
Text=Total VRAM Usage


Meter=String
MeterStyle=AllStyle | RightStyle
MeasureName=TotalVRAMScaled
Y=0r
AutoScale=1
NumOfDecimals=1
Text= : %1B


Meter=String
MeterStyle=AllStyle
Y=3R
Text=Rainmeter IO


Meter=String
MeterStyle=AllStyle | RightStyle
MeasureName=RainmeterIOScaled
Y=0r
AutoScale=1
NumOfDecimals=1
Text= : %1B


Meter=String
MeterStyle=AllStyle
Y=3R
Text=Top IO Read


Meter=String
MeterStyle=AllStyle | RightStyle
MeasureName=TopIOReadScaled
Y=0r
AutoScale=1
NumOfDecimals=1
Text= : %1B


Meter=String
MeterStyle=AllStyle
Y=3R
Text=Browser IO Write


Meter=String
MeterStyle=AllStyle | RightStyle
MeasureName=BrowserIOWriteScaled
Y=0r
AutoScale=1
NumOfDecimals=1
Text= : %1B


Meter=String
MeterStyle=AllStyle
Y=3R
Text=Browser RAM Usage


Meter=String
MeterStyle=AllStyle | RightStyle
MeasureName=BrowserRAMScaled
Y=0r
AutoScale=1
NumOfDecimals=1
Text= : %1B


Meter=String
MeterStyle=AllStyle
Y=15R
Text=Net IN


Meter=String
MeterStyle=AllStyle | RightStyle
MeasureName=NetworkInScaled
Y=0r
AutoScale=1
NumOfDecimals=1
Text=%1B


Meter=String
MeterStyle=AllStyle
Y=3R
Text=Net OUT


Meter=String
MeterStyle=AllStyle | RightStyle
MeasureName=NetworkOutScaled
Y=0r
AutoScale=1
NumOfDecimals=1
Text=%1B


Meter=String
MeterStyle=AllStyle
Y=3R
ClipString=1

饭团啊哒 发表于 2018-9-7 04:31:56

厉害了我的擦音乐

strawcapter 发表于 2018-9-7 16:34:39

不顶不是人了,厉害的一批

qzlysxj 发表于 2018-9-8 07:47:20

厉害了,感谢教程分享

懒宅银 发表于 2018-9-13 11:34:44

不顶不是人了,厉害的一批

WPoeng 发表于 2018-9-21 14:17:33

大神厉害了。感谢分享

1119724970 发表于 2019-3-23 16:28:19

{:10_403:}{:10_403:}

waqq520 发表于 2020-2-19 12:47:47


不顶不是人了,厉害的一批

Ethereal 发表于 2020-8-9 01:38:32

学习了 学习了
页: [1]
查看完整版本: 关于4.2版本中新插件:UsageMonitor的使用方法