如何在启动时关闭和打开 Win10 蓝牙

如何在启动时关闭和打开 Win10 蓝牙

我有一台 Win10 笔记本电脑,我会经常在家和公司之间来回移动。我在每个地方都使用相同但独立的蓝牙鼠标。每次我切换位置(从而切换蓝牙鼠标)时,我都必须进入“设置”来关闭并重新打开蓝牙“开关”,以使笔记本电脑连接到新鼠标(即使它在蓝牙设备列表中显示为已“配对”)。请注意,即使重新启动也是如此。

当然,我首先想到的自动化这个过程是使用脚本在启动时弹出蓝牙服务,以模拟在“设置”页面中关闭并重新打开蓝牙开关。但似乎我没能确定要切换的正确服务(如果这实际上是正确的方法)。我使用 powershell 停止了“bthserv”和“ibtsiva”,但我的鼠标仍然正常工作,所以显然这并不等同于“关闭”蓝牙开关。

PS C:\WINDOWS\system32> get-service -DisplayName *Bluetooth*

Status   Name               DisplayName
------   ----               -----------
Stopped  BluetoothUserSe... Bluetooth User Support Service_3b07...
Stopped  BTAGService        Bluetooth Audio Gateway Service
Stopped  bthserv            Bluetooth Support Service
Stopped  ibtsiva            Intel Bluetooth Service

我还应该切换其他服务吗?或者这项服务完全是错误的方法?强制硬件关闭并重新启动每次都有效,因此它肯定包括我需要执行的任何操作。我只需要找到一种自动化方法。有什么提示吗?

答案1

请参阅此问答...

在 Windows 10 中通过 cmd/powershell 打开/关闭蓝牙无线电/适配器

[CmdletBinding()] 
Param 
(
    [Parameter(Mandatory=$true)][ValidateSet('Off', 'On')][string]$BluetoothStatus
)

If ((Get-Service bthserv).Status -eq 'Stopped') 
{ Start-Service bthserv }

Add-Type -AssemblyName System.Runtime.WindowsRuntime
$asTaskGeneric = ([System.WindowsRuntimeSystemExtensions].GetMethods() `
| ? { $_.Name -eq 'AsTask' -and $_.GetParameters().Count -eq 1 -and $_.GetParameters()[0].ParameterType.Name -eq 'IAsyncOperation`1' })[0]

Function Await($WinRtTask, $ResultType) 
{
    $asTask = $asTaskGeneric.MakeGenericMethod($ResultType)
    $netTask = $asTask.Invoke($null, @($WinRtTask))
    $netTask.Wait(-1) | Out-Null
    $netTask.Result
}

[Windows.Devices.Radios.Radio,Windows.System.Devices,ContentType=WindowsRuntime] | Out-Null

[Windows.Devices.Radios.RadioAccessStatus,Windows.System.Devices,ContentType=WindowsRuntime] | Out-Null
Await ([Windows.Devices.Radios.Radio]::RequestAccessAsync()) ([Windows.Devices.Radios.RadioAccessStatus]) | Out-Null

$radios = Await ([Windows.Devices.Radios.Radio]::GetRadiosAsync()) ([System.Collections.Generic.IReadOnlyList[Windows.Devices.Radios.Radio]])
$bluetooth = $radios | ? { $_.Kind -eq 'Bluetooth' }

[Windows.Devices.Radios.RadioState,Windows.System.Devices,ContentType=WindowsRuntime] | Out-Null
Await ($bluetooth.SetStateAsync($BluetoothStatus)) ([Windows.Devices.Radios.RadioAccessStatus]) | Out-Null

相关内容