如何获取windows xp上Modem的串口号

提出问题:使用注册表HKLM\HARDWARE\DEVICEMAP可以枚举出系统的所有串口号,但是想获取那个串口是Modem的不是很方便

解决方法:

使用SetupAPI函数

1.创建device information set

HDEVINFO hDevInfo = SetupDiGetClassDevs(&usb_modem, NULL, NULL, DIGCF_PRESENT );

2.枚举所有的设备info

bRet = SetupDiEnumDeviceInfo(hDevInfo, MemberIndex++, &sp_devInfo_data);

3.查询注册表信息

这里主要用函数SetupDiOpenDevRegKey就可以打开Device Parameters 子键,然后你会发现里面的PortName就是实际的串口名称

hKey = SetupDiOpenDevRegKey(hDevInfo, &sp_devInfo_data, DICS_FLAG_GLOBAL ,0 ,DIREG_DEV , KEY_READ);

有了hKey用注册表函数去查询PortName

RegQueryValueEx(key, "PortName", NULL, NULL, NULL, & size);  

RegQueryValueEx(key, "PortName", NULL, NULL, buff, & size)

debug看看buff里面的内容吧,就是想要的串口名称了。

你可能感兴趣的