Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Определить входящий звонок модемом, WinAPI 
:(
    Опции темы
Cetus
Дата 9.12.2004, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 18.4.2004

Репутация: нет
Всего: 1



как сделать чтобы при входящем звонке запускалась какая либо процедура?
--------------------
Легко внести изменения в код.Трудно сделать это корректно.
PM MAIL   Вверх
unreg
Дата 15.12.2004, 04:29 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Надо отследить этот самый входящий звонок.
Есть два пути по которым ты можешь это сделать:
1. использовать TAPI (самому вызывать функции или компоненты Turbo APRO)
2. работать с портом напрямую.
Недостаток 1-го пункта в том, что TAPI подходит далеко не для каждого модема. Я с этим столкнулся. Зато если поддерживает, то работает на ура. Например, Acorp на Rockwell работать через TAPI не захотел, а вот Acorp на Conexant - никаких проблем.
Недостаток 2-го пункта: надо знать протокол обмена модема с компьютером (разные модемы - разные протоколы, особенно если это касается голосовых функций) + сложность реализации обработки звуковых потоков.

Если тебе не нужно работать с голосом, то я бы посоветовал 2-й вариант. Примеров работы с портом много. При входящем звонке модем выдает в порт строку RING (на каждый сигнал). Делай прослушку порта (WaitCommEvent по RX_CHAR) и отслеживай их, а дальше - вызывай свою процедуру.

PS Можно сделать еще интереснее. Модем умеет переводить (мой, после небольшой настройки) посланный абонентом тоновый сигнал в символ соответствующий нажатой кнопке - полет фантазии практически не ограничен. smile
  Вверх
Cetus
Дата 15.12.2004, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 18.4.2004

Репутация: нет
Всего: 1



нашел в API, WaitCommEvent, впринципе как решение подходит если опрашивать порт через определенное время
--------------------
Легко внести изменения в код.Трудно сделать это корректно.
PM MAIL   Вверх
unreg
Дата 16.12.2004, 02:50 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











что значит опрашивать через определенное время? Открываешь порт к которому подключен модем и по WaitCommEvent ждешь пока какой-нибудь символ придет в приемный буфер. А раз символ пришел - значит можно читать с порта (там что-то есть). Так почти все проги построены. Можно, конечно, в TCOMMTIMEOUTS сделать ReadIntervalTimeout:=MAXDWORD. тогда функция ReadFile будет возвращать значение сразу же, не завсисмо от того есть в буфере что-то или нет (кстати, альтернатива для тех кто не хочет заморачиваться с асинхронным вызовом). Т.е. открыл порт и на таймер повесил ReadFile. На этом, если память не изменяет, построен компонент TCommPort32.
  Вверх
p0s0l
Дата 17.12.2004, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 14
Всего: 112



Если делать WaitCommEvent, это заблокирует модем для всех приложений. Это не всегда бывает полезно.
Поэтому лучше через определённые интервалы времени открывать COM-порт, проверять состояние RING и закрывать порт...
(или может можно открыть порт как-то, чтобы другие могли его юзать ?)

А если делать WaitCommEvent, то зачем смотреть символы ?
Ждать EV_RING чем хуже ?
(я этим не занимался, просто спрашиваю ради интереса)



--------------------
С уважением, г-н Посол.
PM   Вверх
unreg
Дата 21.12.2004, 02:57 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(p0s0l @ 17.12.2004, 22:56)
Если делать WaitCommEvent, это заблокирует модем для всех приложений. Это не всегда бывает полезно.


Да согласен, конечно. Только придется синхронизировать работу этих самых приложений. Если идти этим путем, то я бы, наверное, в одной проге создавал дочерние процессы (вплоть до реализации плагинов). Т.е. все-таки, занимал бы порт одним процессом, а дальше - рулил по ситуации. Что будет, например, если обоим прогам нужен этот самый RING и обоим надо снять трубку?


Цитата(p0s0l @ 17.12.2004, 22:56)
А если делать WaitCommEvent, то зачем смотреть символы ?
Ждать EV_RING чем хуже ?


Конечно, и здесь все верно. smile И в данном случае, наверное, лучший вариант. Просто событие EV_RXCHAR мне кажется более универсальным. smile
  Вверх
Akella
Дата 4.1.2005, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: нет
Всего: 329



А ведь порт можно открывать только для чтения
PM MAIL   Вверх
Snowy
Дата 4.1.2005, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Уточняющий вопрос:
Входящий звонок - это установка TCP соединения? Или достаточно самого факта звонка, а соединение устанавливать не нужно?
Если соединение не нужно, то просто садимся на порт, говорим модему, что ждем звонка и сидим, ждем. Как прошел коннект, выполняем и отрубаем.
Если соединение нужно... Когда-то... Был у меня диалап сервер. И в инете валялся классный RAS Server. Вел он и статистику, и айпишники раздавал грамотно, и лимиты вел. Кроме всего запускал он у меня при прозвоне программку, которая нужную мне инфу писала. Но как его найти, даже не подскажу. Помню, что RAS Server, работает сервисом. По-моему другого названия у него и нет...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0728 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.