读书人

c++builder怎么查找电脑COM口

发布时间: 2012-03-27 13:44:24 作者: rapoo

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;

读书人网 >C++ Builder

热点推荐