我们在windows编程时经常会使用串口,现在很多PC已经没有内置串口了,很多是使用USB转RS232的东东实现,一般情况下,我们都会有一个串口设置的对话框,包含串口号,波特率,数据位等。
程序在运行时如何能否知道到底有哪些串口呢?下面是从网上下载的一段程序,使用C++ builder 2009下调用,还是好用的,贴出来,供有需要的人使用。
/* 函数名 : GetSerialPortsReg
* 说 明 : 通过注册表枚举系统串口数量,并列出所有串口的系统名
*
* 参 数 : pListStr, 串口名称列表
* 返回值 : int, 系统串口个数
*/
int GetSerialPortsReg(char (*pListStr)[80])
{
HKEY hKey;
LPCTSTR data_Set="HARDWARE//DEVICEMAP//SERIALCOMM//";
long ret0 = (::RegOpenKeyEx(HKEY_LOCAL_MACHINE, data_Set, 0, KEY_READ, &hKey));
if(ret0 != ERROR_SUCCESS)
{
return -1;
}
int i = 0;
CHAR Name[25];
UCHAR szPortName[80];
LONG Status;
DWORD dwIndex = 0;
DWORD dwName;
DWORD dwSizeofPortName;
DWORD Type;
dwName = sizeof(Name);
dwSizeofPortName = sizeof(szPortName);
do
{
Status = RegEnumValue(hKey, dwIndex++, Name, &dwName, NULL, &Type,
szPortName, &dwSizeofPortName);
if((Status == ERROR_SUCCESS)||(Status == ERROR_MORE_DATA))
{
if (pListStr != NULL)
{
memcpy(*(pListStr + i), (LPCSTR)szPortName, 80);
}
i++;
}
} while((Status == ERROR_SUCCESS)||(Status == ERROR_MORE_DATA));
RegCloseKey(hKey);
return i;
}