tags:

views:

58

answers:

1

My requirement is to detect port no to which any communication device is connected

also how we can add drivers of any communication device in package which can be installed along with installation of my package

+1  A: 
Option Explicit
'******************************************************************************
' Description: Scans machine using the WIN32 API for all available comm hardware
' Usage:    main program calls the 'CommSettings' sub, passing the
'           name of the communications control and a combobox name.
'******************************************************************************

Dim CommCntrl             As Control                                  ' the communications control
Dim cmboPort              As Control                                  ' combobox to populate
Dim bNoComm               As Boolean

Private Const MAX_COMM = 16                                           ' 32 max port # to check

Private Const GENERIC_READ = &H80000000
Private Const GENERIC_WRITE = &H40000000
Private Const OPEN_EXISTING = 3
Private Const FILE_FLAG_OVERLAPPED = &H40000000
Private Const INVALID_HANDLE_VALUE = -1

Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" _
                                    (ByVal lpFileName As String, _
                                     ByVal dwDesiredAccess As Long, _
                                     ByVal dwShareMode As Long, _
                                     ByVal lpSecurityAttributes As String, _
                                     ByVal dwCreationDisposition As Long, _
                                     ByVal dwFlagsAndAttributes As Long, _
                                     ByVal hTemplateFile As String) As Long

Private Declare Function CloseHandle Lib "kernel32" ( _
                                     ByVal hObject As Long) As Long


Public Sub GetPorts(serialCntrl As Control, comboBox As Control)
    '******************************************************************************
    ' Usage:    Pass the name of the communications control, a combo box, and the
    '           current com port setting in the calling routine.
    '******************************************************************************

    Dim iCntr             As Integer                                  ' loop counter
    Dim hRet              As Long                                     ' api return value
    Dim sCom              As String                                   ' comm port name

    On Error Resume Next

    Set cmboPort = comboBox

    Set CommCntrl = serialCntrl
    Err = 0

    cmboPort.Clear

    ' Close the port if it's open
    If CommCntrl.PortOpen = True Then
        CommCntrl.PortOpen = False
        DoEvents
    Else
        bNoComm = True
    End If

    ' Scan for all possible hardware so we can display all available ports
    ' in the combo box. Dynamically adjusts for PC's with addin cards
    For iCntr = 1 To MAX_COMM
        ' try to open the port.
        ' \\.\ required for ports > 9, works for all ports
        sCom = "\\.\Com" & CStr(iCntr) & vbNullChar
        hRet = CreateFile(sCom, GENERIC_READ Or _
                                GENERIC_WRITE, 0, vbNullString, OPEN_EXISTING, _
                          FILE_FLAG_OVERLAPPED, vbNullString)

        If hRet <> INVALID_HANDLE_VALUE Then
            hRet = CloseHandle(hRet)
            cmboPort.AddItem Format$(iCntr)
            Debug.Print iCntr
        Else
            ' dll error 5 = already open
            ' dll error 2 = no harware
            If Err.LastDllError = 5 Then
                cmboPort.AddItem Format$(iCntr) & " - Busy"
            End If
        End If
    Next

End Sub
Cidtek