15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Проверяем наличие COM-портов

Автор: Dimitrios Papadopoulos

Многие программы предоставляют пользователю возможность выбрать последовательный порт, поэтому необходимо чтобы программа исключала ситуации, когда пользователь выберет несуществующий порт. Следующий пример компилируется в Visual Basic 5 или выше и работает как Win95-98 так и в Win NT 4.


option Explicit
'***********************************************************************
' Module         : EnumPorts
' FileName       : EnumPorts.BAS
' Author         : Dimitrios Papadopoulos
' date Created   : 10/08/00 22:07:10
'
' Copyright      : 2000, Dimitrios Papadopoulos. All Rights Reserved.
'
' Description    : Enumerates Existance of COM Ports
'
' Change History :
' 1.0       10 August 2000
'           Dimitrios Papadopoulos
'           Initial Version
'
'***********************************************************************
Type DCB
    DCBlength as Long
    BaudRate as Long
    fBitFields 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

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
'
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
    'если порт существует, то функция возвращает ненулевое значение
    Dim cc as COMMCONFIG, ccsize as Long
'
    ccsize = LenB(cc)     'получаем размер структуры COMMCONFIG
'
    EnumSerPorts = GetDefaultCommConfig("COM" + Trim(Str(port)) + Chr(0), cc, ccsize)
'
End Function