如何在 Win7 中断开蓝牙设备与 C# .Net 的连接

     2023-02-22     107

关键词:

【中文标题】如何在 Win7 中断开蓝牙设备与 C# .Net 的连接【英文标题】:How to disconnect a bluetooth device from C# .Net in Win7 【发布时间】:2013-02-12 09:21:05 【问题描述】:

我想断开蓝牙设备与我在 Win 7 x64 上运行的 c# .Net 应用程序的连接。

我知道 MS 在 .Net 上提供的保护 BT 的功能很少。

我搜索了 32feet.Net,发现了如何连接、发现、获取信息……但没有关于断开连接(我错过了什么吗?)。

然后,我在 Msdn IOCTL_BTH_DISCONNECT_DEVICE 上找到了。问题是我无法理解如何调用它。 看来我应该将DeviceIOControl 与 Platform Invoke 一起使用,但恐怕我没有足够的 .Net 技能来自己构建它。

这是我现在的位置:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using Microsoft.Win32.SafeHandles;
using System.IO;

namespace BtDisco

    class Program
    
        const int IOCTL_BTH_DISCONNECT_DEVICE = 0x41000c;

        [DllImport("Kernel32.dll", SetLastError = false, CharSet = CharSet.Auto)]
        public static extern bool DeviceIoControl(
            Microsoft.Win32.SafeHandles.SafeFileHandle hDevice,
            uint dwIoControlCode,
            [MarshalAs(UnmanagedType.AsAny)] [In] object InBuffer,
            uint nInBufferSize,
            [MarshalAs(UnmanagedType.AsAny)] [Out] object OutBuffer,
            uint nOutBufferSize,
            ref uint pBytesReturned,
            [In] ref System.Threading.NativeOverlapped Overlapped
            );

        [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
        static extern SafeFileHandle CreateFile(
            string lpFileName,
            [MarshalAs(UnmanagedType.U4)] FileAccess dwDesiredAccess,
            [MarshalAs(UnmanagedType.U4)] FileShare dwShareMode,
            IntPtr lpSecurityAttributes,
            [MarshalAs(UnmanagedType.U4)] FileMode dwCreationDisposition,
            [MarshalAs(UnmanagedType.U4)] FileAttributes dwFlagsAndAttributes,
            IntPtr hTemplateFile);


        static void Main(string[] args)
        
            //http://msdn.microsoft.com/en-us/library/windows/desktop/aa363216(v=vs.85).aspx
            //hDev = Use CreateFile
            SafeFileHandle _hdev = CreateFileR(...);

            DeviceIoControl(hDev, IOCTL_BTH_DISCONNECT_DEVICE, char[] btAddr, btAddr.Length(), result, result.Length(), ref getCnt, IntPtr.Zero);
        
    

有人能帮我完成这个吗?

【问题讨论】:

【参考方案1】:

终于,我自己搞定了!

我在 InTheHand.Net 的代码中搜索了一下,终于明白如何制作了!

这是一些工作代码(如果你想使用它,你需要 InTheHand.Net):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Globalization;
using System.Text;
using InTheHand.Net;
using InTheHand.Net.Bluetooth;
using System.Runtime.InteropServices;

namespace BTDisco2

    class Program
    
        const int IOCTL_BTH_DISCONNECT_DEVICE = 0x41000c;
        [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
        internal static extern bool DeviceIoControl(
        IntPtr hDevice,
        uint dwIoControlCode,
        ref long InBuffer,
        int nInBufferSize,
        IntPtr OutBuffer,
        int nOutBufferSize,
        out int pBytesReturned,
        IntPtr lpOverlapped);

        static void Main(string[] args)
        
            var r = BluetoothRadio.PrimaryRadio;
            var h = r.Handle;
            long btAddr = BluetoothAddress.Parse("00:1b:3d:0d:ac:31").ToInt64();
            int bytesReturned = 0;
            var success = DeviceIoControl(h,
            IOCTL_BTH_DISCONNECT_DEVICE,
            ref btAddr, 8,
            IntPtr.Zero, 0, out bytesReturned, IntPtr.Zero);

            if (!success)
            
                int gle = Marshal.GetLastWin32Error();
                Console.WriteLine(string.Format(CultureInfo.InvariantCulture, "failure: 0 = 0x0:X.", gle));
            
            else
            
                Console.WriteLine("Success !");
            
            while (!Console.KeyAvailable) System.Threading.Thread.Sleep(200);
        
    

【讨论】:

干得好!我开始怀疑是否可以从用户模式调用它们,但显然可以。 据我所知,在蓝牙客户端类型的 obj 下有一个 Dispose() 方法,该方法也有 Connect()。不确定这是否是您想要的。 试图在此处找到连接蓝牙的命令代码ioctls.net,但找不到。任何信息将不胜感激。

在 .NET 中使用 USB 设备

...发布时间】:2010-09-0906:50:28【问题描述】:使用.Net(C#),如何使用USB设备?如何检测USB事件(连接/断开)以及如何与设备通信(读/写)。是否有本地.Net解决方案来执行此操作?【问题讨论】:更多答案在这里:***.com/questions/2803... 查看详情

核心蓝牙立即断开连接后外设

...断开连接。"它刚刚开始突然出现。可能是什么原因以及如何解决。【 查看详情

如何使用 C# 在 WinForm 中手动绑定到蓝牙低功耗设备?

】如何使用C#在WinForm中手动绑定到蓝牙低功耗设备?【英文标题】:HowtoBindmanuallytoaBlueToothLowEnergyDeviceinaWinFormusingC#?【发布时间】:2017-01-0123:54:47【问题描述】:这个问题的回答者大多是:WindowsUWPconnecttoBLEdeviceafterdiscovery目前,... 查看详情

win7系统64位如何连接小米蓝牙音箱

蓝牙服务设置为了启动-自动,打开小米小钢炮也能在笔记本(戴尔灵越5447)上显示出来,但总有黄色角标,无法连接!而且在播放设备里没有蓝牙播放这个显示,求各位路神大侠帮忙~工具/材料:win7系统64位电脑,小米蓝牙音... 查看详情

在 Windows Phone 8.1 上连接和断开蓝牙 BLE

】在WindowsPhone8.1上连接和断开蓝牙BLE【英文标题】:ConnectanddisconnectfromBluetoothBLEonWindowsPhone8.1【发布时间】:2015-01-1211:59:48【问题描述】:我有一台由WindowsPhone8.1和Android手机操作的设备。由于这些手机中只有一部可以随时使用该... 查看详情

核心蓝牙:如果重新安装应用程序而没有在应用程序中正确断开BLE设备,则无法再次在应用程序中找到BLE设备

...心蓝牙:如果重新安装应用程序而没有在应用程序中正确断开BLE设备,则无法再次在应用程序中找到BLE设备【英文标题】:CoreBluetooth:CannotfindaBLEdeviceintheappagainifreinstallingtheappwithoutdisconnectingtheBLEdeviceproperlyintheapp【发布时间】:20... 查看详情

通过 iOS 8 Widget 断开蓝牙设备

】通过iOS8Widget断开蓝牙设备【英文标题】:DisconnectBluetoothdeviceviaiOS8Widget【发布时间】:2014-09-2700:55:55【问题描述】:我正在开发一种低功耗蓝牙(4.0)设备,该设备可与iOS应用程序配合使用并使用CoreBluetooth。我已经成功创建了这... 查看详情

Android BLE GATT 断开与设备断开

】AndroidBLEGATT断开与设备断开【英文标题】:AndroidBLEGATTDisconnectedvs.DeviceDisconnected【发布时间】:2017-06-1312:40:16【问题描述】:我正在开发一个与自定义蓝牙设备通信的Android应用。在调用BluetoothGatt.Disconnect()之后,我看到调用了On... 查看详情

如何检测断开的蓝牙音频设备是当前播放音乐流的设备?

】如何检测断开的蓝牙音频设备是当前播放音乐流的设备?【英文标题】:Howtodetectthatthedisconnectingbluetoothaudiodeviceisthecurrentdeviceplayingthemusicstream?【发布时间】:2015-04-1315:44:24【问题描述】:我的音频播放器应用当前正在侦听ACTIO... 查看详情

如何使用 iOS Core 蓝牙在 BLE 上完全断开连接

】如何使用iOSCore蓝牙在BLE上完全断开连接【英文标题】:HowtodisconnectcompletelyonBLEusingiOSCoreBluetooth【发布时间】:2018-03-3009:12:29【问题描述】:使用CBCentralManager.cancelPeripheralConnection(peripheral)时,断开连接仅适用于应用程序级别。... 查看详情

小爱音箱如何连接win7?

我用的笔记本WIN7的系统,小爱同学能链接吗如何连接?请大神帮帮忙1、打开开始菜单,找到控制面板,点击进入。2、在跳转的界面中找到网络和共享中心,并点击进入。3、之后点击左侧的更改适配器设置选项。4、之后找到蓝... 查看详情

iOS 检测蓝牙连接/断开

】iOS检测蓝牙连接/断开【英文标题】:iOSDetectBluetoothconnection/disconnection【发布时间】:2018-06-2508:49:27【问题描述】:即使我的应用程序在后台,是否可以在蓝牙设备与iOS连接或断开连接时收到通知?在Android上,我使用ACTION_ACL_CO... 查看详情

蓝牙 LE 在暂停时断开连接

...我打开主页选项卡或其他应用程序时,它都会断开连接。如何在暂停时保持连接?相关代码如下:@OverrideprotectedvoidonPause()super.onPause();//Cancelanyscansinprogr 查看详情

如何在我的 C# 程序中断开访问?

】如何在我的C#程序中断开访问?【英文标题】:howtodisconnectionaccessinmyC#program?【发布时间】:2010-08-0312:31:37【问题描述】:我尝试像这样压缩我的Access2007数据库:System.Diagnostics.Process.Start(@"C:\\ProgramFiles\\MicrosoftOffice\\Office12\\msacc... 查看详情

如何检查android中其他设备的蓝牙是不是打开/关闭?

】如何检查android中其他设备的蓝牙是不是打开/关闭?【英文标题】:HowtocheckthebluetoothisON/OFFofotherdevicesinandroid?如何检查android中其他设备的蓝牙是否打开/关闭?【发布时间】:2012-02-0314:01:10【问题描述】:我正在开发一个android... 查看详情

自动将蓝牙连接到最后连接的设备

...会断开连接,我想再次与最后连接的设备重新连接。我该如何实现这一点。我有尝试从Play商店自动连接蓝牙,但它连接耳机和从应用程序外部而不是从内部。如何在应用程序中实 查看详情

如何使用 BLE 开发 Windows C# 应用程序

】如何使用BLE开发WindowsC#应用程序【英文标题】:HowcandevelopWindowsC#AppusingBLE【发布时间】:2016-03-3012:17:22【问题描述】:我正在尝试开发一个与蓝牙设备通信的Windows应用。现在我有一个蓝牙USB加密狗用于我的Windows桌面和蓝牙BLE... 查看详情

蓝牙随机断开

】蓝牙随机断开【英文标题】:BluetoothRandomlyDisconnects【发布时间】:2014-05-1022:12:08【问题描述】:我正在使用蓝牙LE(4.0)和CoreBluetooth框架来创建一个iOS(7.1)应用程序,使设备充当“外围设备”。我可以使用另一台充当“Central”的... 查看详情