代码之家  ›  专栏  ›  技术社区  ›  Shawn Mclean

在Windows Mobile 6中发送和接收(截获)短信

  •  2
  • Shawn Mclean  · 技术社区  · 16 年前
    1 回复  |  直到 16 年前
        1
  •  3
  •   Shaihi    16 年前

    here ). 这只捕获最新收到的短信:

    #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;
    }
    

    关于C#请看 MessageInterceptor

    你也可以下载 OpenNetCF SDF 1.4 源代码并填写接收部分缺少的功能(已注释掉)。