2009-12-22 1 views
2

Je suis en train de développer une application pour le Windows Mobile 6 dans laquelle il est censé capturer le SMS avec le numéro de l'expéditeur et le traiter. L'application doit également envoyer des SMS à des numéros spécifiques. Quelles bibliothèques est-ce que j'utilise pour accomplir? Des liens vers des tutoriels sont également nécessaires s'il vous plaît.Envoyer et recevoir (intercepter) SMS dans Windows Mobile 6

Mise à jour:

Envoi de SMS: http://msdn.microsoft.com/en-us/library/microsoft.windowsmobile.pocketoutlook.smsmessage.send.aspx

Messages: Intercepter http://msdn.microsoft.com/en-us/library/microsoft.windowsmobile.pocketoutlook.messageinterception.aspx

Répondre

3

Pour recevoir un SMS en code natif (source se trouve here). Ce ne capture que le dernier SMS reçu:

#include <sms.h> 

struct ReceiveSmsMessage  // Define a structure for storing the 
{       // received data of an SMS message 
    TCHAR SmsText[200];  // The TCHAR fields are filled in 
    TCHAR SmsPhone[50];  // Once all is ready SmsFlag goes True 
    bool SmsFlag;   // It is up to the control thread to 
} ReadSms; 

DWORD SmsMessageThread (LPVOID lpvoid) 
{ 
// This Threads function is to wait for incoming SMS messages and read them as required 
// It simply passes the result to the global ReadSms variable and sets its flag to TRUE 
// Further processing of the message data is done by the main control thread 

    SMS_ADDRESS smsaDestination; 
    TEXT_PROVIDER_SPECIFIC_DATA tpsd; 

    while(TRUE) 
    { 
     HANDLE hRead = CreateEvent (NULL, FALSE, FALSE, NULL); 
     // Open an SMS Handle 
     HRESULT hr = SmsOpen (SMS_MSGTYPE_TEXT, SMS_MODE_RECEIVE, 
          &smshHandle, &hRead); 
     if (hr != ERROR_SUCCESS) 
     { 
      MessageBox (NULL, TEXT(
       "Unable to get an SMS Read Handle. Please do a warm reset and try again."), 
       TEXT("Error"), MB_OK); 
      return 0; 
     } 

     // Wait for message to come in. 
     int rc = WaitForSingleObject (hRead, INFINITE); 
     if (rc != WAIT_OBJECT_0) { 
      MessageBox (NULL, TEXT("Failure in SMS WaitForSingleObject"), 
       TEXT("Error"), MB_OK); 
      SmsClose (smshHandle); 
      return 0; 
     } 
     memset (&smsaDestination, 0, sizeof (smsaDestination)); 
     DWORD dwSize, dwRead = 0; 

     hr = SmsGetMessageSize (smshHandle, &dwSize); 

     char *pMessage = (char *)malloc (dwSize+1); 
     memset (&tpsd, 0, sizeof (tpsd)); 
     hr = SmsReadMessage (smshHandle, NULL, &smsaDestination, NULL, 
         (PBYTE)pMessage, dwSize, 
         (PBYTE)&tpsd, sizeof(TEXT_PROVIDER_SPECIFIC_DATA), 
         &dwRead); 
     if ((hr == ERROR_SUCCESS) && (ReadSms.SmsFlag == FALSE)) 
     { 
      //Received a message all OK, so pass the results over to the 
      //global variable 
      pMessage[dwSize] = 0; //Terminate the string 
      wcscpy(ReadSms.SmsText, (TCHAR*)pMessage); 
      wcscpy(ReadSms.SmsPhone, TEXT("+")); //International Number 
      wcscat(ReadSms.SmsPhone, (TCHAR*)smsaDestination.ptsAddress); 
      ReadSms.SmsFlag = TRUE;   
     } 

     free (pMessage); 
     SmsClose (smshHandle); 
     CloseHandle(hRead); 
    } 

    return 0; 
} 

Pour C# oeil à MessageInterceptor, bien que je ne connais pas la méthode pour lire le message lui-même.

Vous pouvez également télécharger le code source OpenNetCF SDF 1.4 et remplir la fonctionnalité manquante de la partie de réception (il a été commenté).