Newsgroup: it.comp.lang.visual-basic
Titolo: Controllare le Com Port presenti nel PC

>
www.sys-media.it

 sempre come valore di ritorno -1.
Ho controllato meglio con la funzione err.LastDLLError. Con le porte
installate ho come valore di ritorno 5(ACCESS_DENIED, vuol dire che già è in
uso) mentre con quelle non installate ho 2(FILE NON TROVATO). Il bello è che
pur essendo installate varie porte con numeri a 2 cifre (COM10 COM16 COM30)
io ho sempre di ritorno il valore 2.
Ho provato anche su di un altro PC ed il risultato è lo stesso!
--
Damiano Vitulli

Il 23/12/2003 16.36, Damiano Vitulli scrisse:

Puo' essere che porte con numeri elevati non vengano gestite 
direttamente dal S.O. ma sia necessario passare da un driver (che ad 
esempio inizializza la porta).
Mi pare anche che molto tempo fa qualcuno avesse postato un metodo per 
vedere l'elenco delle porte installate. Se cerchi con google ...
http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&threadm=T6eI6.9335%24eJ6.338151%40news.infostrada.it&rnum=1&prev=/groups%3Fhl%3Den%26lr%3D%26ie%3DISO-8859-1%26q%3Dnumero%2Bporte%2Bseriali%2Bgbc%26btnG%3DGoogle%2BSearch%26meta%3D
ciao
	maxx
-- 
NOSPAM: Rimuovere i trattini dallo username!
Cut hyphens from my username!

nel PC.
Puoi usare le API  Questa va, l'ho presa da un esempio in VC e
adattata:
Private Type DCB
        DCBlength As Long
        BaudRate As Long
        fBinary As Long
        fParity As Long
        fOutxCtsFlow As Long
        fOutxDsrFlow As Long
        fDtrControl As Long
        fDsrSensitivity As Long
        fTXContinueOnXoff As Long
        fOutX As Long
        fInX As Long
        fErrorChar As Long
        fNull As Long
        fRtsControl As Long
        fAbortOnError As Long
        fDummy2 As Long
        wReserved As Integer
        XonLim As Integer
        XoffLim As Integer
        ByteSize As Byte
        Parity As Byte
        StopBits As Byte
        XonChar As Byte
        XoffChar As Byte
        ErrorChar As Byte
        EofChar As Byte
        EvtChar As Byte
        wReserved1 As Integer
End Type
'' in VisualC
'typedef struct _DCB {  DWORD DCBlength;  DWORD BaudRate;  DWORD
fBinary  :1;  DWORD fParity  :1;  DWORD fOutxCtsFlow  :1;
'DWORD fOutxDsrFlow  :1;  DWORD fDtrControl  :2;  DWORD
fDsrSensitivity  :1;  DWORD fTXContinueOnXoff  :1;
'DWORD fOutX  :1;  DWORD fInX  :1;  DWORD fErrorChar  :1;  DWORD fNull
:1;  DWORD fRtsControl  :2; DWORD fAbortOnError  :1;
'DWORD fDummy2  :17;  WORD wReserved;  WORD XonLim;  WORD XoffLim;
BYTE ByteSize; BYTE Parity;  BYTE StopBits;
'char XonChar;  char XoffChar;  char ErrorChar;  char EofChar;  char
EvtChar;  WORD wReserved1;} DCB;
Private Type COMMCONFIG
    dwSize As Long
    wVersion As Integer
    wReserved As Integer
    dcbx As DCB
    dwProviderSubType As Long
    dwProviderOffset As Long
    dwProviderSize As Long
    wcProviderData As Byte
End Type
'' in VisualC
'typedef struct _COMM_CONFIG {  DWORD dwSize;  WORD wVersion;
' WORD wReserved;  DCB dcb ;DWORD dwProviderSubType;
 'DWORD dwProviderOffset;  DWORD dwProviderSize;  WCHAR
'wcProviderData[1];} COMMCONFIG, *LPCOMMCONFIG;
Private Declare Function GetDefaultCommConfig Lib "kernel32" Alias
"GetDefaultCommConfigA" (ByVal lpszName As String, lpCC As COMMCONFIG,
lpdwSize As Long) As Long
----------------
Public Function EnumSerPorts(port As Integer) As Long
'returns non-zero value if the port exists
        Dim cc As COMMCONFIG, ccsize As Long
        ccsize = LenB(cc)     'gets the size of COMMCONFIG structure
        EnumSerPorts = GetDefaultCommConfig("COM" & CStr(port) &
Chr(0), cc, ccsize)
       ' Debug.Print Err.LastDllError
End Function
-----------------
Private Sub Form_Load()
 Dim Y As Integer
 For Y = 1 To 4   'OpCOM è un optionbutton
  If EnumSerPorts(Y) > 0 Then OpCOM(Y).Value = True
 Next
  Select Case CommPort
    Case 1: OpCOM(1).Value = True
    Case 2: OpCOM(2).Value = True
    Case 3: OpCOM(3).Value = True
    Case 4: OpCOM(4).Value = True
  End Select
(..........)
 
End Sub

 vedere l'elenco delle porte installate. Se cerchi con google ...
Wow! Non avevo mai usato la ricerca sui *gruppi* con google... trovi proprio
tutto! Ho trovato un altro articolo che utilizza la classe WMI era proprio
quello che cercavo!
Grazie!!
--
Damiano Vitulli

 adattata:
Questa si che va, l'ho provata! Oltretutto non devo neanche scomodare le
WMI...
Grazie!!
