如何通过COM号获取设备VID和PID
想实现的功能是:1. 插入平板后,程序能自动检测到设备,获取设备的COM号。
2. 能获取该设备的VID和PID,并以此来过滤掉非该型号平板设备。
目前遇到的问题:第一点已经实现(请见下面的代码),现在就是不知道在下面代码框架下如何实现第二点。还请大神指点指点,不胜感激!
PS:下面的代码也是在网上找的,稍微修改了一下。
2. 能获取该设备的VID和PID,并以此来过滤掉非该型号平板设备。
目前遇到的问题:第一点已经实现(请见下面的代码),现在就是不知道在下面代码框架下如何实现第二点。还请大神指点指点,不胜感激!
PS:下面的代码也是在网上找的,稍微修改了一下。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
bool IsCopy = false;
public const Int32 WM_DEVICECHANGE = 0x219;
public const Int32 DBT_DEVICEARRIVAL = 0x8000;
public const Int32 DBT_DEVICEREMOVECOMPLETE = 0x8004;
public const Int32 DBT_DEVTYP_PORT = 0x00000003;
[StructLayout(LayoutKind.Sequential)]
public struct DEV_BROADCAST_HDR
{
public UInt32 dbch_size;
public UInt32 dbch_devicetype;
public UInt32 dbch_reserved;
}
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_DEVICECHANGE)
{
switch (m.WParam.ToInt32())
{
// USB插上
case DBT_DEVICEARRIVAL:
if (!IsCopy) // 如果不用这个判断,会被多次调用,原因不明
{
DEV_BROADCAST_HDR dbhdr =
(DEV_BROADCAST_HDR)Marshal.PtrToStructure(m.LParam,
typeof(DEV_BROADCAST_HDR));
if (dbhdr.dbch_devicetype == DBT_DEVTYP_PORT)
{
IsCopy = true;
string portName =
Marshal.PtrToStringUni((IntPtr)(m.LParam.ToInt32()
+ Marshal.SizeOf(typeof(DEV_BROADCAST_HDR))));
}
}
break;
// USB移除
case DBT_DEVICEREMOVECOMPLETE:
IsCopy = false;
break;
default:
break;
}
}
base.WndProc(ref m);
}
...全文
相关推荐
获取串口信息GetComPortInformation(源码)
获取串口信息:串口号、设备名称、PID、VID,附源码GetComPortInformation。
通过串口设备的VID PID动态获取串口号(C# C++)
通过串口设备的VID PID动态获取串口号(C# C++)
win7下USB转串口驱动
win7下USB转串口驱动,适合硬件ID号是VID_5372&PID_2303
中兴EVDO模块Linux拨号流程
因在Linux 下无法确认功能端口号,所以只能借助Windows 下来查看功能端口号
C# 已知USB的PID与VID,自动查找USB串口号
已知PID VID,自动查找USB串口号, 先增加using System.IO.Ports; using System.Management; using Microsoft.VisualBasic; using Microsoft.VisualBasic.CompilerServices;


