如果列出电脑存在的串口? 近口用到usb转com口的连接的设备,需要程序自动判断连接,由于每台机上com口号不同,能否自动列出电脑上所有的com口号? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 读取注册表 reg := TRegistry.Create; try reg.RootKey := HKEY_LOCAL_MACHINE; reg.OpenKey('hardware\devicemap\serialcomm', False); st := TstringList.Create; try reg.GetValueNames(st); for i := 0 to st.Count - 1 do cbbComName.Items.Add(reg.Readstring(st.strings[i])); cbbComName.ItemIndex := 0; finally st.Free; end; reg.CloseKey; finally reg.Free; end; 枚举系统中的串口procedure 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 raise Exception.Create('枚举串口错误'); 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 raise Exception.Create('系统找不到串口'); until (ErrCode <> ERROR_SUCCESS) ; TmpPorts.Sort; Ports.Assign(TmpPorts); finally RegCloseKey(KeyHandle); TmpPorts.Free; end;end; 除了查询注册表,还有一个方法,就是使用MSComm控件,从1 到256一个一个的打开,串口,如果不报错,那么该串口存在,如果报错,那么该编号串口不存在。 求一个Webservice 操作数据库的例子,增删改,写一个就行。 SUM与关于DBGrid显示 项目经理请回答 大家帮我看看这样的if---then对不?? 怎样把byte转化成boolean啊 DELPHI板块现在没有多少人气了啊 高分求教INTRAWE的数据库问题 用什么函數可以得到電腦的網卡編號和ip地址﹐我好著急﹗ 请教:TDBGrid适合做大一点的数据库吗? 这是什么鬼城市!大家没有必要一定不要来长沙,治安太差了! 已知第三方软件的控件ID 如何获得他的句柄 ? cxgrid如何默认模糊过滤?
try
reg.RootKey := HKEY_LOCAL_MACHINE;
reg.OpenKey('hardware\devicemap\serialcomm', False);
st := TstringList.Create;
try
reg.GetValueNames(st);
for i := 0 to st.Count - 1 do
cbbComName.Items.Add(reg.Readstring(st.strings[i]));
cbbComName.ItemIndex := 0;
finally
st.Free;
end;
reg.CloseKey;
finally
reg.Free;
end;
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
raise Exception.Create('枚举串口错误'); 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
raise Exception.Create('系统找不到串口'); until (ErrCode <> ERROR_SUCCESS) ; TmpPorts.Sort;
Ports.Assign(TmpPorts);
finally
RegCloseKey(KeyHandle);
TmpPorts.Free;
end;
end;