No cóż nie jest to jakoś szczególnie trudne. Z drugiej strony sporo wysiłku kosztowało mnie znalezienie potrzebnych informacji, a i różne osoby na różnych forach dyskusyjnych też nie są zbyt skore do pomocy.
Ale do rzeczy.
Piszę w kodzie natywnym, więc wskazówki będą dotyczyć gołego API w C. Nie mam w tej chwili dostępu do kodu źródłowego. Piszę z pamięci.
Kolejka czynności wygląda mniej więcej następująco:
Inicjujemy TAPI używając funkcji lineInitializeEx(). Nie było w moim przypadku konieczne uzgadnianie wersji API i ExtAPI (funkcje Negotiate coś tam... już nie pamiętam). Podobno jednak dobrze jest uzgodnić wersję ExtAPI. lineInitializeEx() już uzgadnia wersję API. Ta funkcja daje też informację o liczbie urządzeń w systemie. Dzięki temu wiemy ile razy wywołać lineGetDevCaps(). Ta funkcja pozwoli znaleźć komórkę w naszym komputerku. Teraz iterujemy lineGetDevCaps() tak długo aż znajdziemy komórkę. Rozpoznajemy ją w taki sposób: do lineGetDevCaps() przekazuje się strukturę (nie pamiętam nazwy - poszukajcie w msdn), która później wypełniana jest specyfikacją danego urządzenia. Szukamy urządzenia, które pod offsetem wskazywanym bodaj przed pole .dwDeviceName (nazwy zmiennej nie jestem pewien) zawiera napis "Cellular Line". Następnie wywołujemy funkcję lineOpen() i już kontrolujemy telefon. Trzeba tylko dobrze ustawić flagi konfiguracyjne w parametrach do lineOpen() . Jak mam coś z "DATAMODEM" i "VOICE coś tam". Jak zerknę w kod to napiszę co konkretnie. Potem w najprostszym rozwiązaniu wystarczy w kółko wywoływać lineGetMessage(), które będzie przekazywać informację o wszystkich zdarzeniach związanych z telefonem. LINE_APPNEWCALL to nowe połączenie na przykład. Można też używać mechanizmu eventów ale tego jeszcze do końca nie rozszyfrowałem (dostaję zdarzenie jak ktoś do mnie dzwoni ale nie jak ja do kogoś dzwonię). Jakby ktoś zechciał mi pomóc to będę wdzięczny.