获取蓝牙设备电量 公开

ilcpm 更新于 2023-04-05 07:16 | 0 | (0) | 15
分类
点赞
暂无
更多信息
分享人 ilcpm
分享时间 2023-04-05 07:16
最后更新 2023-04-05 07:16
修订版本 0
子程序大小 2.5 KB
Quicker版本 1.37.23.0

介绍

通过PowerShell代码获取所有蓝牙设备的电量

使用效果

经过测试,该功能能返回包括触控笔,蓝牙鼠标,蓝牙键盘,蓝牙耳机在内的我的所有4种类型蓝牙设备的电量

运行后返回3个列表,按顺序读取每个列表里面的相同下标即可得到单一设备的信息

quicker动作见蓝牙设备电量 - 动作信息 - Quicker

技术细节

经过测试,只有下面两个条件能够输出带有电量设备
Get-PnpDevice -Class 'System' -InstanceId 'BTHENUM\*'
Get-PnpDevice -Class 'Bluetooth' -InstanceId 'BTHLE\*'

合起来使用下面的代码筛选能够输出电量的蓝牙设备:
Get-PnpDevice | Where-Object {($_.Class -EQ 'Bluetooth' -and $_.InstanceId -Like 'BTHLE\*') -or ($_.Class -EQ 'System' -and $_.InstanceId -Like 'BTHENUM\*')}

配合上获取电量的代码,完整的输出所有设备的电量的一句话代码是:
Get-PnpDevice | Where-Object {($_.Class -EQ 'Bluetooth' -and $_.InstanceId -Like 'BTHLE\*') -or ($_.Class -EQ 'System' -and $_.InstanceId -Like 'BTHENUM\*')} | Get-PnpDeviceProperty -KeyName '{104EA319-6EE2-4701-BD47-8DDBF425BBE5} 2' | Where-Object Type -ne Empty
最后的where用来过滤没有电量的设备。但是这个代码里没有FriendlyName,所以不好识别设备


使用下面的代码把所有设备和电量信息放入哈希表$hash变量,并转换为json输出,使用quicker接收输出并转换即可
$devices = Get-PnpDevice | Where-Object {($_.Class -EQ 'Bluetooth' -and $_.InstanceId -Like 'BTHLE\*') -or ($_.Class -EQ 'System' -and $_.InstanceId -Like 'BTHENUM\*')}
$res = $devices | Get-PnpDeviceProperty -KeyName '{104EA319-6EE2-4701-BD47-8DDBF425BBE5} 2' | Where-Object Type -ne Empty
$hash = @{FriendlyName = @(); InstanceId = @(); Battery = @()}
$res | ForEach-Object {
$hash["FriendlyName"] += ($devices | Where-Object InstanceId -EQ $_.InstanceId).FriendlyName;
$hash["InstanceId"] += $_.InstanceId;
$hash["Battery"] += $_.Data;
}
$hash | ConvertTo-Json
代码使用了PowerShell自己的多线程运行方式,效率只能做到这种程度了,需要几秒钟才能运行完毕,没办法实时输出


存在的问题

高通芯片的蓝牙耳机名称会有后缀`Hands-Free AG`,例如`QCOM-TL-5141 Hands-Free AG`,所以不能用这里得到的名字来连接蓝牙,除非手动去掉这个后缀


附:通过PowerShell调用系统蓝牙API断开设备连接的代码 https://stackoverflow.com/a/64085710
不会用Windows的API,而且蓝牙连接的功能很复杂,不会,所以没办法改成用PowerShell来连接蓝牙设备

子程序的参数

输入
输出
InstanceId 设备ID List
FriendlyName 设备名称 List
Battery 电量百分比(字符串) List

最近更新

修订版本 更新时间 更新说明
0 2023-04-05 07:16

最近讨论

暂无讨论