【发布时间】:2014-12-13 12:26:37
【问题描述】:
在 Windows 8/8.1 中,现在可以通过操作系统本身启用/禁用蓝牙(见下图)。这很棒,因为它与设备/驱动程序无关。
在 Android 上,这可以通过 BluetoothAdapter.enable() 和 BluetoothAdapter.disable() 实现,但我无法在 Windows 上找到任何可以做到这一点的东西(尽管看起来绝对有可能)。
所以我尝试过使用:
- BluetoothEnableIncomingConnections() - 但是,这只会阻止新的传入连接。它不会禁用现有的。
- devcon.exe - 这种方法的问题是 A. 它是不可再分发的二进制 B. 它要求您提前知道他的设备 ID(因此它与设备/驱动程序无关)。此外,虽然它不会破坏交易,但最好不需要提升。
- UI 自动化 - 简单地启动 PC 设置应用程序并使用键盘事件切换开关很容易,但在正确的编码实践和用户体验方面都非常难看。话虽这么说,这是我迄今为止发现的实现我正在寻找的行为的唯一方法。
我正在用 C++ 编写本机 Win32 应用程序,因此我不受任何 Windows 应用商店应用程序要求的限制,不过,如果有一种不需要提升的方法,那就太好了。
TL;DR
是否有任何 API、WMI 接口或其他任何可用于实现功能等同于翻转蓝牙拨动开关的结果?如果没有,是否有任何替代方法可以产生类似的结果?
【问题讨论】:
-
'如何才能做到这一点?如果无法实现与拨动开关等效的功能,是否有任何替代方法可以产生类似的结果?'您尝试了什么,特别是在哪里失败了。只要求工作代码是 OT,对不起!如果您删除c++ 标签,您可能会获得更好的结果和更积极的回应。
-
@πάνταῥεῖ:问题不要求工作代码。适当的 API 函数(如果有的话)的简要描述将是一个完全合理的答案。请密切投票者注意,这不是调试问题;如果“寻求调试帮助的问题”的理由被滥用太多,它就会被我们拿走。 :-(
-
@πάνταῥεῖ - 就是这样,我已经搜索并找不到任何东西,这就是为什么我来这里看看是否有人有任何可以分享的相关知识。我想我可以通过询问“今天是否有任何 Windows API 可以做到这一点?”来更具体一些。但我没有从那开始,因为我不想排除任何不依赖 API 的选项(例如 WMI 接口或类似的东西)。
-
通过屏幕截图中的开关将其关闭;如果您随后进入设备管理器并看到它标记为 disabled 您可以使用
setupdi()系列 API 来实现相同的结果。如果没有,请查找相应的 wmi 类,看看它们是否允许禁用。 -
遗憾的是,无线电管理 API aren't public;我不知道为什么,因为 API 相当不错。
标签: windows winapi bluetooth windows-8.1