|
有些串口工具不能自动识别系统可用的串口,而是列出了1到n等若干个串口号,用起来很不方面。一个人性化的软件,应该尽量给用户提供方便,比如用户可选的串口必须是系统可用的。这个函数就是实现这个功能的:
//枚举串口
BOOL EnumPort(CComboBox * CmboBoxPort)
{
HKEY hKey = NULL;
long lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE,"Hardware\\DeviceMap\\SerialComm",0,KEY_READ,&hKey); //打开注册表
if( lRet != ERROR_SUCCESS )
{
return FALSE; //系统不存在串口
}
DWORD i = 0; //键值序号
char cValueName[_MAX_PATH]; //键值名称
DWORD nValueNameSize = _MAX_PATH; //键值名称长度
DWORD ValueType; //键值类型
BYTE bValueData[_MAX_PATH]; //键值数值
DWORD nValueDataSize = _MAX_PATH; //键值数值长度
do
{
nValueNameSize = _MAX_PATH; //重置键值名称长度
nValueDataSize = _MAX_PATH; //重置键值数值长度
lRet = RegEnumValue(hKey, i, cValueName, &nValueNameSize, 0, &ValueType, bValueData, &nValueDataSize); //枚举键值
if(lRet == ERROR_SUCCESS)
{
CmboBoxPort->AddString((LPCTSTR)bValueData); //将串口号添加至组合框的列表中
}
i++;
}while(lRet == ERROR_SUCCESS); //读取完毕后退出循环
return (i) ? TRUE : FALSE;
}
这个函数执行完后,如果返回FALSE表示系统没有串口,如果返回TRUE表示至少有一个串口,并且会将系统可用的串口保存在CComboBox 中,而CComboBox正好是选择串口号常用的控件类型,所以用起来很方便。 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|