在C#.NET

时间:2017-06-15 14:38:57

标签: c# .net windows bluetooth serial-port

我有一个应用程序。通过蓝牙从设备接收一些传输。这个应用程序旨在托管在Win上。 Server 2008或Win。 7,在C#.NET 4.5上开发。通过使用设备SDK进行集成,因此我只需要知道从哪个COM端口接收数据。当我从蓝牙设置手动创建虚拟COM端口时,这不是问题。

Virtual COM port

此集成应该部署在许多设备中,并且要求用户手动创建虚拟COM端口不是一种选择......有没有办法从.NET代码创建它?我需要创建虚拟COM端口(监听蓝牙传输)并知道其端口名称。

编辑:我开始采用新方法(C ++,power shell脚本,CMD,bat文件......总是在Windows技术中使用

我已经尝试了一些COM集成(like this one),但它似乎仅限于.NetCF(我没有coredll.dll,因为它在Windows Server或Windows 7上运行,其中其他缺失的东西......已经试图强行加载那个DLL而没有运气。类似但有效的东西将是理想的解决方案

1 个答案:

答案 0 :(得分:3)

我找到了与您的问题有关的这个有趣的小故事

  

在Win32上,要创建一个可以使用的蓝牙虚拟串口   BluetoothDeviceInfo.SetServiceState,传入服务类   串行端口。不幸的是,创建的COM端口的名称不是   返回 - 那是因为本机API没有说明!一种方法   找到创建的端口的名称就是调用   System.IO.Ports.SerialPort.GetPortNames方法之前和之后   SetServiceState调用并查看哪个名称是新的。

来源:https://github.com/inthehand/32feet/wiki/Bluetooth-Serial-Ports

无论如何......在注册表中,所有蓝牙设备都列在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\BTHENUM下。

您可以枚举该密钥下的条目,以找到您的设备PNP ID。 我的注册表中的一个关键名称,例如: {00001103-0000-1000-8000-00805f9b34fb}_VID&0001001d_PID&1200

您设备的串行端口存储在以下位置: .\{unique subkey name}\Device Parameters\SerialPort

其中{unique subkey name}是内部MS ID。它是该级别唯一的子键。

获取PnPID的一种方法是在设备管理器中右键单击 - >设备上的属性。转到"细节"选项卡,然后选择"兼容ID"在组合框中。