Also wollte hier nochmal folgende Ergänzung machen für das Problem an den ComPorts. Nach einer etwas intensiveren Suche habe ich noch folgende alternative Routine gefunden, die die Comports auflistet. Diese scheint auch deutlich besser zu funktionieren. bei der Verwendung dieser Routine verschwindet der ComPort/ RS232-Schnittstelle nämlich nicht, wenn die open-Funktion der
DLL aufgerufen wird. dadurch konnte ich die Problematik, die hier gestellt war, lösen.
alternative Routine (hier aus der
DP):
Delphi-Quellcode:
procedure TComport.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('
Fehler beim Registry öffnen!');
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 - 1);
TmpPorts.Add(Data);
Inc(
Index);
end
else
if ErrCode <> ERROR_NO_MORE_ITEMS
then
raise Exception.Create('
Fehler Registry auslesen!');
until (ErrCode <> ERROR_SUCCESS) ;
TmpPorts.Sort;
Ports.Assign(TmpPorts);
finally
RegCloseKey(KeyHandle);
TmpPorts.Free;
end;
end;
BAMatze
2. Account Sero