在c++builder中,怎么获取计算机所有的串口资源?
我用的是MSComm控件。。求大神们给点指示。。
[最优解释]
本帖最后由 ccrun 于 2012-04-12 17:55:22 编辑 从注册表中读取所有串口的信息并添加到ComboBox中:
#include <registry.hpp>
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TRegistry *reg = new TRegistry;
reg->RootKey = HKEY_LOCAL_MACHINE;
reg->OpenKey("HARDWARE\\DEVICEMAP\\SERIALCOMM", true);
cbxComlist->Sorted = false;
reg->GetValueNames(cbxComlist->Items);
cbxComlist->Items->BeginUpdate();
for (int i=0; iItems->Count; i++)
cbxComlist->Items->Strings[i] =
reg->ReadString(cbxComlist->Items->Strings[i]);
cbxComlist->Items->EndUpdate();
delete reg;
cbxComlist->Sorted = true;
}
以上代码中cbxComlist是一个ComboBox,用MSComm是打开一个指定的串口。
[其他解释]
是电脑上所有的串口吗?
在注册表 HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM 里面
[其他解释]
我也有
HANDLE h = INVALID_HANDLE_VALUE;
int ComValue;
//---------------------------------------
__fastcall TForm6::TForm6(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------
void __fastcall TForm6::FormCreate(TObject *Sender)
{
for(int i=1;i <=12;i++)
{
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)
{
DWORD err = ::GetLastError();
if(i==1)
{
if(err==2)
RadioButton1->Enabled=false;
}
if(i==2)
{
if(err==2)
RadioButton2->Enabled=false;
}
if(i==3)
{
if(err==2)
RadioButton3->Enabled=false;
}
if(i==4)
{
if(err==2)
RadioButton4->Enabled=false;
}
if(i==5)
{
if(err==2)
RadioButton5->Enabled=false;
}
if(i==6)
{
if(err==2)
RadioButton6->Enabled=false;
}
if(i==7)
{
if(err==2)
RadioButton7->Enabled=false;
}
if(i==8)
{
if(err==2)
RadioButton8->Enabled=false;
}
if(i==9)
{
if(err==2)
RadioButton9->Enabled=false;
}
if(i==10)
{
if(err==2)
RadioButton10->Enabled=false;
}
if(i==11)
{
if(err==2)
RadioButton11->Enabled=false;
}
if(i==12)
{
if(err==2)
RadioButton12->Enabled=false;
}
}
CloseHandle(h);
}
RadioButton1->Checked=true;ComValue=1;
}
最近调试过的。。。。。
[其他解释]
你好,你的那个for循环,哪里编译不过,应该怎么写?你是不是漏了东西。。