如何通过COM号获取设备VID和PID

baidu_29905333 baidu_29905333 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
想实现的功能是:1. 插入平板后,程序能自动检测到设备,获取设备的COM号。
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);
}
...全文
评论 4
收藏 已收藏
分享
返回顶部
baidu_29905333
C# 111,129 成员 642,538 内容