c++builder如何查找电脑COM口
请教下,我用MSCOMM控件编写了一个串口通信的软件,我想实现软件自动识别电脑COM口?请问下各位大侠如何实现?
[解决办法]
遍历打开串口号(如COM1-COM16) 如果打开成功说明这个串口号是存在的
[解决办法]
为啥不用现成的组件呢?
[解决办法]
从注册中表枚举就行了:
HKLM\HARDWARE\DEVICEMAP\SERIALCOMM
[解决办法]
摘录了一段,自己改
- C/C++ code
TRegistry *RegistryBoot = new TRegistry(KEY_READ); TStringList *NameList = new TStringList ; //RegistryBoot = new TRegistry; ComboBox1->Items->Clear(); RegistryBoot->RootKey = HKEY_LOCAL_MACHINE; RegistryBoot->OpenKey("HARDWARE\\DEVICEMAP\\SERIALCOMM",false); RegistryBoot->GetValueNames(NameList); //ShowMessage(NameList->Count); for(int i = 0;i < NameList->Count ;i++ ) { AnsiString Com = RegistryBoot->ReadString(NameList->Strings[i]); //ShowMessage(Com); ComboBox1->Items->Add(Com); } RegistryBoot->CloseKey() ; delete RegistryBoot; delete NameList;
[解决办法]
//ComPort 考: http://topic.csdn.net/t/20050217/10/3786966.html
HANDLE h=INVALID_HANDLE_VALUE;
for(int i=1;i<33;i++) //逐一ComPort
{
AnsiString ComName="Com"+String(i);
h=::CreateFile(ComName.c_str(),GENERIC_READ | GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
if(h==INVALID_HANDLE_VALUE) //若法打指定ComPort
{
DWORD err=::GetLastError() ; //取信息
if(err!=2) //若err=2,此COMPort未安
{
mmo1->Lines ->Add(ComName+" Error: "+AnsiString(err));
}
}
else
{
cbbPort ->Items ->Add(ComName);
cbPort2 ->Items ->Add(ComName);
}
CloseHandle(h);
}
//ComPort 考: http://topic.csdn.net/t/20050217/10/3786966.html
[解决办法]
我有自己用,不,被我改了一下
[解决办法]
TStringList *tmp = new TStringList; //自取得COM Port的量
TRegistry *reg = new TRegistry;
reg->RootKey = HKEY_LOCAL_MACHINE;
if(reg->OpenKey("\\HARDWARE\\DEVICEMAP\\SERIALCOMM",false))
{
reg->GetValueNames(tmp);
cbbCom->Clear();
for(int i=0;i<tmp->Count;i++)
{
AnsiString asCOM = reg->ReadString(tmp->Strings[i]);
cbbCom->Items->Add(asCOM);
}
reg->CloseKey();
}
delete reg;
delete tmp;