[WINXP][TAPI] Commencer faire de la "surveillance"

Voila j’ai un projet en ce moment ou je dois pour commencer surveiller les entrées et sorties de tout ce qui tourne autour de TAPI (Telephony Application Programming Interface) et notamment en premier lieu des appels effectués à travers Outlook qui utilise TAPI3 si j’ai bien compris.

Ces outils TAPI sont vraiment nouveaux pour moi et et je me demandais s’il n’y aurait pas un petit pro de cette API.

J’ai trouver un logiciel TB3x.exe qui semble pouvoir observer un peu tout ca mais je ne comprend pas bien son fonctionement donc si par hasard quelqu’un connait ce soft…

Je dois à terme développer une appli sous Visual C++ 2005 Express Edition que je ne connais pas du tout non plus (je n’ai jusque la fait que de la programmation sous linux avec un éditeur de texte) mais ca je pense que j’arriverai bien à me débrouiller pour comprendre comment ca marche

Cependant si vous avez 2-3 conseils je suis preneur (notamment au niveau de l’utilisation de dll, chose que je n’ai jamais vu avant).

T’as essayé ici ? B)

Bien sur (de toute facon tous les sites parlant de TAPI finissent par pointer sur celui la).
Le problème c’est que l’utilisation du soft est décrite plutôt succintement et que mon anglais n’étant pas des plus performants je peine un peu à comprendre exactement son bon fonctionnement ^^

aïe ouais, bon, je te garantis rien alors, je ferai ça si j’ai le temps today mais didjiou l’anglais quoi B)

Je peux t’aider sur certains points, étant donné que j’ai déjà fait développer une interface pour TAPI en .net par un stagiaire.

Donc déjà, tu peux commencer à étudier la doc officielle en long, en large et en travers.

Ensuite, Les différences entre TAPI 3 et TAPI 2 : TAPI 3 est une surcouche COM de TAPI 2, rajoutant une vision objets/classes à TAPI2.

Pour utiliser la lib en .net (en imagniant que tu bosses en managed), il te faudra ajouter une référence vers l’objet COM (Microsoft TAPI 3.0 Type Library). Ensuite tu instancies un TAPI3Lib.TAPIClass(), et c’est parti.

La grosse partie que tu vas devoir analyser, c’est la méthode RegisterCallNotifications() qui permet de dire que tu souhaite être notifié des évènements TAPI, et l’évènement Event qui est levé lorsqu’une opération se produit sur TAPI. Si tu ne dois pas manipuler la ligne, tu n’auras pas besoin d’aller bien plus loin.

Un truc qu’il te faut savoir si tu manipules COM pour la première fois : le système de gestion des différentes versions du composant TAPI passe par des interfaces qui peuvent proposer deux formes : IMonInterface et IMonInterface2 (pas de version 3 avec TAPI).

IMonInterface possède certaines fonctionnalitées, et pour ne pas casser la compatibilité ascendante, les nouvelles fonctionnalités apparues dans les versions suivantes sont disponibles dans la version 2 de l’interface. Du coup, la plupart des champs/méthodes renvoient des object, que tu pourras transtyper au moins dans la première version de l’interface, voire dans la seconde si l’os est suffisament récent.

Exemple: TAPIClass est de type ITTAPI, et possède une propriété Addresses. Dans la doc ils te disent renvoyer une collection de ITAddress. Ca c’est le minimum. Si tu te trouves sur un Os suffisament récent (en l’occurance, possédant TAPI 3.1), tu pourras caster ton ITAddress en ITAddress2 et ainsi accéder à plus de propriétées.

C’est une notion essentielle dans tout ce qui touche à COM, qu’il faut bien piger quand tu débutes.

PS: Tapi en français, tu peux toujours réver. Déjà que la doc en anglais est pas légion, alors en français.

Tout d’abord merci pour ta réponse Styx31

Bon pour régler la question de l’anglais je rassure tout le monde je suis quand même capable de le lire et de le comprendre, ce que je voulais dire par là c’est que ne connaissant ni la prog sous windows ni TAPI (jusqu’à hier matin jamais entendu parlé) et ayant dû m’engloutir un bon tiers du “MAPI, SAPI & TAPI Developer’s Guide” de Michael Amundsen et un nombre incalculable de pages msdn le tout en anglais je suis pas sur de comprendre tous les concepts à 100%.

Pour ce qui est du code managed de .NET du C# et compagnie j’avoue que je n’entend parler que de ca mais comme je le disais plus haut la seule prog que je connais c’est le C (et un tout petit peu de C++ en cours) avec un bête éditeur de texte le tout compilé en ligne de commande avec gcc sous linux.

Pour ce qui est de COM je ne vois pas exactement ce que c’est mais depuis hier je ne vois que ca donc j’essaie de comprendre…

Je suis sous Windows XP donc a priori c’est bien du TAPI 3

Enfin voila quoi je découvre plein de trucs d’un coup et c’est un peu le dawa dans ma tête mais bon c’est que le deuxième jour et j’espère arriver à mieux maîtriser tout ca d’ici la fin de la semaine.

Merci encore pour les conseils donnés (et futurs s’il vous plait B)).

Si tu n’as rien d’imposé concernant le langage, si tu as des connaissances en langages objets/java), je ne peux que te recommander VIVEMENT d’utiliser C# plutôt que C++. Ca t’enlèvera pas mal de contraintes de codage dont tu n’as surement pas grand chose à faire.

Ca fait legerement lourd a tout avaler d’un coup pour hier et en anglais, COM, interop, C#, C++, TAPI, VS 2005. Vous allez me lui faire peter un lobe du cerveau a ce pauvre zortom la. Rien que pour vraiment piger COM et avoir “le declic” de l’architecture du truc, ca peut prendre un moment mais avec tout le reste en plus c’est un coup a se degouter de la prog windows en croyant (a tord) que c’est trop dur B)

Comme le dit GloP ca fait beaucoup de choses nouvelles d’un coup mais bon c’est dans le cadre de mon stage de fin d’études et de toute façon, même si j’espère ne pas faire de la prog l’essentiel de mon potentiel futur boulot (j’ai une “formation” orientée Réseaux et Télécoms et j’effectue mon stage de 6 mois pour un petit opérateur télécoms orienté VoIP et NGN qui m’embauchera probablement à la fin du stage), je préfère apprendre tout ca quand je suis encore dans un statut “étudiant” plutôt que de passer pour un tocard à ce niveau la dans les années à venir. Bon bien sûr ce serait mieux si cette appli était finie dans les 2 ou 3 prochains mois car j’ai le sentiment que mon tuteur de stage m’a donné ça à faire justement pour tester mes capacités d’adaptation à un univers inconnu. Ensuite je pense que j’aurais certainement une mission un peu plus en rapport avec ce qu’on nous a appris en cours.

Styx tu dis que je ferais mieux d’utiliser le C# car ce serait plus simple pour moi. Le problème c’est que je connais deja assez peu le C++ car on s’est contenté d’avoir quelques cours et 3 ou 4 TPs pour apprendre la base il y a deja 2 ans de ca. Par contre je trouve l’approche “objet” (du moins ce que je crois en avoir compris) beaucoup plus simple et instinctive que la prog “traditionnelle”.

Lors de mes 2 dernières années (qui étaient consacrées uniquement à ma spécialité contrairement aux 3 premières qui n’étaient que du tronc commun), nous avons beaucoup de TP de prog orienté système linux et réseaux (par exemple un petit webmailer contenant un serveur http et un client smtp/pop3 le tout codé à la main) mais uniquement en C. Je ne suis pas spécialement fan de prog mais dans l’ensemble je m’en sortait plutôt pas trop mal grâce aux man de toutes fonctions disponibles.

Ai-je réellement interêt à utiliser un language que je ne connais pas? Quelles sont les différences majeures entre C et C#? Entre C++ et C#?

Bon je retourne éplucher MSDN et merci encore de m’épauler dans cette croisade pour découvrir l’univers de la prog Windows B)

Tout dépend pas mal de la finalité de l’outil que tu dois constuire : s’agit-il juste d’une appli en mode console affichant un log des communications effectuées à l’aide de TAPI ? Dans ce cas, le C++ peut convenir. Ou bien tu es sensé créer une véritable application complète, avec une interface graphique qui présente des listes d’appels, avec de jolis boutons et cie ? Alors le C++ risque de te compliquer pas mal la chose.

Ton stage consiste à uniquement créer cette application ? Ou bien ce n’est qu’une partie de ton taf ?

Dans tous les cas, tu peux effectivement commencer par du C++, mode console, tout simple, pour commencer à manipuler l’objet TAPI, et ensuite voir quelles sont tes options.

Je suis allé un peu vite en te parlant de COM, mais j’ai encore en mémoire les déboires de mon stagiaire qui avait du s’infliger tout ça à maitriser en quelques semaines. B) Et il n’est pas forcément très simple de savoir par quoi commencer quand on découvre COM.

Bon courage

Je suis censé créer une application complète avec des jolis boutons et consorts. Pour l’instant c’est ma seule tâche pour mon stage mais comme le dev ca me gonfle un peu j’espère avoir fini plus tôt (genre 3 ou 4 mois) et pouvoir faire autre chose à la fin du stage.

J’ai trouvé des samples d’applis basiques TAPI en C++ dans le SDK de Windows et je pense que je vais partir de la, tant pis le C# ce sera pour une autre fois.

Une autre petite question: y a-t-il une quelconque structure où un soft (genre outlook au hasard B)) utilisant TAPI pour communiquer signale son nom.

Le but premier de mon appli étant de surveiller les allées et venues des soft utilisant TAPI pour téléphoner.

Exemple: j’utilise Outlook pour appeler robert au numéro 06 12 34 56 78, vais-je pouvoir afficher un pop-up qui dit “Outlook appelle le 06 12 34 56 78”?

EDIT: Dans ITTAPI::SetApplicationPriority il y un pointeur vers un BSTR (chaîne de caractères je suppose) contenant le nom de l’appli. Ce BSTR est définie si l’appli en question a utilisé SysAllocString. Je suis sur la bonne voie?

Une appli complete, C++ sans en avoir fait aurement que en cours, avec tout com, tapi et vs par dessus en plus c’est du suicide pur et simple B) m’enfin c’est que mon avis B)

Bon, retour à zéro complet!
Je fais fausse route totale depuis le début et j’avais pas bien saisi l’objectif du projet (bon ça va au bout de 3 jours c’est quand même moins grave qu’au bout de 3 mois B)).

En fait ce que je dois réaliser c’est un TSP (TAPI Service Provider).

Ma boite est connectée à Centile (à Sophia-Antipolis) pour ceux qui connaissent. Le problème c’est qu’ils ne peuvent pas utiliser Outlook directement pour téléphoner, ils sont obligés de passer par un logiciel (en Java/Flash) fourni (je suppose) par Centile pour numéroter. Le but de ce que je dois réaliser est donc de pouvoir passer outre ce logiciel en créant notre propre .tsp.

Bon j’espère que cette fois ci j’ai bien tout compris mais au moins ces 3 jours m’auront permis de me familiariser avec plusieurs concepts totalement inconnus pour moi jusque la.

Merci beaucoup à GloP et Styx31 pour vos précieux conseils en tout cas B) (et partez pas trop loin je sens que je vais ravoir encore plein d’autres questions :D).

Je suis d’accord, tu va passer ton temps a galerer, deja, approches un langage plus « noob friendly » tel le C# :smiley:
(Et tu va gagner un temps fou au niveau de ton interface)