如何取得计算机的COM口号?

BlueSea_zl 2007-04-28 03:40:17
计算机上可采用USB转串口的线(内带usb转串口芯片),可能是COM5, COM8之类的新串口名.
我用什么方法动态地取得目前计算机支持的各个串口号呢?
程序怎么知道计算机上有COM5还是没有COM5?
...全文
315 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
BOOT2011BOOT 2012-03-24
  • 打赏
  • 举报
回复
上面这个函数在VS2010中除了变量类型方面的一些小问题,还是可以用的~~
BlueSea_zl 2007-04-29
  • 打赏
  • 举报
回复
谢谢楼上的两位,我自己找到了.
我用的是C++Builder,他有个tregistry类,调用tregistry的getvalues方法可以获得当前键的所有值.
当然,事先tregistry对象要open"HARDWARE\DEVICEMAP\SERIALCOMM"这个键. 这样就能获得所有的串口号了

yctin 2007-04-28
  • 打赏
  • 举报
回复
//---------------------------------------------------------------------------
//从注册表取得所有串口名
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;
}
//---------------------------------------------------------------------------
//将串口名加入combobox cbPort中
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char PortName[20][80];
int NumOfPort = GetSerialPortsReg(&*PortName);

cbPort->Items->Clear();
if ((NumOfPort)) {
for (int i = 0; i < NumOfPort; i++) {
cbPort->Items->Add(PortName[i]);
}
}
}
//---------------------------------------------------------------------------
cczlp 2007-04-28
  • 打赏
  • 举报
回复
在注册表中:
HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM

COM1是\Device\Serial0
COM2是\Device\Serial1
...

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧