procedure TForm1.Button1Click(Sender: TObject); var reg: TRegistry; st: Tstrings; i: Integer; begin 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 Memo1.Lines.Add(reg.Readstring(st.strings[i])); finally st.Free; end; reg.CloseKey; finally reg.Free; end; end;
雷同贴!procedure TFrmCommSet.GetComm; var Registry: TRegistry; str : string; i: integer; begin cbComm.Items.Clear; Registry := TRegistry.Create(KEY_READ); try Registry.RootKey := HKEY_LOCAL_MACHINE; // False because we do not want to create it if it doesn't exist Registry.OpenKey('HARDWARE\DEVICEMAP\SERIALCOMM', False); for i := 0 to 100 do begin str := '\Device\Serial' + inttostr(i); str := Registry.ReadString(str); if str <> '' then cbComm.Items.Add(str); end; finally Registry.Free; end; cbComm.ItemIndex := 0; end;
uses Registry; procedure TForm1.Button1Click(Sender: TObject); var reg: TRegistry; st: Tstrings; i: Integer; begin 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 Memo1.Lines.Add(reg.Readstring(st.strings[i])); finally st.Free; end; reg.CloseKey; finally reg.Free; end; 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 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;
function GetComPortList: TStrings; var Reg: TRegistry; sts1,sts2: TStrings; i: Integer; RegPath: string; //注册表中存放串口路径 begin Result := nil; Reg := TRegistry.Create; try sts1 := TStringList.Create; try sts2 := TStringList.Create; Reg.RootKey := HKEY_LOCAL_MACHINE; RegPath := 'hardware\devicemap\SerialComm'; if Reg.OpenKey(RegPath, False) then begin Reg.GetValueNames(sts1); for i := 0 to sts1.Count-1 do sts2.Add(Reg.ReadString(sts1.Strings[i])); end; Result := sts2; sts2 := nil; finally FreeAndNil(sts1); end; finally Reg.CloseKey; FreeAndNil(Reg); end; end;
procedure TForm1.Button1Click(Sender: TObject);
var
reg: TRegistry;
st: Tstrings;
i: Integer;
begin
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
Memo1.Lines.Add(reg.Readstring(st.strings[i]));
finally
st.Free;
end;
reg.CloseKey;
finally
reg.Free;
end;
end;
var
Registry: TRegistry;
str : string;
i: integer;
begin
cbComm.Items.Clear;
Registry := TRegistry.Create(KEY_READ);
try
Registry.RootKey := HKEY_LOCAL_MACHINE;
// False because we do not want to create it if it doesn't exist
Registry.OpenKey('HARDWARE\DEVICEMAP\SERIALCOMM', False);
for i := 0 to 100 do
begin
str := '\Device\Serial' + inttostr(i);
str := Registry.ReadString(str);
if str <> '' then
cbComm.Items.Add(str);
end;
finally
Registry.Free;
end;
cbComm.ItemIndex := 0;
end;
Registry; procedure TForm1.Button1Click(Sender: TObject);
var
reg: TRegistry;
st: Tstrings;
i: Integer;
begin
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
Memo1.Lines.Add(reg.Readstring(st.strings[i]));
finally
st.Free;
end;
reg.CloseKey;
finally
reg.Free;
end;
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
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;
function GetComPortList: TStrings;
var
Reg: TRegistry;
sts1,sts2: TStrings;
i: Integer;
RegPath: string; //注册表中存放串口路径
begin
Result := nil;
Reg := TRegistry.Create;
try
sts1 := TStringList.Create;
try
sts2 := TStringList.Create;
Reg.RootKey := HKEY_LOCAL_MACHINE;
RegPath := 'hardware\devicemap\SerialComm';
if Reg.OpenKey(RegPath, False) then
begin
Reg.GetValueNames(sts1);
for i := 0 to sts1.Count-1 do
sts2.Add(Reg.ReadString(sts1.Strings[i]));
end;
Result := sts2;
sts2 := nil;
finally
FreeAndNil(sts1);
end;
finally
Reg.CloseKey;
FreeAndNil(Reg);
end;
end;