一般的功能我都使用了,但是我想问一下怎么才能读取当前有那些串口,比如:当前有COM1,COM2.我怎么才知道有呢,当然我可以从“设备管理器->端口”中看到,或者双击串口控件的图标,在端口设置中也可以看到当前存在的串口。当是若我要自动显示出有哪些串口,应该如何处理呢?比如说要显示在memo中显示“当前有COM1和com3”。希望能尽早回复。一下是我的初始化。
void __fastcall TForm1::FormCreate(TObject *Sender)
{
try
{
YbCommDevice1->Active = true;
}
catch(Exception &e)
{
ShowMessage("YbCommDevice1: "+e.Message);
if(!YbCommDevice1->SettingsDialog(this,true))
Application->Terminate();
}
YbCommDevice1->PackageSize = 4096; //最大可发送 4096 个字节的数据包
YbCommDevice1->PackageType = cptFrameTimeout; //使用超时的方法识别每帧数据
YbCommDevice1->UsePackage = true; //启动 Package
Memo1->Lines->Clear();
Memo1->Lines->Add("等待接收...");
}
4 个解决方案
#1
我有很长时间没有做串口通讯的程序了,呵呵。另外,Victor组件的作者是Victor chen,也就是cppfans.com的站长,技术很不错的,有Victor组件方面的问题可以直接找他咨询。
列举本机可用的串口,可以读取注册表:
列举本机可用的串口,可以读取注册表:
//---------------------------------------------------------------------------
// 列举本机可用的串口
#include <registry.hpp>
int CrnGetComList(TStrings *pComList)
{
TRegistry *reg = new TRegistry;
TStringList *pValueList = new TStringList;
pComList->Clear();
try
{
reg->RootKey = HKEY_LOCAL_MACHINE;
reg->OpenKey("HARDWARE\\DEVICEMAP\\SERIALCOMM", false);
reg->GetValueNames(pValueList);
for(int i=0; i<pValueList->Count; i++)
pComList->Add(reg->ReadString(pValueList->Strings[i]));
reg->CloseKey();
}
__finally
{
delete pValueList;
delete reg;
}
return pComList->Count;
}
//---------------------------------------------------------------------------
// 测试:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
CrnGetComList(Memo1->Lines);
}
#2
老妖太强啦,这么快就解决了。我验证过了,可以用,谢谢啦
#3
妖哥,想问你另外一个问题,如果我要设置一个变量,软件关闭后,重新打开读取它,它不会初始化。怎么搞呢?比如:第一次打开时P=5;然后修改为P=6;让第二次打开软件P=6,应该把P写到哪里呢?如果是硬件我会写到Flash或EEPROM中,但是在builder中我不会怎么写。
#4
#include <inifiles.hpp>
//---------------------------------------------------------------------------
// 写入配置文件
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int p = 5; // 要记录的值
TIniFile *ini = new TIniFile(ExtractFilePath(ParamStr(0)) + "config.ini");
try
{
ini->WriteInteger("我的配置", "p", p);
}
__finally
{
delete ini;
}
}
//---------------------------------------------------------------------------
// 从配置文件读取
void __fastcall TForm1::Button2Click(TObject *Sender)
{
int p;
TIniFile *ini = new TIniFile(ExtractFilePath(ParamStr(0)) + "config.ini");
try
{
p = ini->ReadInteger("我的配置", "p", -1); // 最后一个参数为默认值
}
__finally
{
delete ini;
}
ShowMessage(IntToStr(p));
}
#1
我有很长时间没有做串口通讯的程序了,呵呵。另外,Victor组件的作者是Victor chen,也就是cppfans.com的站长,技术很不错的,有Victor组件方面的问题可以直接找他咨询。
列举本机可用的串口,可以读取注册表:
列举本机可用的串口,可以读取注册表:
//---------------------------------------------------------------------------
// 列举本机可用的串口
#include <registry.hpp>
int CrnGetComList(TStrings *pComList)
{
TRegistry *reg = new TRegistry;
TStringList *pValueList = new TStringList;
pComList->Clear();
try
{
reg->RootKey = HKEY_LOCAL_MACHINE;
reg->OpenKey("HARDWARE\\DEVICEMAP\\SERIALCOMM", false);
reg->GetValueNames(pValueList);
for(int i=0; i<pValueList->Count; i++)
pComList->Add(reg->ReadString(pValueList->Strings[i]));
reg->CloseKey();
}
__finally
{
delete pValueList;
delete reg;
}
return pComList->Count;
}
//---------------------------------------------------------------------------
// 测试:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
CrnGetComList(Memo1->Lines);
}
#2
老妖太强啦,这么快就解决了。我验证过了,可以用,谢谢啦
#3
妖哥,想问你另外一个问题,如果我要设置一个变量,软件关闭后,重新打开读取它,它不会初始化。怎么搞呢?比如:第一次打开时P=5;然后修改为P=6;让第二次打开软件P=6,应该把P写到哪里呢?如果是硬件我会写到Flash或EEPROM中,但是在builder中我不会怎么写。
#4
#include <inifiles.hpp>
//---------------------------------------------------------------------------
// 写入配置文件
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int p = 5; // 要记录的值
TIniFile *ini = new TIniFile(ExtractFilePath(ParamStr(0)) + "config.ini");
try
{
ini->WriteInteger("我的配置", "p", p);
}
__finally
{
delete ini;
}
}
//---------------------------------------------------------------------------
// 从配置文件读取
void __fastcall TForm1::Button2Click(TObject *Sender)
{
int p;
TIniFile *ini = new TIniFile(ExtractFilePath(ParamStr(0)) + "config.ini");
try
{
p = ini->ReadInteger("我的配置", "p", -1); // 最后一个参数为默认值
}
__finally
{
delete ini;
}
ShowMessage(IntToStr(p));
}