发个枚举windows系统可用串口的函数
有些串口工具不能自动识别系统可用的串口,而是列出了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; //键值名称
DWORD nValueNameSize = _MAX_PATH; //键值名称长度
DWORD ValueType; //键值类型
BYTE bValueData; //键值数值
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正好是选择串口号常用的控件类型,所以用起来很方便。 当然把返回值修改成可用的串口数也是不错的主意。。。 时间久了你就会发现你这个并不可靠.不过总算比COM1-COMXX瞎填好. 我是直接尝试打开,成功了就算检测到了,可能会比较慢? 呵呵~我也发个,MFC的...
==========================================================================
int ComPortReflash(CComboBox * pComboComPort)
{
/*---------------------------------------------------------------------------------------------
*打开串口,从COM1到COM64
*-------------------------------------------------------------------------------------------*/
int intComNum = 0; //可用串口数
CString strComPort,strComPortCmd; //串口号,串口命令
pComboComPort->ResetContent(); //清除ComboBox中内容
for (int i = 1; i < 64; i ++)
{
strComPort.Format("COM%d",i); //串口号,用于添加到ComboBox中
strComPortCmd.Format("\\\\.\\COM%d",i);//对应串口号的打开方式
HANDLE hCOM = CreateFile(strComPortCmd, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
if (hCOM != INVALID_HANDLE_VALUE) //打开成功
{
intComNum ++; //可用串口数+1
pComboComPort->AddString(strComPort); //添加串口号到ComboBox
CloseHandle(hCOM); //关闭串口
}
}
pComboComPort->SetCurSel(0); //选择第一个
return (intComNum); //返回有效串口数
} 好用,谢谢。! 都不好用,直接使用类库的静态方法getPortName()直接返回可用的串口端口名数组~ nongxiaoming 发表于 2012-5-7 17:00 static/image/common/back.gif
都不好用,直接使用类库的静态方法getPortName()直接返回可用的串口端口名数组~ ...
怎么实现??楼主的方法我觉得还可以啊,请赐教! raohao101 发表于 2012-5-7 17:15 static/image/common/back.gif
怎么实现??楼主的方法我觉得还可以啊,请赐教!
库里面直接有的静态方法 没明白楼上说的静态方式是啥?
页:
[1]