我们如何以编程方式更改无线蓝牙无线电电源管理#
How do we change Wireless Bluetooth Radio Power Management Programmatically C#
我在使用外部蓝牙设备的应用程序时遇到问题。当设备闲置一段时间后 Windows 打开蓝牙无线电的电源。当我取消选中蓝牙收音机的“电源管理”选项卡下时[允许计算机关闭此设备以节省电量。]它起作用了。见图像。
同样需要从 C# 代码实现。这需要从 Win7 开始完成。
我不熟悉 windows c# 的电源管理选项。我在这里有什么选择?我可以使用事件或 WMI class 吗?
我应该可以在我的 WPF 应用 运行 中更改这些设置。并在关闭时恢复它。
您可以使用 C# 中的 WMI 轻松完成此操作。确保添加对 System.Management 的引用(以及 using System.Management; 语句)
//BTHUSB will identify physical bluetooth adapters only, if you want all bluetooth devices use 'WHERE PNPClass='Bluetooth' or specific device 'WHERE Name='Intel(R) Wireless Bluetooth(R)'
ManagementObjectCollection PhysicalBluetoothAdapterResults = new ManagementObjectSearcher("root\CIMV2", "SELECT DeviceID FROM Win32_PnPEntity WHERE Service='BTHUSB'").Get();
foreach(ManagementObject PhysicalBluetoothAdapter in PhysicalBluetoothAdapterResults)
{
string DeviceID = PhysicalBluetoothAdapter.Properties["DeviceID"].Value.ToString().Replace("\","\\");
ManagementObjectCollection AdapterPowerOptionResults = new ManagementObjectSearcher("root\WMI", $"SELECT * FROM MSPower_DeviceEnable WHERE InstanceName LIKE '{DeviceID}_%'").Get();
foreach(ManagementObject AdapterPowerOption in AdapterPowerOptionResults)
{
AdapterPowerOption.Properties["enable"].Value = false;
AdapterPowerOption.Put();
}
}
希望对您有所帮助。
-保罗
Windows10 API确实有可以轻松使用的方法来打开蓝牙无线电:
using Windows.Devices.Radios;
var bluetoothRadio = Radio.GetRadiosAsync().AsTask().Result.
First(r => r.Kind == RadioKind.Bluetooth);
_bluetoothRadio.SetStateAsync(RadioState.On);
请注意,为了使用这些 API,需要对 Windows.winmd
的程序集引用。看看 Carter's answer.
更新:
看起来 Win 10 SDK 参考也可以通过安装 Microsoft.Windows.SDK.Contracts
NuGet package 添加。
我在使用外部蓝牙设备的应用程序时遇到问题。当设备闲置一段时间后 Windows 打开蓝牙无线电的电源。当我取消选中蓝牙收音机的“电源管理”选项卡下时[允许计算机关闭此设备以节省电量。]它起作用了。见图像。
同样需要从 C# 代码实现。这需要从 Win7 开始完成。
我应该可以在我的 WPF 应用 运行 中更改这些设置。并在关闭时恢复它。
您可以使用 C# 中的 WMI 轻松完成此操作。确保添加对 System.Management 的引用(以及 using System.Management; 语句)
//BTHUSB will identify physical bluetooth adapters only, if you want all bluetooth devices use 'WHERE PNPClass='Bluetooth' or specific device 'WHERE Name='Intel(R) Wireless Bluetooth(R)'
ManagementObjectCollection PhysicalBluetoothAdapterResults = new ManagementObjectSearcher("root\CIMV2", "SELECT DeviceID FROM Win32_PnPEntity WHERE Service='BTHUSB'").Get();
foreach(ManagementObject PhysicalBluetoothAdapter in PhysicalBluetoothAdapterResults)
{
string DeviceID = PhysicalBluetoothAdapter.Properties["DeviceID"].Value.ToString().Replace("\","\\");
ManagementObjectCollection AdapterPowerOptionResults = new ManagementObjectSearcher("root\WMI", $"SELECT * FROM MSPower_DeviceEnable WHERE InstanceName LIKE '{DeviceID}_%'").Get();
foreach(ManagementObject AdapterPowerOption in AdapterPowerOptionResults)
{
AdapterPowerOption.Properties["enable"].Value = false;
AdapterPowerOption.Put();
}
}
希望对您有所帮助。
-保罗
Windows10 API确实有可以轻松使用的方法来打开蓝牙无线电:
using Windows.Devices.Radios;
var bluetoothRadio = Radio.GetRadiosAsync().AsTask().Result.
First(r => r.Kind == RadioKind.Bluetooth);
_bluetoothRadio.SetStateAsync(RadioState.On);
请注意,为了使用这些 API,需要对 Windows.winmd
的程序集引用。看看 Carter's answer.
更新:
看起来 Win 10 SDK 参考也可以通过安装 Microsoft.Windows.SDK.Contracts
NuGet package 添加。