Newsgroup: it.comp.lang.visual-basic
Titolo: Porte seriali

Come faccio ad evere l'elenco delle porte seriali disponibili sulla mia
macchina?
Esempio se ho COM1,COM2,COM5 installate nel sistema vorrei recuperare un
array tipo
    (1,2,5)
Grazie e buon anno

    (1,2,5)
Le porte seriali sono enumerate nel registro di sistema.
La seccatura e' che la posizione in detto registro non e' uguale per
tutte le versioni di windows.
Un sistema un po' barbaro, ma indipendente dalle versioni, e' quello
di cercare di aprire le porte e vedere cosa succede.
Includo qui un programma funzionante, che sfrutta l'SDK e fa a meno di
dll e ocx aggiuntivi, che cerca le porte seriali dalla 1 alla 256 e le
memorizza in una collection. Se preferisci un array, puoi ottenerlo
con una piccola modifica.
<esempio>
Option Explicit
Private Const GENERIC_READ = &H80000000
Private Const OPEN_EXISTING = 3&
Private Const INVALID_HANDLE_VALUE = -1&
Private Const ERROR_ACCESS_DENIED = 5&
Private Const ERROR_GEN_FAILURE = 31&
Private Const ERROR_SHARING_VIOLATION = 32&
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As
Long) As Long
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA"
( _
                    ByVal lpFileName As String, ByVal dwDesiredAccess
As Long, _
                    ByVal dwShareMode As Long, lpSecurityAttributes As
Any, _
                    ByVal dwCreationDisposition As Long, ByVal
dwFlagsAndAttributes As Long, _
                    ByVal hTemplateFile As Long _
                    ) As Long
Private Declare Function GetLastError Lib "kernel32" () As Long
' ------------------------------------------------------------------
Public Function EnumerateSerialPorts() As Collection
    Dim ports       As Collection
    Dim i           As Long
    Dim hPort       As Long
    Dim sPort       As String
    Dim errNumber   As Long
    Dim exists      As Boolean
 
    Set ports = New Collection
    For i = 1 To 255
        sPort = "\\.\COM" & CStr(i)
        hPort = CreateFile(sPort, GENERIC_READ, 0&, ByVal 0&,
OPEN_EXISTING, 0&, 0&)
        If (hPort = INVALID_HANDLE_VALUE) Then
            errNumber = GetLastError()
            exists = (errNumber = ERROR_ACCESS_DENIED) Or _
                (errNumber = ERROR_GEN_FAILURE) Or _
                (errNumber = ERROR_SHARING_VIOLATION)
        Else
            CloseHandle (hPort)
            exists = True
        End If
        If (exists) Then
            ports.Add "COM" & CStr(i)
        End If
    Next i
    Set EnumerateSerialPorts = ports
End Function    '// EnumerateSerialPorts
Public Sub Main()
    Dim ports       As Collection
    Dim portName    As Variant
    Set ports = EnumerateSerialPorts()
    For Each portName In ports
        MsgBox CStr(portName), vbInformation
    Next portName
End Sub
</esempio>
-- 
hth, hal
che stasera si e' fagocitato una bella torta di spinaci 
e si sente in pace con il mondo :-)

 ha scritto nel messaggio
news:61911vgdb0312rkig...@4ax.com...


    Proprietą in sola lettura.
Cerca su msdn:
INFO: Receiving Data Using the MSComm Control's OnComm Event 
Q194922
-- 
hth, hal
p.s. per favore non quotare piu' come hai fatto prima...
e non dire non ne sai nulla perche' il tuo nick e' da
un po' che circola da queste parti ;-)