我们如何以编程方式更改无线蓝牙无线电电源管理#

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 添加。