Как набрать телефонный номер через модем

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
shyrik_m
Новичок
Новичок
 
Сообщения: 26
Зарегистрирован: 21.06.2005 (Вт) 8:34

Как набрать телефонный номер через модем

Сообщение shyrik_m » 21.06.2005 (Вт) 8:44

Как набрать телефонный номер через модем, записанный в ячейке книги Excel.
И как определить что
1. Сигнал "занято"
2. Длинный гудок
3. Взяли трубку

Или хотябы с чего начать.

По сути, нужен автодозвон + оповещение в случаях 2., 3.

Заранее благодарен!

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 21.06.2005 (Вт) 8:53

http://bbs.vbstreets.ru/search.php - набираешь слово "модем" и тебе расскажут как и куда и чего. :roll: :wink:

shyrik_m
Новичок
Новичок
 
Сообщения: 26
Зарегистрирован: 21.06.2005 (Вт) 8:34

Сообщение shyrik_m » 22.06.2005 (Ср) 7:25

Определять COMпорт модема научился (точнее нашел готовый код) и научился набирать телефонный номер, вот:

'Добавте на форму Command1,Command2 и MSComm1
Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)

Private Sub Command1_Click()' определить порт модема
On Error Resume Next
For q = 1 To 10
MSComm1.CommPort = q
MSComm1.Settings = "9600,N,8,1"
MSComm1.InputLen = 0
MSComm1.PortOpen = True

MSComm1.Output = "AT" + Chr$(13)
Sleep 1
If MSComm1.Input = " " Then
MsgBox MSComm1.CommPort - 1
MSComm1.PortOpen = False
Exit Sub
End If
MSComm1.PortOpen = False
Next q
End Sub


Private Sub Command2_Click()
MSComm1.CommPort = 3'Номер порта модема
MSComm1.Settings = "9600,N,8,1"
MSComm1.InputLen = 0
MSComm1.PortOpen = True
MSComm1.Output = "ATDP" + "номер" + Chr$(13)'
End Sub

А как определить:
1. Сигнал "занято"
2. Длинный гудок
3. Взяли трубку
может я не понял, может и нет примеров.

Может кто-нибудь примерчик подбросит?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 22.06.2005 (Ср) 12:21

Дык модем в тот же порт тебе запишет ответ типа BUSY.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 22.06.2005 (Ср) 12:24

это, если модем сигнал на линии распознает как надо. А на наших линиях частенько бывает такой зоопарк, что не все модемы даже работать могут.

shyrik_m
Новичок
Новичок
 
Сообщения: 26
Зарегистрирован: 21.06.2005 (Вт) 8:34

Сообщение shyrik_m » 22.06.2005 (Ср) 13:00

GSerg, а как этот сигнал заметить?

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 22.06.2005 (Ср) 13:20

у контрола MSCOMM возникает такое событие, там и обрабатывай:

Код: Выделить всё
Private Sub MSComm1_OnComm()
Dim InBuff As String

   
   Select Case MSComm1.CommEvent
   ' Handle each event or error by placing
   ' code below each case statement

   ' Errors
      Case comEventBreak   ' A Break was received.
         ErrMsg = "Break"
      ' These next three timeout values are no longer detected in Win32
      Case comEventCDTO    ' CD (RLSD) Timeout.
      Case comEventCTSTO   ' CTS Timeout.
      Case comEventDSRTO   ' DSR Timeout.
      Case comEventFrame   ' Framing Error
         ErrMsg = "Framing"
      Case comEventOverrun ' Data Lost.
         ErrMsg = "Overrun"
      Case comEventRxOver  ' Receive buffer overflow.
         ErrMsg = "OverFlow"
      Case comEventRxParity   ' Parity Error.
         ErrMsg = "Parity"
      Case comEventTxFull  ' Transmit buffer full.
         ErrMsg = "TX Full"
      Case comEventDCB  ' Unexpected error retrieving DCB]
         ErrMsg = "DBC"
         
   ' Events
      Case comEvCD   ' Change in the CD line.
         If MSComm1.CDHolding = True Then
            StatusBar1.Panels("Status").Text = "Connected"
            shpCD.FillColor = vbGreen
            cmdSend.Visible = True
            Connected = True
         Else
            StatusBar1.Panels("Status").Text = "Disconnected"
            shpCD.FillColor = vbRed
            cmdSend.Visible = False
            Connected = False
         End If
         
      Case comEvCTS  ' Change in the CTS line.
         Me.bCTS = MSComm1.CTSHolding
         If MSComm1.CTSHolding = True Then
            shpCTS.FillColor = vbGreen
         Else
            shpCTS.FillColor = vbRed
         End If
      Case comEvDSR  ' Change in the DSR line.
         ErrMsg = ">>DSR Signal"     
      Case comEvRing ' Change in the Ring Indicator.
         ErrMsg = ">>RING"
      Case comEvReceive ' Received RThreshold # of chars.
         Me.bReceive = True
         shpReceive.FillColor = vbGreen
         InBuff = MSComm1.Input
         Call ScanCom(InBuff)
         shpReceive.FillColor = vbRed
         Me.bReceive = False
         
      Case comEvSend ' There are SThreshold number of
                     ' characters in the transmit buffer.
         Me.bSend = True
         shpSend.FillColor = vbGreen
         Do While MSComm1.OutBufferCount > 0
            DoEvents
         Loop
         shpSend.FillColor = vbRed
         Me.bSend = False   
      Case comEvEOF ' An EOF character was found in
                    ' the input stream
            SMS.SendPrompt = False         
    End Select

End Sub

shyrik_m
Новичок
Новичок
 
Сообщения: 26
Зарегистрирован: 21.06.2005 (Вт) 8:34

Сообщение shyrik_m » 22.06.2005 (Ср) 13:48

Спасибо за подсказку, буду разбираться.

На первый взгляд вижу
- связь с другими контролами (shpSend.FillColor = vbGreen)
- Call ScanCom(InBuff)

всячина, которой в моей форме/проге нет (с этим разберусь), а вот
- comEventCDTO
- ErrMsg
- ...
впервые вижу,
попробую разобраться мтодом "научного тыка."

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 22.06.2005 (Ср) 13:51

comEventCDTO - константа события или ошибки MSComm'а
ErrMsg - просто строка, описание события

Maitris
Постоялец
Постоялец
 
Сообщения: 656
Зарегистрирован: 02.03.2005 (Ср) 21:00
Откуда: Из другой цивилизации.

Сообщение Maitris » 22.06.2005 (Ср) 22:49

shyrik_m
Хочешь сделать прогу MentX для звонка твоего абонента по номеру 02 и последующего воспроизведения по этому номеру звукового файла с текстом "Задолбали козлы" или "Металл рулит"? :D
----

Maitris
Постоялец
Постоялец
 
Сообщения: 656
Зарегистрирован: 02.03.2005 (Ср) 21:00
Откуда: Из другой цивилизации.

Сообщение Maitris » 22.06.2005 (Ср) 22:52

Оффтоп:
"Если winsock, то это троян, если kill - то вирус, ну а если модем, то жди ментов" :lol:
----

shyrik_m
Новичок
Новичок
 
Сообщения: 26
Зарегистрирован: 21.06.2005 (Вт) 8:34

Сообщение shyrik_m » 23.06.2005 (Чт) 5:31

Maitris, твоя идея без спора интересна, но пока у меня другая цель.
Бывает куча потерянного времени из-за дозвона до поставщика, мастерской или куда бы там небыло. Это особенно раздражает, когда на тебе висит еще куча нерешоных задач.

Вот и возникла задача - создать программу, которая автоматом набирает номер из базы и дозванивается, если номер занят, то прога поочериди звонит по другому номеру (если надо сделать несколько звонков в разные места), при дозвоне оповещает сигналом привлекая к себе внимание и предоставляя информацию о том, куда дозвонилась программа. здесь мне остается прерваться на переговоры.
Можно конечно сделать небольшое звуковое "представление", что вам звонит такойто чел из такой-то организации... , что дает время на взятие трубки. Но до этого пока далеко, хотябы с автодозвоном разобраться.

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

Все, кто заинтересован, пишите, делитесь опытом, эксперементируйте, вместе мы сможем добиться реализации поставленой задачи!

shyrik_m
Новичок
Новичок
 
Сообщения: 26
Зарегистрирован: 21.06.2005 (Вт) 8:34

Сообщение shyrik_m » 23.06.2005 (Чт) 6:07

Konst_One, Amed и все остальные по существу готовые помоч и заинтересованые в решении задачи, для начала былобы не плохо разобраться в значении констант.

comEventBreak ' A Break was received.
comEventCDTO ' CD (RLSD) Timeout.
comEventCTSTO ' CTS Timeout.
comEventDSRTO ' DSR Timeout.
comEventFrame ' Framing Error
comEventOverrun ' Data Lost.
comEventRxOver ' Receive buffer overflow.
comEventRxParity ' Parity Error.
comEventTxFull ' Transmit buffer full.
comEventDCB ' Unexpected error retrieving DCB]
comEvCD ' Change in the CD line.
comEvCTS ' Change in the CTS line.
comEvDSR ' Change in the DSR line.
comEvRing ' Change in the Ring Indicator.
comEvReceive ' Received RThreshold # of chars.
comEvSend ' There are SThreshold number of
comEvEOF ' An EOF character was found in


Кто знает значение перечисленных констант, помогите пожалуста!

PS: Обращаюсь ко всем, у кого имеются подозрения на счет поставленной задачи или другие коментарии не относящиеся к решению задачи, пишите мне на мыло formfob@mail.ru, а не в форум, отвечу обязательно!

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 23.06.2005 (Чт) 12:18

что тебе конкретно из этого не понятно?

shyrik_m
Новичок
Новичок
 
Сообщения: 26
Зарегистрирован: 21.06.2005 (Вт) 8:34

Сообщение shyrik_m » 23.06.2005 (Чт) 14:15

Значения констант мне абсолютно не известны, в каких случаях они сообщаются, в английском не силен.

Понятно, что "Private Sub MSComm1_OnComm()" срабатывает при получении сигнала с модема.

Для начала попытался данный код посмотреть в работе, подправил.
Но само событие не срабатывало при коротких и длинных гудках, только после MSComm1.Output = "ATDP" + "номер" + Chr$(13)'.

Скорее всего я чегото не понял, или не правильно спрашиваю.

Может надо делать запрос на модем?

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 23.06.2005 (Чт) 14:40

Я тебе привел кусок кода из своего проекта. Там при появлении различных сигналов на линии у соответствующих шейпов на форме цвет меняется и у переменной ErrMsg значение меняется. вставляй себе такие же и смотри. а ангельский язык придется учить, все написано в MSDN на нем

batiq
Обычный пользователь
Обычный пользователь
 
Сообщения: 95
Зарегистрирован: 21.01.2005 (Пт) 13:47

Сообщение batiq » 06.07.2005 (Ср) 15:26

Konst_One писал(а):Я тебе привел кусок кода из своего проекта. Там при появлении различных сигналов на линии у соответствующих шейпов на форме цвет меняется и у переменной ErrMsg значение меняется. вставляй себе такие же и смотри. а ангельский язык придется учить, все написано в MSDN на нем

Мне очень нужна такая программа, помогите?.

shyrik_m
Новичок
Новичок
 
Сообщения: 26
Зарегистрирован: 21.06.2005 (Вт) 8:34

Сообщение shyrik_m » 20.07.2005 (Ср) 5:21

Короче, чтобы реально определить какие гудки в линии (короткие или длинные) нужен анализатор звука, стандартный гудок имеет частоту 425 Гц (если не ошибаюсь), анализ длительности, пауз и частот - выход.
Это реализовано в вентафаксе.
Другого выхода не вижу, поиск нужно вести в данном направлении.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 48

    TopList