背景 两台电脑互换了无线网卡:
A 电脑:AX200 => RTL8828BE
B 电脑:RTL8828BE => AX200
新的 Xbox 手柄链接到 B 电脑上成功,删除旧的 Xbox 手柄无线设备失败,在设备管理器里查看 - 显示隐藏的设备 - 蓝牙
,找到未连接的 Xbox 手柄删除成功,B 电脑完毕。 A 电脑重复以上操作后,在 A 电脑的蓝牙连接池里面有 Xbox 设备显示已配对,但是不管是开启设备配对,或是激活手柄电脑重新搜索均失败,途中测试拿旧手柄连接 B 电脑成功。判断是 A 电脑的蓝牙模块设置出了问题,旧手柄连接在了一个虚拟的蓝牙枚举器上,光是在设备管理器里面删除设备并不管用。过段时间或是重启电脑又会出现,且因为旧手柄的设备码已连接,重新配对时 A 电脑均搜索不到手柄。
解决办法
尝试在蓝牙设置、设备管理器、打印机与设备重复删除,无用
尝试重装网卡启动,无用
尝试重装蓝牙驱动,RTL 官网驱动下载速度太慢,下载到一半使用其他方案完成,于是取消下载
成功方案为在 power shell
里运行了一段代码,代码逻辑是搜索电脑配对的蓝牙设备,根据编号选择后,调用底层方法删除该蓝牙设备,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 $Source = @" [DllImport("BluetoothAPIs.dll", SetLastError = true, CallingConvention = CallingConvention.StdCall)] [return: MarshalAs(UnmanagedType.U4)] static extern UInt32 BluetoothRemoveDevice(IntPtr pAddress); public static UInt32 Unpair(UInt64 BTAddress) { GCHandle pinnedAddr = GCHandle.Alloc(BTAddress, GCHandleType.Pinned); IntPtr pAddress = pinnedAddr.AddrOfPinnedObject(); UInt32 result = BluetoothRemoveDevice(pAddress); pinnedAddr.Free(); return result; } "@ Function Get-BTDevice {Get-PnpDevice -class Bluetooth | ?{$_ .HardwareID -match 'DEV_' } |select Status, Class , FriendlyName , HardwareID ,# Extract device address from HardwareID @ {N='Address' ;E={[uInt64 ]('0x{0}' -f $_ .HardwareID[0 ].Substring(12 ))}} }$BTR = Add-Type -MemberDefinition $Source -Name "BTRemover" -Namespace "BStuff" -PassThru $BTDevices = @ (Get-BTDevice ) Do {If ($BTDevices .Count) {"`n******** Bluetooth Devices ********`n" | Write-Host For ($i =0 ; $i -lt $BTDevices .Count; $i ++) { ('{0,5} - {1}' -f ($i +1 ), $BTDevices [$i ].FriendlyName) | Write-Host }$selected = Read-Host "`nSelect a device to remove (0 to Exit)" If ([int ]$selected -in 1 ..$BTDevices .Count) {'Removing device: {0}' -f $BTDevices [$Selected -1 ].FriendlyName | Write-Host $Result = $BTR::Unpair ($BTDevices [$Selected -1 ].Address)If (!$Result ) {"Device removed successfully." | Write-Host }Else {"Sorry, an error occured." | Write-Host } } }Else {"`n********* No devices foundd ********" | Write-Host } } While (($BTDevices = @ (Get-BTDevice )) -and [int ]$selected )
选择完设备后,虽然提示信息为 "Sorry, an error occured."
,但是在蓝牙界面配对已经可以搜索到旧 Xbox 手柄,问题解决。
搜索资料时跟该方案列在一起的还有一 yarn 个方案如下:
下载修复工具 ,一路默认选项完成安装
打开 PowerShell
,命令行输入 btpair -u
,回车执行
等待一会,就可以去设置把蓝牙设备删除了 在无法删除设备时在 B 电脑上尝试无用,故没有选择在 A 电脑上使用