VC++串口笔记(一)枚举电脑串口
2012年01月14日
1.从注册表读取信息:
代码如下:
从注册表读取串口
1 void CCommDlg::EnumCommPort(CListBox *pListBox)
2 {
3 HKEY hKey;
4 if(ERROR_SUCCESS ==::RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Hardware\\DeviceMap\\SerialComm",NULL, KEY_READ, &hKey ))//打开串口注册表对应的键值
5 {
6 int i=0;
7 TCHAR RegKeyName[128],SerialPortName[128];
8 DWORD dwLong,dwSize;
9 while(TRUE)
10 {
11 dwLong = dwSize=sizeof(RegKeyName);
12 if(ERROR_NO_MORE_ITEMS==::RegEnumValue(hKey,i,RegKeyName,&dwLong,NULL,NULL,(PUCHAR)SerialPortName, &dwSize))//枚举串口
13 {
14 break;
15 }
16 if(!memcmp(RegKeyName,"\\Device\\",8))//过滤虚拟串口
17 {
18 pListBox->AddString(SerialPortName); //SerialPortName就是串口名字
19 }
20 i++;
21 }
22 if(pListBox->GetCount()==0)
23 {
24 MessageBox("在HKEY_LOCAL_MACHINE:Hardware\\DeviceMap\\SerialComm里找不到串口!!!");
25 }
26 RegCloseKey(hKey);
27 }
28 else
29 {
30 RegCloseKey(hKey);
31 MessageBox("您的计算机的注册表上没有HKEY_LOCAL_MACHINE:Hardware\\DeviceMap\\SerialComm项");
32 }
33 }
复制代码
2.利用windows SDK 库函数读取硬件信息
代码如下:
利用windows SDK 库函数读取硬件信息
1 unsigned char CCommDlg::DeviceEnumCommPort(CListBox *pListBox)
2 {
3 HDEVINFO hDevInfo;
4 SP_DEVINFO_DATA DeviceInfoData;
5 DWORD DeviceIndex;
6 // Create a HDEVINFO with all present devices.
7 hDevInfo=SetupDiGetClassDevs((LPGUID) &GUID_DEVCLASS_PORTS,0,0,DIGCF_PRESENT);
8 /*
9 GUID_DEVCLASS_FDC软盘控制器
10 GUID_DEVCLASS_DISPLAY显示卡
11 GUID_DEVCLASS_CDROM光驱
12 GUID_DEVCLASS_KEYBOARD键盘
13 GUID_DEVCLASS_COMPUTER计算机
14 GUID_DEVCLASS_SYSTEM系统
15 GUID_DEVCLASS_DISKDRIVE磁盘驱动器
16 GUID_DEVCLASS_MEDIA声音、视频和游戏控制器
17 GUID_DEVCLASS_MODEMMODEM
18 GUID_DEVCLASS_MOUSE鼠标和其他指针设备
19 GUID_DEVCLASS_NET网络设备器
20 GUID_DEVCLASS_USB通用串行总线控制器
21 GUID_DEVCLASS_FLOPPYDISK软盘驱动器
22 GUID_DEVCLASS_UNKNOWN未知设备
23 GUID_DEVCLASS_SCSIADAPTERSCSI 和 RAID 控制器
24 GUID_DEVCLASS_HDCIDE ATA/ATAPI 控制器
25 GUID_DEVCLASS_PORTS端口(COM 和 LPT)
26 GUID_DEVCLASS_MONITOR监视器
27 */
28 if (hDevInfo == INVALID_HANDLE_VALUE)
29 {
30 DWORD ErrorCode = GetLastError();
31 // Insert error handling here.
32 return 1;
33 }
34 // Enumerate through all devices in Set.
35
36 DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
37
38 for (DeviceIndex=0;SetupDiEnumDeviceInfo(hDevInfo,DeviceIndex,&DeviceInfoData);DeviceIndex++)
39 {
40 DWORD DataPropertyType;
41 LPTSTR buffer = NULL;
42 DWORD buffersize = 0;
43 //
44 // Call function with null to begin with,
45 // then use the returned buffer size
46 // to Alloc the buffer. Keep calling until
47 // success or an unknown failure.
48 //
49 while (!SetupDiGetDeviceRegistryProperty(
50 hDevInfo,
51 &DeviceInfoData,
52 SPDRP_FRIENDLYNAME,
53 &DataPropertyType,
54 (PBYTE)buffer,
55 buffersize,
56 &buffersize))
57 {
58 DWORD ErrorCode=GetLastError();
59 if (ErrorCode==
60 ERROR_INSUFFICIENT_BUFFER)
61 {
62 // Change the buffer size.
63 if (buffer) LocalFree(buffer);
64 buffer = (LPTSTR)LocalAlloc(LPTR,buffersize);
65 }
66 else
67 {
68 // Insert error handling here.
69 break;
70 }
71 }
72 CString FriendlyPortName=buffer; /*Extract Serial Port Name*/
73 int pos=FriendlyPortName.Find('(');
74 CString SerialPortName=FriendlyPortName.Right(FriendlyPortName.GetLength()-pos-1);
75 SerialPortName.TrimRight(')');
76 pListBox->AddString(SerialPortName);
77 if(buffer)
78 {
79 LocalFree(buffer);
80 }
81 }
82 if (GetLastError()!=NO_ERROR
83 &&GetLastError()!=ERROR_NO_MORE_ITEMS )
84 {
85 return 1;
86 }
87 // Cleanup
88 SetupDiDestroyDeviceInfoList(hDevInfo);
89 return 0;
90 }
发表评论
-
史上最强劲之android模拟器命令详解
2012-01-20 02:01 567史上最强劲之android模拟器命令详解 2010年11月2 ... -
android_adb命令
2012-01-20 02:01 615android_adb命令 2010年12月17日 An ... -
Microsoft 数据访问技术总结
2012-01-20 02:01 715Microsoft 数据访问技术总 ... -
使用类共享提高性能
2012-01-20 02:00 842使用类共享提高性能 2010年12月09日 共享类基础结 ... -
CENTOS python 升级
2012-01-19 09:48 644CENTOS python 升级 2011年07月28日 ... -
使用Pydev和eclipse配置python开发环境
2012-01-19 09:48 1005使用Pydev和eclipse配置python开发环境 20 ... -
python相关开发环境搭建介绍【转载】
2012-01-19 09:48 635python相关开发环境搭建介绍【转载】 2011年04月0 ... -
Python + Django + MySQLdb 环境安装配置
2012-01-19 09:48 870Python + Django + MySQLdb 环境安装配 ... -
Python Gossip:指令互动环境
2012-01-19 09:48 934Python Gossip:指令互动环境 2010年09月1 ... -
转:基于Chrome开源提取的界面开发框架开篇
2012-01-17 02:22 603转:基于Chrome开源提取的界面开发框架开篇 2011年1 ... -
win32 console application
2012-01-17 02:22 692win32 console application 2011 ... -
微软将对开发者所提要求进行评估
2012-01-17 02:21 520微软将对开发者所提要求进行评估 2011年12月29日 ... -
ROM修改制作工具软件集合
2012-01-17 02:21 756ROM修改制作工具软件集合 2012年01月11日 1. ... -
慢慢研究
2012-01-15 22:00 589慢慢研究 2011年12月24日 ... -
Linux集群的安装与并行计算
2012-01-15 22:00 454Linux集群的安装与并行 ... -
strerror和erron参数函数的试用(经典)
2012-01-15 22:00 562strerror和erron参数函数的试用(经典) 2011 ... -
nc.exe高级技巧应用汇总
2012-01-15 22:00 552nc.exe高级技巧应用汇总 2012年01月06日 文 ... -
笔记本ThinkPad E425 1198-3LC
2012-01-15 22:00 933笔记本ThinkPad E425 1198-3LC 2012 ...
相关推荐
[018]VC++串口通信笔记.zip上位机开发VC串口学习资料源码下载[018]VC++串口通信笔记.zip上位机开发VC串口学习资料源码下载[018]VC++串口通信笔记.zip上位机开发VC串口学习资料源码下载[018]VC++串口通信笔记.zip...
VC++串口通信工程VC++串口通信工程VC++串口通信工程VC++串口通信工程VC++串口通信工程VC++串口通信工程VC++串口通信工程VC++串口通信工程VC++串口通信工程VC++串口通信工程VC++串口通信工程
VC++串口通信串口软件程序18个经典源码合集: VC 串口通信程序.rar VC 读串口话是动态波形,非常好的应用程序,有源码.rar VC++ 串口实现双机互联 包含视窗加代码.rar VC++ 串口通信,可以收发数据,可选用TCPIP 通信....
[101]VC++语言编写,枚举当前系统中的所有RS232串口.zip上位机开发VC串口学习资料源码下载[101]VC++语言编写,枚举当前系统中的所有RS232串口.zip上位机开发VC串口学习资料源码下载[101]VC++语言编写,枚举当前系统...
VC++使用串口通讯类进行操作串口进行数据传输,可以简化程序设计,可根据自己的需求进行修改调整参数,欢迎大家一起学习
[020]VC++串口通信总结.zip上位机开发VC串口学习资料源码下载[020]VC++串口通信总结.zip上位机开发VC串口学习资料源码下载[020]VC++串口通信总结.zip上位机开发VC串口学习资料源码下载[020]VC++串口通信总结.zip...
vc++编写的串口检测程序开发.rar VC++串口编程 不需使用Active控件实现.rar VC++串口编程教学源码,串口学习的好东西.rar VC++ 串口实现双机互联 包含视窗加代码.rar VC 串口通信程序.rar VC++ 串口通信,可以收发数据...
VC++串口通信20个经典源码合集: .\VC 串口通信程序.rar .\VC 读串口话是动态波形,非常好的应用程序,有源码.rar .\VC++ 串口实现双机互联 包含视窗加代码.rar .\VC++ 串口通信,可以收发数据,可选用TCPIP 通信.rar ....
异步串口通信VC源码、用vc++编程实现GPS数据的串口接收、用vc++编写的一个完整的 串口通信的例子、用VC6实现串行通信的三种方法(提供关键代码)、用VC和TC实现不同操作系统下的双机串口通信、用visual c++写的串口...
VC++写的完整的串口类支持,其中包括初始化,设置功能,数据读与数据写功能。
VC++串口通信源代码,用与两台机器间的串口通信,内含串口通信类.zip vc++串口通讯程序,该程序能实现打字机方式进行数据传输.zip VC++使用串口控件实现温度数据采集并显示.rar VC++多串口控制解决方案源代码.zip ...
集合了网上大部分VC++串口类资源,经过测试,都可以用,使用时遇到问题可以根据类名网上找。
一个常用的VC++串口类及示例程序,通过调用Mscomm32.ocx串口控件实现串口通信
[065]VC++串口通讯类应用实例233626488基于VC++的一个串口通讯类应用实例.z上位机开发VC串口学习资料源码ip[065]VC++串口通讯类应用实例233626488基于VC++的一个串口通讯类应用实例.z上位机开发VC串口学习资料源码ip...
[064]VC++串口通讯类,用于初学串口通讯,及串口通讯原理有一定帮助.zip上位机开发VC串口学习资料源码下载[064]VC++串口通讯类,用于初学串口通讯,及串口通讯原理有一定帮助.zip上位机开发VC串口学习资料源码下载...
深入浅出VC++串口编程 串口通信入门知识
VC++ 串口通讯 例程 api 方式 WriteFile ReadFile
VC++串口上位机简单教程VC++串口上位机简单教程VC++串口上位机简单教程VC++串口上位机简单教程