阅读:1467回复:1
关于不能打开COM10以上的串口
首先,在论坛中有过类似的帖子,如下:
http://bbs.driverdevelop.com/read.php?tid-71885-keyword-%D0%E9%C4%E2%B4%AE%BF%DA.html 硬件环境: 【笔记本TOSHIBA Satellite M55 S1001】 没有串口,使用USB-RS232虚拟串口;内置的MODEM占用COM3 软件环境: 【XPSP2+VS2005 VB.NET】 问题: 在使用轮询CreateFile("com1",......)、CreateFile("com2",......)。。。。CreateFile("com20",......)时能打开COM3,但是这个串口是MODEM的;在USB口插上USB-RS232设备并安装好驱动后,在【设备管理器】的串口中能发现“Prolific USB-to-Serial Comm Port (COM10)”。 奇怪的是CreateFile("com3",......)正常,而CreateFile("com10",......)发生错误,GetLastError获取错误:The system cannot find the file specified. 使用CreateFile("\\\\.\\com10",......)发生错误,GetLastError获取错误:The network path was not found. 使用CreateFile("\\\\.\\com33",......)也发生同样错误,GetLastError获取错误:The network path was not found. NND,我是参考MSDN使用“\\\\.\\COM10”!后来MSDN论坛中搜索,人家竟然是使用“\\.\COM10”!马上修改程序。。。,YES!CreateFile("\\.\COM10",.....)成功! 哪位老牛: 怎么能像【设备管理器】一样枚举出计算机的串口?并获取其属性等信息。 |
|
沙发#
发布于:2007-01-12 16:59
TCHAR buf[11]=_T("\\\\.\\COM");//modefied by yachli 050127
TCHAR DisplayBuf[11]=_T("COM"); for (int i=1;i<=255;i++)//max is 255 { if (OpenedPorts) continue; _itot(i,buf+7,10); HANDLE hPort=CreateFile(buf,GENERIC_READ,FILE_SHARE_READ | FILE_SHARE_WRITE,NULL, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); if (hPort!=INVALID_HANDLE_VALUE) { CloseHandle(hPort); _itot(i,DisplayBuf+3,10); m_List.SetItemData(m_List.AddString(DisplayBuf),i); } } 枚举所有没有被占用的串口,此代码我用在不占用串口资源的监视程序里,没有问题。 |
|