【问题标题】:How to "unpair", "remove" Bluetooth device in Windows with C# .NET如何使用 C# .NET 在 Windows 中“取消配对”、“删除”蓝牙设备
【发布时间】:2019-05-13 18:33:50
【问题描述】:

我遇到了一个问题。我需要取消配对或从 Windows 中移除蓝牙设备。 在这里,我的手机 Redmi 已配对

而且我需要取消配对,所以基本上我想达到与按下“删除设备”按钮相同的效果

我试过这个,但它对我不起作用,因为这个解决方案会断开蓝牙设备,但它仍然保持配对:How to disconnect a bluetooth device from C# .Net in Win7

我正在使用 C# WPF 和 InTheHand 库进行配对,但它没有取消配对功能

我如何实现我的目标?谢谢

【问题讨论】:

  • 不知道 32feet 是如何实现的,但你必须调用BluetoothRemoveDevice 函数。
  • @MikePetrichenko 谢谢,我会试试的。在 InTheHand lib 中(据我了解与 32feet 相同),没有删除设备功能非常感谢
  • @MikePetrichenko 我应该怎么称呼它?对这些东西没有太多经验

标签: c# .net windows bluetooth pairing


【解决方案1】:

要取消经典蓝牙设备,您必须调用BluetoothRemoveDevice 函数。

对于.NET,它可以如下导入

[StructLayout(LayoutKind.Explicit)]
struct BLUETOOTH_ADDRESS
{
  [FieldOffset(0)]
  [MarshalAs(UnmanagedType.I8)]
  public Int64 ullLong;
  [FieldOffset(0)]
  [MarshalAs(UnmanagedType.U1)]
  public Byte rgBytes_0;
  [FieldOffset(1)]
  [MarshalAs(UnmanagedType.U1)]
  public Byte rgBytes_1;
  [FieldOffset(2)]
  [MarshalAs(UnmanagedType.U1)]
  public Byte rgBytes_2;
  [FieldOffset(3)]
  [MarshalAs(UnmanagedType.U1)]
  public Byte rgBytes_3;
  [FieldOffset(4)]
  [MarshalAs(UnmanagedType.U1)]
  public Byte rgBytes_4;
  [FieldOffset(5)]
  [MarshalAs(UnmanagedType.U1)]
  public Byte rgBytes_5;
};

[DllImport("BluetoothAPIs.dll", SetLastError = true, CallingConvention = CallingConvention.StdCall)]
[return: MarshalAs(UnmanagedType.U4)]
static extern UInt32 BluetoothRemoveDevice(
  [param: In, Out] ref BLUETOOTH_ADDRESS pAddress);

这是怎么称呼它的:

UInt32 Unpair(Int64 Address)
{
  BLUETOOTH_ADDRESS Addr = new BLUETOOTH_ADDRESS();
  Addr.ullLong = Address;
  return BluetoothRemoveDevice(ref Addr);
}

请注意,此功能仅允许取消配对经典蓝牙设备。要取消蓝牙 LE 设备的配对,您必须使用基于 WinRT 的其他方式。

【讨论】:

  • 这实际上为我解决了一个大问题......非常感谢!编辑:我把它用在一个非常简单的程序中,完整的源代码在GitHub,供那些可能需要它的人使用。
猜你喜欢
  • 1970-01-01
  • 2012-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多