Delphi - SPcomm 控件使用

本文介绍了一个用于自动获取计算机上所有可用COM口的Delphi函数。通过注册表操作,该函数能够枚举并返回所有串行通信端口的名称列表,并对其进行排序。此方法适用于需要在应用程序中自动识别串口的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Com口函数

自动获取Com口,函数列表

procedure EnumComPorts(Ports: TStrings); //自动获取com口函数
var
KeyHandle: HKEY;
ErrCode, Index: Integer;
ValueName, Data: string;
ValueLen, DataLen, ValueType: DWORD;
TmpPorts: TStringList;
begin
ErrCode := RegOpenKeyEx(
HKEY_LOCAL_MACHINE,
'HARDWARE\DEVICEMAP\SERIALCOMM',
0,
KEY_READ,
KeyHandle);

if ErrCode <> ERROR_SUCCESS then
Exit; // raise EComPort.Create(CError_RegError, ErrCode);

TmpPorts := TStringList.Create;
try
Index := 0;
repeat
ValueLen := 256;
DataLen := 256;
SetLength(ValueName, ValueLen);
SetLength(Data, DataLen);
ErrCode := RegEnumValue(
KeyHandle,
Index,
PChar(ValueName),
Cardinal(ValueLen),
nil,
@ValueType,
PByte(PChar(Data)),
@DataLen);

if ErrCode = ERROR_SUCCESS then
begin
SetLength(Data, DataLen);
TmpPorts.Add(Data);
Inc(Index);
end
else
if ErrCode <> ERROR_NO_MORE_ITEMS then
exit; //raise EComPort.Create(CError_RegError, ErrCode);

until (ErrCode <> ERROR_SUCCESS) ;

TmpPorts.Sort;
Ports.Assign(TmpPorts);
finally
RegCloseKey(KeyHandle);
TmpPorts.Free;
end;

end;

  

procedure TForm1.FormCreate(Sender: TObject);
begin
EnumComPorts(COMBOBOX1.Items); //得到串口列表
end;

  

转载于:https://www.cnblogs.com/lee-xingxing/p/8057321.html

SPCOMM的主要属性,方法和事件 1.属性 CommName:填写COM1,COM2…等串口的名字,在打开串口前,必须填写好此值。 BaudRate:设定波特率9600,4800等,根据实际需要来定,在串口打开后也可更改波特率,实际波特率随之更改。 ParityCheck:奇偶校验。 ByteSize:字节长度_5,_6,_7,_8等,根据实际情况设定。 Parity:奇偶校验位 pBits:停止位 SendDataEmpty:这是一个布尔属性,为true时表示发送缓存为空,或者发送队列里没有信息;为False时表示表示发送缓存不为空,或者发送队列里有信息。 2.方法 Startcomm过程用于打开串口,当打开失败时通常会报错,错误主要有7种: ⑴串口已经打开 ; ⑵打开串口错误 ; ⑶文件句柄不是通讯句柄; ⑷不能够安装通讯缓存; ⑸不能产生事件 ; ⑹不能产生读进程; ⑺不能产生写进程; StopComm过程用于关闭串口,没有返回值。 函数WriteCommData(pDataToWrite: PChar;dwSizeofDataToWrite:Word ): boolean 用于发送一个字符串到写线程,发送成功返回true,发送失败返回false, 执行此函数将立即得到返回值,发送操作随后执行。函数有两个参数,其中 pdatatowrite是要发送的字符串,dwsizeofdatatowrite 是发送的长度。 3.事件 OnReceiveData : procedure (Sender: TObject;Buffer: Pointer;BufferLength: Word) of object 当输入缓存有数据时将触发该事件,在这里可以对从串口收到的数据进行处理。Buffer中是收到的数据,bufferlength是收到的数据长度。 OnReceiveError : procedure(Sender: TObject; EventMask : DWORD) 当接受数据时出现错误将触发该事件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值