Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Probleme, serielle Ports zu ermitteln (https://www.delphipraxis.net/186097-probleme-serielle-ports-zu-ermitteln.html)

OlafSt 3. Aug 2015 10:11

Probleme, serielle Ports zu ermitteln
 
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 !

Der schöne Günther 3. Aug 2015 11:47

AW: Probleme, serielle Ports zu ermitteln
 
( Eine neue Windows-Build? 10074 war ein Vierteljahr vor der eigentlichen Veröffentlichung. )

Dalai 3. Aug 2015 12:39

AW: Probleme, serielle Ports zu ermitteln
 
Schau dir mal mit irgendeinem anderen WMI-fähigen Tool an, ob die gewünschten Informationen auf dem System verfügbar sind. Ich benutze dafür immer BgInfo, aber wahrscheinlich gibt's da komfortablere ;).

MfG Dalai

Sherlock 3. Aug 2015 13:07

AW: Probleme, serielle Ports zu ermitteln
 
So viel wie da noch bis zuletzt gestrickt wurde, würde ich erstmal das echte Windows 10 Release voraussetzen. Das genannte Build ist veraltet.

Sherlock

OlafSt 3. Aug 2015 14:08

AW: Probleme, serielle Ports zu ermitteln
 
Als mir auffiel, das das noch ein Preview ist (habe ich erst nach Erstellen des Threads realisiert), habe ich auch empfohlen, da erstmal das Final draufzuschieben. Mal sehen, ob das Problem dann verschwindet.

Stay tuned.

OlafSt 18. Aug 2015 15:05

AW: Probleme, serielle Ports zu ermitteln
 
So, es gibt Neuigkeiten.

Inzwischen wurden Tests auf drei Rechnern gemacht:

- Thinkpad, 4 Jahre alt, Windows 7 neu drauf und Updates gemacht
- Travelmate B115, brandneu, Win10 Upgrade komplett durchgeführt
- Aspire One, 3 Jahre alt, Windows 7 mit Updates auf neuestem Stand

Alle drei zeigen denselben Fehler: EOLEException "Nicht unterstützt" beim ExecQuery. Keiner der hier bei mir laufenden Rechnern zeigt dieses Problem (und es sind 5 verschiedene, verschiedenen Alters, Win 7,8,10). Inzwischen habe ich bemerkt, das auf meinem Notebook (steinalter AMD-Triplecore mit Windows 10) auch diese Macke hat.

Ich habe den Code mit dem WMI Delphi Code Creator erzeugt - flugs das Ding auf dem Notebook installiert und siehe da: Selbst das Original kriegt das nicht hin. Auch nicht als C# - Code gegen .NET 4.0 compiliert.


Jemand eine heiße Idee, was das sein kann ? Und vor allem: Wie ich nun an die COM-Port-Namen komme ?

samso 18. Aug 2015 16:46

AW: Probleme, serielle Ports zu ermitteln
 
Ich habe das in einer virtuellen Maschine (VirtualBox) mit einem Windows 10-Pro-64Bit getestet. Bei mir funktioniert die Abfrage via Registrierung immer noch. Als USB-Seriell-Wandler benutze ich ein Teil mit einem FTDI-Chip. Als Treiber wurde via automatischer Installation bei Windows 10 ein Original-FTDI-Treiber mit der Version 2.12 vom 26.08.2014 installiert.

OlafSt 18. Aug 2015 22:28

AW: Probleme, serielle Ports zu ermitteln
 
Nun, das mag ja alles ganz toll sein und bei dir (und anderen) funktionieren. Ich habe hier Kundschaft, die was weiß ich für einen Seriell-Wandler benutzen und dieser wird über die Registry-Methode nun einmal nicht angezeigt. Irgendwo (IIRC bei CodeProject) habe ich auch gelesen, das es davon abhängt, wie der Treiber diesen virtuellen COM-Port ins System integriert. Frag mich nicht nach Details, da wurden auch keine genannt ;)

Der Witz an der ganzen Sache ist: Benutze ich den Code Creator manuell, dann kann ich problemlos durchs WMI wandern und mir all die netten Gizmos da ansehen. Nur, sobald man per Programmcode abfragen will, gibts Probleme.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:02 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz