Hallo Freunde,
heute nal wieder eine Merkwürdigkeit. Habe eine Software geschrieben, die sich mit Endgeräten über die serielle Schnittstelle unterhalten muß. Natürlich muß ich in der Konfiguration die Liste der verfügbaren
COM-Ports anbieten und wie üblich gibt es da Probleme mit den USB-Seriell-Wandlern und deren virtuellen
COM-Ports.
Denn diese werden über die Registry-Methode nicht gefunden
Also habe ich hier etwas geforscht und eine Methode gefunden, die übers
WMI geht:
Delphi-Quellcode:
procedure GetWin32_SerialPortInfo(TargetCombo: TComboBox);
const
WbemUser ='
';
WbemPassword ='
';
WbemComputer ='
localhost';
wbemFlagForwardOnly = $00000020;
var
FSWbemLocator : OLEVariant;
FWMIService : OLEVariant;
FWbemObjectSet: OLEVariant;
FWbemObject : OLEVariant;
oEnum : IEnumvariant;
iValue : LongWord;
begin
TargetCombo.Clear;
FSWbemLocator := CreateOleObject('
WbemScripting.SWbemLocator');
FWMIService := FSWbemLocator.ConnectServer(WbemComputer, '
root\WMI', WbemUser, WbemPassword);
FWbemObjectSet:= FWMIService.ExecQuery('
SELECT * FROM MSSerial_PortName','
WQL',wbemFlagForwardOnly);
oEnum := IUnknown(FWbemObjectSet._NewEnum)
as IEnumVariant;
while oEnum.Next(1, FWbemObject, iValue) = 0
do
begin
TargetCombo.Items.Add(
String(FWbemObject.PortName));
FWbemObject:=Unassigned;
end;
end;
Funktioniert tadellos mit Win7, Win8, Win10 - solange man Administratorrechte hat. Nun habe ich hier einen Rechner, bei dem funktioniert dies auf Teufel komm raus nicht. MadExcept wirft einen Fehlerreport heraus mit der Meldung: Nicht unterstützt. Fehlerzeile ist das ExecQuery.
Das Betriebssystem ist Windows 10, Build 10074 und ja, er hat Admin-Rechte
Mir schwant, das ich irgendwas nachinstallieren muß auf dem Rechner - nur was ? Irgendwer ne heiße Idee, was da schief ist ?
Danke für jeden Tip !