Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1618 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  SMS avec TAPI - Stp help me!!!

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

SMS avec TAPI - Stp help me!!!

n°801735
luckyjo
Posté le 21-07-2004 à 12:30:20  profilanswer
 

Salut à tous,  
j'voudrais utiliser TAPI pour envoyer des sms et de la donnée via n'importe quel modem, au moins ceux qui sont compatible avec TAPI. A part les fonctions comme lineInitialize(...) et lineOpen(...) que je sais à peu pret utiliser, j'en connais pas d'autre. Bien sûr, la MSDN de Microsoft nous donne tout un tas de fonctions utiles mais y'a aucun exemple concret. Alors si quelqu'un à au moins déjà utilisé TAPI dans le passé, qu'il me fasse signe svp.
P.S.: le_zell, t'aurais pas fais un stage à la SNCF par hazard en 2003???

mood
Publicité
Posté le 21-07-2004 à 12:30:20  profilanswer
 

n°801766
gedeon
Posté le 21-07-2004 à 12:52:49  profilanswer
 

Juste une question pour ma culture perso.
T'es sur qu'il est possible d'envoyer des SMS avec un modem ?  ;)

n°801774
gedeon
Posté le 21-07-2004 à 12:59:04  profilanswer
 

Je ne parle pas de modem GSM ou GPRS bien sur !

n°801844
luckyjo
Posté le 21-07-2004 à 14:01:29  profilanswer
 

comme tu dis, on peux envoyer des SMS qu'avec des modems GSM ou GPRS comme par exemple des modems WAVECOM WMOD2 qui utilisent les commandes HAYES ("AT+..." ).

n°801861
luckyjo
Posté le 21-07-2004 à 14:23:24  profilanswer
 

sinon, quelqu'un aurait'il déjà experimenté l'interface TAPI? merci...

n°801868
pilou51
Posté le 21-07-2004 à 14:37:38  profilanswer
 

J'ai utilisé TAPI l'été dernier, mais c'était pour développer une application de monitoring de ligne téléphonique numérique. Je ne connais pas bien les possibilités de TAPI avec des interfaces GSM. Par contre le code d'ouverture de ligne doit être le même, je regarderai ce soir si je peux le retrouver chez moi (j'ai changé de boîte entre temps).
 
C'est très dur de trouver des exemples vraiment utilisables sur le net, je me souviens m'être inscrit à un newsgroup qui m'avait bien aidé (je rechercherai les coordonnées) et j'avais commandé un bouquin aux US (qui n'a pas été traduit) écrit par l'un des créateurs de TAPI et qui était pas trop mal.
 
Donc tout ça pour dire que je chercherai mes codes ce soir (ou demain soir) mais ça ne concernera que les initialisations et ouvertures de ligne, faudra que tu te débrouilles pour l'envoi de SMS ;) (mon application ne faisait qu'écouter et envoyer un callback en cas d'appel reçu)
 
Bon courage

n°801872
luckyjo
Posté le 21-07-2004 à 14:41:49  profilanswer
 

ok, je te remercie d'avance pilou. bonne soirée

n°801883
pilou51
Posté le 21-07-2004 à 14:53:41  profilanswer
 

Bon correction, j'avais mon code dans mes MP, on me l'avait déjà demandé :p
 
Donc le code de détection des appels entrants :  

Code :
  1. :
  2.   #include <stdio.h>
  3.   #include <stdlib.h>
  4.   #include <windows.h>
  5.   #include <tapi.h>
  6.   #include "entrant.h"
  7.  
  8.   // Valeur de retour de succès des méthodes TAPI = 0  
  9.   #define SUCCESS 0
  10.  
  11.   // Constructeur par défaut  
  12.   Centrant::Centrant(){
  13.      m_hLineApp=NULL;
  14.      m_hCall=NULL;
  15.      m_hLine=NULL;
  16.      m_dwNumDevs=0;
  17.      m_dwDeviceID=0;
  18.      m_dwAPIVersion = 0x00020000;// Ici 2.0 pour l'Alcate  
  19.      m_dwRequestedID = 0;
  20.      m_lAsyncReply = 0;
  21.      m_bShuttingDown = 0;
  22.      m_bStoppingCall = 0;
  23.      m_bInitializing = FALSE;
  24.      m_bReplyReceived = FALSE;
  25.      m_bTapiInUse = FALSE;
  26.      m_bInitialized = FALSE;
  27.      memset(&(lip), 0, sizeof (lip));
  28.      lip.dwOptions = NULL;
  29.      lip.dwOptions = LINEINITIALIZEEXOPTION_USEEVENT;
  30.      lip.dwTotalSize = sizeof(lip);
  31.   }
  32.    
  33.   // Destructeur  
  34.   Centrant::~Centrant(){}
  35.  
  36.   // Unique instance globale de la classe Centrant  
  37.   Centrant App;
  38.  
  39.  
  40.   void FindCallerNumber (HCALL hCall, char *pOut, int size) {
  41.      int len;
  42.      char *pIn;
  43.      union {
  44.         char c[1024];
  45.         LINECALLINFO lci;
  46.      } u;
  47.    
  48.      memset(pOut, 0, size);
  49.      size = size - 1;
  50.      memset(&u.lci, 0, sizeof(u));
  51.      u.lci.dwTotalSize = sizeof (u);
  52.    
  53.      if (lineGetCallInfo(hCall, &u.lci) == 0) {
  54.         pIn = (char*)&u.lci;
  55.         pIn += u.lci.dwCallerIDOffset;
  56.         len = u.lci.dwCallerIDSize;
  57.      
  58.         if (size > len) size = len;
  59.           memcpy (pOut, pIn, size);
  60.      }
  61.   }
  62.  
  63.   // Fonction Callback  
  64.   void Centrant::HandleLineCallState(DWORD dwDevice, DWORD dwMessage, DWORD dwCallbackInstance, DWORD dwParam1, DWORD dwParam2, DWORD dwParam3) {
  65.      char chaine[100] = "http://gpl/prod/formulaires/appelentrant.php?num=";
  66.      char pOut[20];
  67.      if (dwMessage == LINE_APPNEWCALL && dwParam1 == LINECALLSTATE_OFFERING) {
  68.         FindCallerNumber((HCALL)dwParam2, pOut, 1024);
  69.         strcat(chaine, pOut);
  70.         // Vérification du numéro entrant (bugs de l'OmniPCX + numéros cachés)  
  71.         if (strcmp(pOut, "10" ) && pOut[0] == '0') ShellExecute(NULL, "open", "c:/progra~1/Plus!/Micros~1/IEXPLORE.EXE", chaine, NULL, SW_SHOWNA);
  72.        }
  73.   }
  74.  
  75.   // Fonction de test d'erreur à la création du hLineApp  
  76.   BOOL Centrant::HandleLineErr(long lLineErr)
  77.   {
  78.      BOOL bRet=FALSE;
  79.    
  80.      if(lLineErr > SUCCESS)
  81.         return bRet;
  82.    
  83.      switch(lLineErr)
  84.      {
  85.        case SUCCESS:
  86.         bRet=TRUE;
  87.         break;
  88.        case LINEERR_INVALCARD: // Erreurs non gérée sur une ligne RNIS  
  89.        case LINEERR_INVALLOCATION:
  90.        case LINEERR_INIFILECORRUPT:
  91.         printf("Valeurs du fichier de configuration invalides\n" );
  92.         break;
  93.        case LINEERR_NODRIVER:
  94.         printf("Problème avec le driver de téléphonie\n" );
  95.         break;
  96.        case LINEERR_REINIT:
  97.         printf("Reinitialisation\n" );
  98.         break;
  99.        case LINEERR_NOMULTIPLEINSTANCE:
  100.         printf("Supprimez une des copies du driver de téléphonie\n" );
  101.         break;
  102.        case LINEERR_NOMEM:
  103.         printf("Pas assez de mémoire, abandon de l'opération\n" );
  104.         break;
  105.        case LINEERR_OPERATIONFAILED:
  106.         printf("L'opération de TAPI a échoué\n" );
  107.         break;
  108.        case LINEERR_RESOURCEUNAVAIL:
  109.         printf("Une ressource TAPI est actuellement indisponible\n" );
  110.         break;
  111.        default:
  112.         printf("Erreur survenue lors du HandleLineErr()" );
  113.         break;
  114.      }
  115.      return bRet;
  116.   }
  117.  
  118.   // Fonction de création de l'objet hLineApp  
  119.   BOOL Centrant::Create() {
  120.      long lReturn, lReturn2;
  121.      if (m_hLineApp) return TRUE;
  122.        if (m_bInitializing) return FALSE;
  123.        m_bInitializing = TRUE;
  124.      //Initilisation de TAPI  
  125.      do {
  126.         lReturn = ::lineInitializeEx(&(m_hLineApp), NULL, NULL/*lineCallbackFunc*/, "Appel entrant", &m_dwNumDevs, &m_dwAPIVersion, &lip);
  127.         if (m_dwNumDevs == 0) {
  128.            m_bInitializing = FALSE;
  129.            printf("Erreur de NumDevs", lReturn);
  130.            return FALSE;
  131.         }
  132.         if (HandleLineErr(lReturn)) continue;
  133.         else {
  134.            printf("Erreur d'initialisation de la ligne\n" );
  135.            m_bInitializing = FALSE;
  136.            return FALSE;
  137.         }
  138.      }
  139.      while (lReturn != SUCCESS);
  140.      // Ouverture de la ligne RNIS à écouter (DeviceID 0)  
  141.      lReturn2 = lineOpen(m_hLineApp, 0, &m_hLine, m_dwAPIVersion, 0, NULL, LINECALLPRIVILEGE_MONITOR, NULL, NULL);
  142.      App.m_bInitializing = FALSE;
  143.      printf("Connection effectuee ! \n" );
  144.      printf("lReturn : %ld, lReturn2 : %ld, Nombre de peripheriques : %ld\n", lReturn, lReturn2, App.m_dwNumDevs);
  145.      return TRUE;
  146.   }
  147.  
  148.   // Fonction principale  
  149.   int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) {
  150.      DWORD dwStatus;
  151.      linemessage_tag lmsg;
  152.      HANDLE hTapiEvent = NULL;
  153.      if (!App.Create()) return -1; 
  154.        // Création du handle sur event  
  155.      hTapiEvent = App.lip.Handles.hEvent;
  156.      while (1) {
  157.         printf("En attente d'un event\n" );
  158.         // En attente d'un event  
  159.         dwStatus = WaitForSingleObject(hTapiEvent, INFINITE);
  160.         // Récupération de l'event et traitement  
  161.         dwStatus = lineGetMessage(App.m_hLineApp, &lmsg, 0);
  162.         App.HandleLineCallState(lmsg.hDevice, lmsg.dwMessageID, lmsg.dwCallbackInstance, lmsg.dwParam3, lmsg.dwParam2, lmsg.dwParam3);
  163.      }
  164.      lineShutdown(App.m_hLineApp);
  165.      getchar();
  166.      return 0;
  167.   }


 
et le .h correspondant :  

Code :
  1. class Centrant {
  2.     public
  3.      DWORD m_dwNumDevs;
  4.      DWORD m_dwDeviceID;
  5.      DWORD m_dwRequestedID;
  6.      LONG m_lAsyncReply;
  7.    
  8.      BOOL m_bShuttingDown;
  9.      BOOL m_bStoppingCall;
  10.      BOOL m_bInitializing;
  11.      BOOL m_bReplyReceived;
  12.      BOOL m_bTapiInUse;
  13.      BOOL m_bInitialized;
  14.    
  15.      HLINEAPP m_hLineApp;
  16.      HCALL m_hCall;
  17.      HLINE m_hLine;
  18.      DWORD m_dwAPIVersion;
  19.      char m_szPhoneNumber[20];
  20.      char szLineName[256];
  21.    
  22.      LINEINITIALIZEEXPARAMS lip;
  23.    
  24.      Centrant();
  25.      ~Centrant(); 
  26.      BOOL Create();
  27.      BOOL HandleLineErr(long lLineErr);
  28.      void lineCallbackFunc(DWORD dwDevice, DWORD dwMsg, DWORD dwCallbackInstance, DWORD dwParam1, DWORD dwParam2, DWORD dwParam3);
  29.      void HandleLineCallState(DWORD dwDevice, DWORD dwMessage, DWORD dwCallbackInstance, DWORD dwParam1, DWORD dwParam2, DWORD dwParam3);
  30.   };


 
Pas de commentaire sur la qualité du code, j'étais jeune (:sol:) et surtout je n'avais jamais fait de C++ avant ça. Et TAPI pour débuter le C++ y'a mieux je pense. :)
 
Voilà j'espère que ça t'aidera, en tout cas ça marchait :hello:

n°801963
luckyjo
Posté le 21-07-2004 à 15:43:32  profilanswer
 

ok je te remercie, je vais regarder de plus pres ton code. sympa en tout cas d'avoir cherché.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  SMS avec TAPI - Stp help me!!!

 

Sujets relatifs
help !!compter dans une plage a partir d'un cellule active .... HELP !!
Expression Reguliere cplx, need help.[MySQL]HELP requete
[need help]easy php et variable dans l'url[php]input files avec separation d'un nom de fichier[need help]
script flash problème - please helpinterface TAPI : à ceux qui se sentent prêts à m'aider...
(RESOLU) SCRIPING IRC help needed pour un bot ...matlab, help!!!
Plus de sujets relatifs à : SMS avec TAPI - Stp help me!!!


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR