Newsgroup: it.comp.lang.visual-basic
Titolo: problema porte Com con Win32_SerialPort

ciao a tutti sto diventando matto. devo rilevare l'elenco delle porte
com con le loro caratteristiche. banalmente portre utilizzare:
        For ni1 = 0 To My.Computer.Ports.SerialPortNames.Count - 1
            cmbCom.Items.Add(My.Computer.Ports.SerialPortNames(ni1))
        Next ni1
però cosy facendo non riesco a vedere il nome e la descrizione del
dispositivo
in sostanza vorrei vedere quale tipo di convertitore usb-232 ho
collegato alla porta dal nome. allora furbamente ho provato con:
        Dim mos As ManagementObjectSearcher = New
ManagementObjectSearcher("Select * from Win32_SerialPort")
        For Each mo In moc
 
lb.Items.Add("----------------------------------------------")
            For Each pd In mo.Properties
                On Error Resume Next
                lb.Items.Add(pd.Name.ToString() & " == " &
pd.Value.ToString())
            Next
        Next
che dovrebbe elencarmi tutte le com del sistema ma niente... neanche
una sapete perchè?

Ti fa vedere solo le seriali.. giusto ? E non quelle con i cavetti USB-
seriale.
Usando "Win32_PnPEntity" e controllando il GUI 4D36E978-E325-11CE-
BFC1-08002BE10318 vedi le porte..
        Dim mo As Management.ManagementObjectCollection
        Dim moc As System.Management.ManagementObjectSearcher = New
System.Management.ManagementObjectSearcher("Select * from
Win32_PnPEntity")
        Dim i As Management.ManagementObject
        mo = moc.Get()
        Debug.Print(" ------------------------- ")
        For Each i In mo
            If (i.Item("ClassGUID").ToString = "{4D36E978-E325-11CE-
BFC1-08002BE10318}") Then
                Debug.Print(CStr(i.Item("Name")))
            End If
        Next
        Debug.Print(" ------------------------- ")


 - Mostra testo tra virgolette -

Penso che cosě vada ancora meglio, perchč il codice che segue ti

Interessante, sai se si puň implementare su VB6?
Io ho cercato una strada e alla fine ho usato uno script con la WMI partendo da
questo sotto, ma se potessi evitare di inserire il riferimento al fso sarebbe
meglio.
________________________
On Error Resume Next
Computer = "."
Set FileSystem = CreateObject("Scripting.FileSystemObject")
 Set TextFile = FileSystem.OpenTextFile ("c:\SerialPorts.txt") 
   TextFile.WriteLine "Serial Ports:"
Set WMIService = GetObject("winmgmts:\\" & Computer & "\root\cimv2")
Set Items = WMIService.ExecQuery("Select * from Win32_PnPEntity",,48)
For Each SubItems in Items
 If InStr(SubItems.Caption, "COM")>o Then
    TextFile.WriteLine 
    TextFile.WriteLine "Name: " & SubItems.Name
    TextFile.WriteLine "PNPDeviceID: " & SubItems.PNPDeviceID
    TextFile.WriteLine "Status: " & SubItems.Status
 End if
Next
 TextFile.Close
' Set OutFile = CreateObject("WScript.Shell")
' OutFile.Run "notepad.exe c:\SerialPorts.txt",1,True
__________________________
--
ciao
  Stefano

 riferimento al fso sarebbe meglio.
Ma lo Scripting serve solo per scrivere su file da VBScript, in questo caso.
Puoi comodamente farne a meno, il codice VB6 qui sotto non necessita di 
riferimenti esterni (per WMI usa il late binding):
Dim WMIService As Object
Dim Items, Subitems
    Set WMIService = GetObject("winmgmts:\\.\root\cimv2")
    Set Items = WMIService.ExecQuery("Select * from Win32_PnPEntity", , 48)
    For Each Subitems In Items
        If InStr(Subitems.Caption, "COM") > 0 Then
           Combo1.AddItem Subitems.Name
        End If
    Next
Bye
Raf 

 If InStr(SubItems.Caption, "COM") >  0 Then


Raf 
Grazie  Raf
--
ciao
  Stefano