首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

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

2012-03-27 
c++builder如何查找电脑COM口请教下,我用MSCOMM控件编写了一个串口通信的软件,我想实现软件自动识别电脑CO

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;

热点排行