Конференция "WinAPI" » Вопросы о TAPI и dialer.exe [D7, NT4, WinXP]
 
  • burda_a_m © (23.12.10 16:38) [0]
    Всем привет!

    Для одного человека хотел написать программу. У этой программы помимо других функций должны быть реализованы функции для работы  с телефонией. По началу я написал пробную программу  для набора номера. Сделал это я через открытие СОМ-порта и записи в него ATD-команд. Вот код  процедуры набора номера:


    procedure upmodem;
    var
     PhoneCommand: string;
     CommPort: string;
     NumberWritten: cardinal;
    begin
     PhoneCommand := 'atdt' + FrmCall.TxtNumber.Text + #13 + #10; //Поднять трубку и набрать номер
     CommPort := 'COM'+IntToStr(FrmCall.CmbCOMPort.ItemIndex+1);//Ваш СОМ порт

     //-------------------Открыть порт как файл

     hCommFile := CreateFile(
       PChar(CommPort),
       generic_read or GENERIC_WRITE,
       0,
       nil,
       OPEN_EXISTING,
       FILE_ATTRIBUTE_NORMAL,
       0);                     {}
     if hCommFile = INVALID_HANDLE_VALUE then
     begin
       ShowMessage('Не могу открыть порт ' + CommPort);
       exit;
     end;

     //-------------Выполнить команду по средству записи в файл

     NumberWritten := 0;
     if WriteFile(hCommFile,
       PChar(PhoneCommand)^,
       Length(PhoneCommand),
       NumberWritten,
       nil) = false then
     begin
       ShowMessage('Не могу произвести запись в порт ' + CommPort);
     end;{}
    end;


    Здесь TxtNumber.Text – текстовое поле, в которое вводится номер телефона, CmbCOMPort – раскрывающийся список (TComboBox) с  вариантами СОМ-портов. У меня и других моих знакомых этот код работает, а вот у человека, для которого я и хочу написать программу, вылазит сообщение "Не могу произвести запись в порт". При этом должен заметить, что человек пользуется Виндовским диалером (dialer.exe). Кстати, у человека ноутбук ACER ASPIRE 7738G. В нем встроенный модем (LSI HDA modem-56K ITU V.90 чип-SV92A3). Так вот, Виндовский диалер у него работает, набирает  номер и реагирует на входящие звонки, определяя номер вызываемого абонента. Операционка у него стоит Windows 7 Home.

    И так. Раз вышеуказанный код не может произвести запись в порт, значит порт на запись занят. Но при этом Виндовская утилита dialer.exe у него работает. Тогда я начал копать в сторону TAPI. В Интернете нашел это материал http://mostinfo.net/article/9/46.htm и на его основе написал пробный вариант программы набора номера. У меня и этот вариант работал на ура. Но вот человек, для которого я и  хотел написать программу, говорит, что у него и  он не работает. Тогда я попросил своих друзей, у которых стоит Семерка, протестировать этот вариант. У троих из трех этот вариант работал.

    Человек постоянно мне твердит, что у него модем какой-то особенный. У него "встроенный модем (LSI HDA modem-56K ITU V.90 чип-SV92A3),позволяет работать находясь в сети(вкл.браузер)и одновременно звонит". Но я не понимаю, в чем его уникальность с точки зрения программирования. Я далеко не гуру и в области программирования, но имею некоторые соображения относительно TAPI. Однако не знаю, верны ли они. Пожалуйста, знающие люди, если следующие мои рассуждения  будут не верны, поправьте меня.

    Первое - реализация в Delphi 7 функций телефонии через TAPI связана с утилитой dialer.exe. Ведь когда я запустил свой пробный вариант на основе TAPI и дал команду набрать  номер, то Windows сама запустила утилиту dialer.exe,  и та уже осуществляла набор номера. Следовательно, я сделал такой вывод. Функции телефонии, реализованные через TAPI, взаимодействуют с утилитой dialer.exe. То есть, если утилита dialer.exe работает корректно (набирает номер), то и моя программа должна набирать номер. И это никак не зависит, какой модем у человека. Второе, если у человека при попытке набора номера  из моей программы ничего не происходит (то есть компьютер никак не реагирует на команды, которые дает программа через TAPI), значит проблема у него в операционной системе. Возможно, отключена какая-то служба, которая и позволяет осуществлять связь сторонних программ с  виндовской телефонией. Еще, я полагаю, что здесь дело в самом модеме. Модем, его марка и тип, тут не причем.

    Пожалуйста, если сделанные мной выводы не верны, поправьте меня. Если указанный модем какой-то особенный, поясните, в чем его особенность. Неужто с ним нельзя работать так, как с другими модемами? Добавлю еще, что VentaFax у него ранее работал корректно. Сейчас он этой программой не пользуется.

    Прикрепляю к посту архив с двумя моими пробными проектами на тот случай, если  их кто-то захочет посмотреть.
  • Медвежонок ХМЛ © (23.12.10 16:46) [1]
    Работая с ТАПИ ты не должен иметь дел ни с номерами компортов ни с тем более ат- командами.

    Точнее не будешь иметь дел. Иначе ты не работаешь с тапи.
  • burda_a_m © (23.12.10 17:30) [2]
    Медвежонок ХМЛ ©   (23.12.10 16:46) [1]

    > Работая с ТАПИ ты не должен иметь дел ни с номерами компортов
    > ни с тем более ат- командами.


    Согласен. Вопрос в другом. Утилита dialer.exe ведь связана с ТАПИ? Если утилита dialer.exe у  человека работает,  то и моя программа должна работать? И тут не важно, какой  модем у человека. Получается, моя прога дает команды модему через ТАПИ и dialer.exe. Или не прав?
  • Медвежонок ХМЛ © (23.12.10 17:39) [3]
    И тут не важно, какой  модем у человека.

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

    а ежели нет (не через тапи), то важен и тип мопеда и какие ат-команды используются.
  • burda_a_m © (23.12.10 18:06) [4]
    Спасибо за ответ. Но Вы, пожалуйста, ответе еще на два вопроса, которые я задал в предыдущем посте.
    1.  Утилита dialer.exe ведь связана с ТАПИ?
    2.  Если утилита dialer.exe у  человека работает,  то и моя программа должна работать?
  • Медвежонок ХМЛ © (24.12.10 09:27) [5]
    1. я без понятия связана она или нет. И что такое "связана" ?

    2. не вижу связи.
    ничего она не должна в связи с тем, что что-то там другое работает.
  • krug.51.ru (02.12.11 01:49) [6]
    слушай ! я не полностью понимаю смысл твоей писанины но у тебя кто-то из вне вредит тебе а тапи просто игра цифр на твоем мониторе!
  • han_malign (02.12.11 10:07) [7]
    Может сейчас что-то изменилось, но в старые времена народ поматерившись на TAPI, таки делали как все нормальные люди через RAS...

    > значит проблема у него в операционной системе

    - не знаю как в W7, а в XP по умолчанию сервис телефонии остановлен...
    И надо хотя бы раз зайти в  Панель управления->Телефон и модем... Только после этого будет доступен сервис TAPI для модема.
    (Для RAS - этого вроде бы не требуется)
  • han_malign (02.12.11 10:21) [8]
    а возможно просто неправильно установлены/настроены драйвера, по идее в системе должно быть два виртуальных модема - ADSL и голосовой(либо ADSL-сетевой интерфейс и голосовой модем)... Или VPN вместо ADSL на голосовой натравлен(если у его провайдера вообще есть/подключена услуга ADSL и телефон не спаренный(тогда ADSL идет лесом, т.к. полоса урезана из-за  разделения каналов по частотам))...
 
Конференция "WinAPI" » Вопросы о TAPI и dialer.exe [D7, NT4, WinXP]
Есть новые Нет новых   [134430   +4][b:0][p:0.003]