Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

пЕРЕХОДНИК Usb - Com

2.1K
23 февраля 2004 года
caca
25 / / 01.08.2003
Привет всем!!!!

У такая проблемка: есть переходник USB - COM (и драйвер к нему установлен).Он "говорит" винде, что он - COM3. Но при обращении к COM3 выдает ошибку, если переходник не вставлен. Ошибка пропадает, как только переходник втыкаешь в USB. Так вот, может кто подскажет, как отследить момент включения переходника в USB?
Заранее спасибо за любой совет.
258
24 февраля 2004 года
SergeySV
1.5K / / 19.03.2003
Цитата:
Originally posted by caca
Привет всем!!!!

У такая проблемка: есть переходник USB - COM (и драйвер к нему установлен).Он "говорит" винде, что он - COM3. Но при обращении к COM3 выдает ошибку, если переходник не вставлен. Ошибка пропадает, как только переходник втыкаешь в USB. Так вот, может кто подскажет, как отследить момент включения переходника в USB?
Заранее спасибо за любой совет.



Можно проверять по таймеру наличие еще одного COM порта, были там не очень сложные API функции для этого.

1.9K
26 февраля 2004 года
Putch
64 / / 22.02.2003
Цитата:
Originally posted by caca
Привет всем!!!!

У такая проблемка: есть переходник USB - COM (и драйвер к нему установлен).Он "говорит" винде, что он - COM3. Но при обращении к COM3 выдает ошибку, если переходник не вставлен. Ошибка пропадает, как только переходник втыкаешь в USB. Так вот, может кто подскажет, как отследить момент включения переходника в USB?
Заранее спасибо за любой совет.





Bekonnekt небось переходник
Дрова для мобилы пишешь?

2.1K
26 февраля 2004 года
caca
25 / / 01.08.2003
Нет, пишу я не для мобилы. За советы, конечно, спасибо, но дело в том, что эта вещь на разных машинах становится на разные порты. Получается, по таймеру нужно проверять 255 портов - не появился ли новый порт. Как то это не очень хотелось бы... А что там про API было? Можно по подробнее?
258
26 февраля 2004 года
SergeySV
1.5K / / 19.03.2003
Как посмотреть доступные порты

Запусти Start_PortsInComp и посмотри в окне Immediate Window (в дебаге вообщем). Там выводятся токо поле pPortName, но можешь и другие поля структуры PORT_INFO_ задать и поглядеть на них.

Модуль:
Код:
Option Explicit

Private Type PORT_INFO_2
    pPortName As String
    pMonitorName As String
    pDescription As String
    fPortType As Long
    Reserved As Long
End Type
Private Type API_PORT_INFO_2
    pPortName As Long
    pMonitorName As Long
    pDescription As Long
    fPortType As Long
    Reserved As Long
End Type

Private Declare Function EnumPorts Lib "winspool.drv" Alias "EnumPortsA" (ByVal pName As String, ByVal Level As Long, ByVal lpbPorts As Long, ByVal cbBuf As Long, pcbNeeded As Long, pcReturned As Long) As Long
Private Declare Function lstrlenW Lib "kernel32" (ByVal lpString As Long) As Long
Private Declare Sub CopyMem Lib "kernel32" Alias "RtlMoveMemory" (pTo As Any, uFrom As Any, ByVal lSize As Long)
Private Declare Function HeapAlloc Lib "kernel32" (ByVal hHeap As Long, ByVal dwFlags As Long, ByVal dwBytes As Long) As Long
Private Declare Function GetProcessHeap Lib "kernel32" () As Long
Private Declare Function HeapFree Lib "kernel32" (ByVal hHeap As Long, ByVal dwFlags As Long, lpMem As Any) As Long
Dim Ports(0 To 100) As PORT_INFO_2

Public Function TrimStr(strName As String) As String
    'Finds a null then trims the string
    Dim x As Integer
    x = InStr(strName, vbNullChar)
    If x > 0 Then TrimStr = Left(strName, x - 1) Else TrimStr = strName
End Function

Public Function LPSTRtoSTRING(ByVal lngPointer As Long) As String
    Dim lngLength As Long
    'Get number of characters in string
    lngLength = lstrlenW(lngPointer) * 2
    'Initialize string so we have something to copy the string into
    LPSTRtoSTRING = String(lngLength, 0)
    'Copy the string
    CopyMem ByVal StrPtr(LPSTRtoSTRING), ByVal lngPointer, lngLength
    'Convert to Unicode
    LPSTRtoSTRING = TrimStr(StrConv(LPSTRtoSTRING, vbUnicode))
End Function

'Use ServerName to specify the name of a Remote Workstation i.e. "//WIN95WKST"
'or leave it blank "" to get the ports of the local Machine
Public Function GetAvailablePorts(ServerName As String) As Long
    Dim ret As Long
    Dim PortsStruct(0 To 100) As API_PORT_INFO_2
    Dim pcbNeeded As Long
    Dim pcReturned As Long
    Dim TempBuff As Long
    Dim i As Integer
    'Get the amount of bytes needed to contain the data returned by the API call
    ret = EnumPorts(ServerName, 2, TempBuff, 0, pcbNeeded, pcReturned)
    'Allocate the Buffer
    TempBuff = HeapAlloc(GetProcessHeap(), 0, pcbNeeded)
    ret = EnumPorts(ServerName, 2, TempBuff, pcbNeeded, pcbNeeded, pcReturned)
    If ret Then
        'Convert the returned String Pointer Values to VB String Type
        CopyMem PortsStruct(0), ByVal TempBuff, pcbNeeded
        For i = 0 To pcReturned - 1
            Ports(i).pDescription = LPSTRtoSTRING(PortsStruct(i).pDescription)
            Ports(i).pPortName = LPSTRtoSTRING(PortsStruct(i).pPortName)
            Ports(i).pMonitorName = LPSTRtoSTRING(PortsStruct(i).pMonitorName)
            Ports(i).fPortType = PortsStruct(i).fPortType
        Next
    End If
    GetAvailablePorts = pcReturned
    'Free the Heap Space allocated for the Buffer
    If TempBuff Then HeapFree GetProcessHeap(), 0, TempBuff
End Function

Public Sub Start_PortsInComp()
  Dim NumPorts As Long
  Dim i As Integer
   
    'Get the Numbers of Ports in the System
    'and Fill the Ports Structure
    NumPorts = GetAvailablePorts("")
    'Show the available Ports
    For i = 0 To NumPorts - 1
        Debug.Print Ports(i).pPortName
    Next
 
End Sub



А еще можно вызвать окно свойств порта, вот так
 
Код:
Private Declare Function ConfigurePort Lib "winspool.drv" Alias "ConfigurePortA" (ByVal pName As String, ByVal hwnd As Long, ByVal pPortName As String) As Long

Call ConfigurePort("", Me.hwnd, "COM2")
2.1K
04 марта 2004 года
caca
25 / / 01.08.2003
За помощь спасибо, но почему она мне выдает, что у меня COM4 есть - его отродясь не было???:x
258
04 марта 2004 года
SergeySV
1.5K / / 19.03.2003
Цитата:
Originally posted by caca
За помощь спасибо, но почему она мне выдает, что у меня COM4 есть - его отродясь не было???:x



Почему нет, он почти у всех есть, он же не физический. Система сама может создавать порты - виртуальные.
У меня на COM4 винды очень любили модем внутренний вешать, а Norton Commander (старый) никогда не ожидал такой подлости, поэтому не видел модем в упор.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог