读书人

delphi 里面如何检测com口是不是存在

发布时间: 2012-12-15 15:16:03 作者: rapoo

delphi 里面怎么检测com口是不是存在
如题,最好有代码,
是通过判断键值 \Device\Serial0 就可以吗?准确吗?只要判断这个键值就可以区分有没有com口吗
还是有其他的方案,请高手指点下。
[解决办法]
procedure EnumComPorts(Ports: TStrings);
procedure Tfrmsetup.EnumComPorts(Ports: TStrings);
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
begin
Exit;
end ;

//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;
EnumComPorts(COMNumberCoMboBox.Items);

读书人网 >.NET

热点推荐