powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Узнать о доступных для звонка модемах
21 сообщений из 21, страница 1 из 1
Узнать о доступных для звонка модемах
    #37563557
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, коротко и по существу, есть код, нижеследует
Добился я сообщения:
Количество установленных модемов в компьютере: 2
1 Самсунг - COM2 - Доступен для звонка
2 PCI SoftV92 Data Fax Modem - COM3 - Доступен для звонка
Количество модемов, доступных для звонка: 2

Но это не правильно, так как я перед тестом телефон Самсунг физически отсоединяю, провод соединяющий телефон с компьютером осоединяю, а получаю сообщение что Самсунг доступен - но это не так!!!!!!
Что делать, как сделать чтобы правильно определял???

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
Sub Phone()

    On Error Resume Next

    Dim strComputer As String
    strComputer = "."

    Dim objWMIService As Object
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

    Dim colItems As Object
    Set colItems = objWMIService.ExecQuery("Select * from Win32_POTSModem")

    Dim MSComm1 As MSComm
    Set MSComm1 = New MSComm

    Dim objItem As Object

    Dim Количество_модемов As Byte
    Dim Количество_доступных_модемов As Byte

    Dim ИмяCOMпорта As String
    Dim MSComm1Input As String
    Dim Результат As String
    Dim Доступные_модемы As String

    For Each objItem In colItems
        Количество_модемов = Количество_модемов + 1
        ИмяCOMпорта = objItem.AttachedTo
        'отнимаем первые три буквы, то есть COM
        MSComm1.CommPort = Right$(ИмяCOMпорта, (Len(ИмяCOMпорта) - 3))
        MSComm1.PortOpen = True
        MSComm1.Output = "ATI" & vbCr
        'If Err.Number <> 0 Then MsgBox$ Err.Number & "-" & Err.Description
        'или Err.Clear, обнуляем ошибку
        Err.Number = 0
        MSComm1Input = MSComm1.Input
        MSComm1.PortOpen = False

        If Len(MSComm1Input) = 0 Then
            Результат = Результат & Количество_модемов & " " & objItem.Model & " - " & objItem.AttachedTo & " - Не доступен для звонка" & Chr$(13)

        Else

            Результат = Результат & Количество_модемов & " " & objItem.Model & " - " & objItem.AttachedTo & " - Доступен для звонка" & Chr$(13)
            Количество_доступных_модемов = Количество_доступных_модемов + 1
            Доступные_модемы = Доступные_модемы & objItem.Model & " - " & objItem.AttachedTo & Chr$(13)
        End If

    Next

    'установка объекта в значение Nothing требуется для освобождения памяти, которая была выделена для создания этого объекта
    Set objWMIService = Nothing
    Set colItems = Nothing
    Set MSComm1 = Nothing

    'отключает действие строки 1) On Error GoTo ... 2) либо действие строки On Error Resume Next
    On Error GoTo 0

    MsgBox$ "Количество установленных модемов в компьютере: " & Количество_модемов & Chr$(13) & Результат & "Количество модемов, доступных для звонка: " & Количество_доступных_модемов

    End Sub
...
Рейтинг: 0 / 0
Узнать о доступных для звонка модемах
    #37563581
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
извините тему отправил толком не назвав её, если можно модератору переименовать
"Узнать о доступных для звонка модемах" Модератор: сделал
...
Рейтинг: 0 / 0
Узнать о доступных для звонка модемах
    #37563618
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Ципихович Эндрю
> Но это не правильно, так как я перед тестом телефон Самсунг физически отсоединяю, провод соединяющий телефон с
> компьютером осоединяю, а получаю сообщение что Самсунг доступен - но это не так!!!!!!
> Что делать, как сделать чтобы правильно определял???

Попытатся позвонить. Этот "прикол" тянется с самого начала. Если при старте винды оборудование подключено к компьютеру и
включено(готово к работе) то винда будет считать это правдой, до попытки использовать это оборудование. Или наоборот при
загрузке винды оборудование выключено, то винда будет считать его недоступным. Вариант решения - руками выполнить "Поиск
устройств", тогда производится опрос всего оборудования и соответственно меняются признаки доступности устройств. Для
win2ksrv и win2003srv програмного решения этого вопроса я не нашёл. Правда с тех пор прошло уже семь лет :) Пробуй.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Узнать о доступных для звонка модемах
    #37563658
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос,
>до попытки использовать это оборудование
ну вот она произошла и что, отлуп
>Правда с тех пор прошло уже семь лет :) Пробуй
Что пробовать, уже бесит меня и фриланс на трёх сайтах писал, воз и ныне там..
Поиском тоже пользовался /topic/491334&pg=2 -
ничего внятного
Я бы попробовал, если б знал как, не подскажите как?
...
Рейтинг: 0 / 0
Узнать о доступных для звонка модемах
    #37563772
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ципихович Эндрю,
проблема(?) скорее всего в этой части
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
        MSComm1.PortOpen = True
        MSComm1.Output = "ATI" & vbCr
        'If Err.Number <> 0 Then MsgBox$ Err.Number & "-" & Err.Description
        'или Err.Clear, обнуляем ошибку
        Err.Number = 0
        MSComm1Input = MSComm1.Input
        MSComm1.PortOpen = False

        If Len(MSComm1Input) = 0 Then
            Результат = Результат & Количество_модемов & " " & objItem.Model & " - " & objItem.AttachedTo & " - Не доступен для звонка" & Chr$(13)

        Else

            Результат = Результат & Количество_модемов & " " & objItem.Model & " - " & objItem.AttachedTo & " - Доступен для звонка" & Chr$(13)
            Количество_доступных_модемов = Количество_доступных_модемов + 1
            Доступные_модемы = Доступные_модемы & objItem.Model & " - " & objItem.AttachedTo & Chr$(13)
        End If

подробнее:
для каждого зарегистрированного в системе модема определяем порт, к которому он был подключен при последней настройке
пробуем открыть этот порт ( ошибку открытия не обрабатываем )
пробуем что-то отправить в этот "вроде-бы открытый" порт ( ошибку не обрабатываем и обнуляем )
пробуем что-то прочитать из "вроде-бы открытого" порта ( ошибку чтения не обрабатываем )

на основе вышеприведенных ...[censored] делаем выводы о доступности оборудования...

ЗЫ: пардон за "многабукаФ"
...
Рейтинг: 0 / 0
Узнать о доступных для звонка модемах
    #37563804
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скукотища, пардоню за многобуквие...
написали витиевато...
то что в скобках
>пробуем открыть этот порт ( ошибку открытия не обрабатываем )
>пробуем что-то отправить в этот "вроде-бы открытый" порт ( ошибку не обрабатываем и обнуляем )
>пробуем что-то прочитать из "вроде-бы открытого" порта ( ошибку чтения не обрабатываем )
это я сделал или мне надо сделать??
пытаюсь домысливать, потому как если автор думает это ж приветствуется
и так
>пробуем открыть этот порт - это я делаю
>( ошибку открытия не обрабатываем ) - я не обрабатываю, нету If Err.Number <> 0 Then или оно нужно??
одним словом чтобы не сотрясать инет можете выложить код или пояснить что у Вас в скобках это надо или не надо делать, а я подстроюсь под Ваши подсказки
...
Рейтинг: 0 / 0
Узнать о доступных для звонка модемах
    #37563816
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
всё что я ищу проверяется вручную легко
Пуск Панель управления Телефон и модемы Модемы и там указано что и как...
...
Рейтинг: 0 / 0
Узнать о доступных для звонка модемах
    #37564013
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ципихович Эндрю,
...чтобы не сотрясать инет...Ссылки на "первоисточник":
MSComm Control
OnComm Event
Using the Communications Control

...можете выложить код...Не могу, к сожалению(?), - с модемами никогда не работал, MSComm "в руках не вертел"

...скобках это надо или не надо делать... В скобках - всего лишь констатация факта, а-ля КО. Обрабатывать ошибки НАДО. Закомментируйте в своей процедуре строку
On Error Resume Next
и запустите процедуру в отладчике.

-Ты суслика видишь?
-Нет...
-А он есть.
...
Рейтинг: 0 / 0
Узнать о доступных для звонка модемах
    #37565766
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь ГорбоносЭтот "прикол" тянется с самого начала. Если при старте винды оборудование подключено к компьютеру и
включено(готово к работе) то винда будет считать это правдой, до попытки использовать это оборудование. Или наоборот при
загрузке винды оборудование выключено, то винда будет считать его недоступным. Вариант решения - руками выполнить "Поиск
устройств", тогда производится опрос всего оборудования и соответственно меняются признаки доступности устройств.
Не согласен ка-те-го-ри-че-ски
Пример, как бы не загрузилась Винда потом смотрю
Пуск Панель управления Телефон и модемы Модемы, и в зависимости от того физически отсоединяю или присоединяю к шнуру сотовый телефон Самсунг отображается информация доступен он или нет и отображается правильно!!!

Эксперимент: в Ворде кнопка на неё вешаю код:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
Sub PhoneПозвонить_с_телефона()

    On Error Resume Next

    Dim strComputer As String
    strComputer = "."

    Dim objWMIService As Object
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

    Dim colItems As Object
    Set colItems = objWMIService.ExecQuery("Select * from Win32_POTSModem")

    Dim MSComm1 As MSComm
    Set MSComm1 = New MSComm

    Dim objItem As Object

    Dim Количество_модемов As Byte
    Dim Количество_доступных_модемов As Byte

    Dim ИмяCOMпорта As String
    Dim MSComm1Input As String
    Dim Результат As String
    Dim Доступные_модемы As String

    For Each objItem In colItems
        Количество_модемов = Количество_модемов + 1
        ИмяCOMпорта = objItem.AttachedTo
        'отнимаем первые три буквы, то есть COM
        MSComm1.CommPort = Right$(ИмяCOMпорта, (Len(ИмяCOMпорта) - 3))
        MSComm1.PortOpen = True
        'или Err.Clear, обнуляем ошибку
        If Err.Number = 8012 Then
            Err.Number = 0
            MSComm1.PortOpen = False
            MSComm1Input = ""
            GoTo Skip
        End If

        'MsgBox$ Err.Number & "-" & Err.Description
        MSComm1.Output = "ATI" & vbCr
        MSComm1Input = MSComm1.Input
        MSComm1.PortOpen = False

Skip:

        If Len(MSComm1Input) = 0 Then
            Результат = Результат & Количество_модемов & " " & objItem.Model & " - " & objItem.AttachedTo & " - Не доступен для звонка" & Chr$(13)

        Else

            Результат = Результат & Количество_модемов & " " & objItem.Model & " - " & objItem.AttachedTo & " - Доступен для звонка" & Chr$(13)
            Количество_доступных_модемов = Количество_доступных_модемов + 1
            Доступные_модемы = Доступные_модемы & objItem.Model & " - " & objItem.AttachedTo & Chr$(13)
        End If

    Next

    'установка объекта в значение Nothing требуется для освобождения памяти, которая была выделена для создания этого объекта
    Set objWMIService = Nothing
    Set colItems = Nothing
    Set MSComm1 = Nothing

    'отключает действие строки 1) On Error GoTo ... 2) либо действие строки On Error Resume Next
    On Error GoTo 0

    MsgBox$ "Количество установленных модемов в компьютере: " & Количество_модемов & Chr$(13) & Результат & "Количество модемов, доступных для звонка: " & Количество_доступных_модемов

    Exit Sub



При этом перед нажатием на кнопку проверяю вручную Пуск Панель управления Телефон и модемы Модемы, смотрю два порта присутствует, что и есть на самом деле. Нажимаю раз десять подряд, получаю ответы хаотичные, Количество доступных модемов 0 или 1, ни разу нет ответа 2, ЕРЕЕЕЕЕЕЕЕСЬ!!
Как лечить, подскажите, пожалуйста, заранее спасибо.
Хоть бы до Нового года успеть :)
...
Рейтинг: 0 / 0
Узнать о доступных для звонка модемах
    #37566482
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Друг мой, а почему именно ATI?
Может, проще через ATE1/.../ATE0? AT&V7?
Смотрели, как Win диагностирует модем при запуске rasman?
...
Рейтинг: 0 / 0
Узнать о доступных для звонка модемах
    #37566488
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTMAT&V7?Упс... AT&I7
...
Рейтинг: 0 / 0
Узнать о доступных для звонка модемах
    #37566586
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTM,
1 за ответ спасибо
2 за друга спасибо
>а почему именно ATI?
потому, что незнаю как правильно и готов хоть чёрта туда засунуть, тогда сегодня пробую, варианты:
1 - "ATE1"
2 - "ATE0"
3 - "ATE0?"
4 - "AT&V7?"
5 - "AT&V7"
6 - "AT&I7"
вечером отпишусь, не пропадайте пожалуйста
...
Рейтинг: 0 / 0
Узнать о доступных для звонка модемах
    #37567879
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Итак, опробовал шесть вариантов, правильный ответ, должен быть 2
1 - "ATE1" – стабильно всегда ответ 1
2 - "ATE0" – стабильно всегда ответ 1
3 - "ATE0?" – стабильно всегда ответ 1
4 - "AT&V7?" – стабильно всегда ответ 0
5 - "AT&V7" – стабильно всегда ответ 0
6 - "AT&I7" – стабильно всегда ответ 1
И зачем мне нужна такая стабильность??? Ни одного верного ответа, что делать????
...
Рейтинг: 0 / 0
Узнать о доступных для звонка модемах
    #37568473
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ципихович Эндрю,

Вы немного неправильно поняли, что вам предлагалось посмотреть...
Да и ваш принцип "поиска КОЛИЧЕСТВА модемов", есс-но, неверен.

Я предложил сделать следующее:
- запросить список зарегистрированных в системе модемов
- обменяться С КАЖДЫМ из них информацией (с помощью AT-команд)
- на основании ответов выяснить состояние каждого из модемов.

Между прочим, вы (почему-то), например, не рассматриваете ситуацию, когда в системе имеется некоторое количество модемов, и даже некоторые из них действительно физически подключены и доступны - НО! некоторые из них в это время уже используются... вами или другими программами...
...
Рейтинг: 0 / 0
Узнать о доступных для звонка модемах
    #37568722
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTM,

>обменяться С КАЖДЫМ из них информацией (с помощью AT-команд)
так я и говорю я не знаю этих команд, вернее знал, проверял, не прёт, теперь просто пробую все, что мне подскажываю, так подскажите команду\команды, каждый знак роль играет, пожалуйста в виде "команда", то есть обрамлённую в кавычки, а то Ваш ответ:
>Может, проще через ATE1/.../ATE0? AT&V7?
очень витиеват
>НО! некоторые из них в это время уже используются... вами или другими программами...
неа, без меня меня не женили, когда тестю представляю, что происходит вокруг
как представляю, например комп перезагрузил, в автозагрузке нет ничего что может использовать порты, да и вообще у меня таких прог нет, если порты кто и пользует, то это я во время тестов, хотя может я не прав, тогда поправьте меня
...
Рейтинг: 0 / 0
Узнать о доступных для звонка модемах
    #37569846
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если реестр
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Modem
там две папки
Enum
Parametrs
В какой папке смотреть?? Вручную если смотреть - ничего там интересного не вижу, там можно доступные модемы увидеть? если да то как программно?
...
Рейтинг: 0 / 0
Узнать о доступных для звонка модемах
    #37571654
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
начал раскачивать прогу Звонилка, её код
Sub Звонок()
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Dim a As String
Dim stAppName As String

a = Selection
a = Trim(a)
a = Replace(a, vbCr, "")
a = Replace(a, vbCr, "")
a = Replace(a, vbCr, "")
a = Replace(a, vbCrLf, "")
a = Replace(a, vbCrLf, "")
a = Replace(a, vbCrLf, "")
a = Replace(a, vbBack, "")
a = Replace(a, vbCr, "")
a = Replace(a, vbLf, "")
a = Replace(a, vbNewLine, "")
a = Replace(a, vbNullChar, "")
a = Replace(a, vbNullString, "")
a = Replace(a, vbTab, "")
a = Replace(a, vbVerticalTab, "")
stAppName = "C:\Program Files\Zvonilka\zvonilka.exe " & a
Call Shell(stAppName, 1)
End Sub



Не пойму, зачем нужны эти два по три:
Код: vbnet
1.
2.
3.
4.
5.
6.
a = Replace(a, vbCr, "")
a = Replace(a, vbCr, "")
a = Replace(a, vbCr, "")
a = Replace(a, vbCrLf, "")
a = Replace(a, vbCrLf, "")
a = Replace(a, vbCrLf, "")


повторение -мать учения
попутный вопрос по
OptionExplicit
а именно, когда он у меня есть я не инициализирую переменные, смысла не вижу, а что нужно обязательно?
...
Рейтинг: 0 / 0
Узнать о доступных для звонка модемах
    #37572427
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Ципихович Эндрю
> попутный вопрос по
> OptionExplicit
> а именно, когда он у меня есть я не инициализирую переменные, смысла не вижу, а что нужно обязательно?

Неизвесный авторБуратино дали три яблока. Два он съел. Сколько яблок осталось у Буратино? Думаете одно? ...
Мораль - обнуляйте(инициализируйте) переменные!!! ;-)
В случае с бейсиком, наверное тебе везёт, потому, что простые типы инициализируются за тебя, а объектные переменные
имеют начальное значение Nothing.
Однако правила написания хорошего кода подразумевают явное объявление всех переменных, комментирование их и начальную
инициализацию. По этому поводу есть замечательное высказывание, которое приписывают Стиву Макконелу Всегда пиши
код так, точно сопровождать его будет маньяк, знающий, где ты живешь.

:)

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Узнать о доступных для звонка модемах
    #37573820
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос, спасибо, я конечно прислушаюсь, но я рассуждаю как:
в моём коде когда пошагово выполняете строки
1 - For Each objItem In colItems
2 - Количество_модемов = Количество_модемов + 1
3 - ИмяCOMпорта = objItem.AttachedTo
когда проходите первую строку наведите курсор у второй строки к Количество_модемов и увидете ответ 0
А когда пройдёте строку 2, будете на третьей, увидите подведя курсор к Количество_модемов и увидите ответ 1
Всё работает. Что не так???
...
Рейтинг: 0 / 0
Узнать о доступных для звонка модемах
    #37580990
Anderis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А можно ли запретить модему давать ответ?
Нужно чтобы модем принял звонок и остался в ждущем режиме.
...
Рейтинг: 0 / 0
Узнать о доступных для звонка модемах
    #37594151
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
подскажите такое словосочетание как
MSComm1.handshaking в ВБ(А) примемлимо?? как его применять и для чего оно служит?
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Узнать о доступных для звонка модемах
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]