/************************************ * 调用范例: * SendSMS(_T("+8613xxxxxxxxx"),_T("测试~")); * * Author:LOJA * Version: 1.0.1.0 * Date: 2009/07/30 * * Smartphone Platforms: Smartphone 2002 and later * OS Versions: Windows CE 3.0 and later * *************************************/ bool CNewSmsWnd::SendSMS(IN LPCTSTR lpNumber,IN LPCTSTR lpszMessage) { HRESULT hRes; SMS_HANDLE smsHandle=NULL; SMS_ADDRESS smsaDestination; SMS_MESSAGE_ID smsmidMessageID=0; TEXT_PROVIDER_SPECIFIC_DATA tpsd; hRes=SmsOpen(SMS_MSGTYPE_TEXT,SMS_MODE_SEND,&smsHandle,NULL); if (FAILED(hRes)) { return false; } //地址方式注意国内号码前加"+86" smsaDestination.smsatAddressType = SMSAT_INTERNATIONAL; _tcsncpy(smsaDestination.ptsAddress, lpNumber,SMS_MAX_ADDRESS_LENGTH); tpsd.dwMessageOptions = PS_MESSAGE_OPTION_NONE; //tpsd.dwMessageOptions = PS_MESSAGE_OPTION_STATUSREPORT;//表示需要状态报告 tpsd.psMessageClass = PS_MESSAGE_CLASS1; //PS_MESSAGE_CLASS0表示短信在被接收后立即显示且不存储在收件箱(称为闪信) //PS_MESSAGE_CLASS1表示一般的情况,被接收后存储到收件箱并发送一个确认回短信中心,发送方收到一个已被接收的状态报告。 ZeroMemory(tpsd.pbHeaderData, sizeof(tpsd.pbHeaderData)); tpsd.dwHeaderDataSize = 0; tpsd.fMessageContainsEMSHeaders = FALSE; tpsd.dwProtocolID = SMS_MSGPROTOCOL_UNKNOWN; tpsd.psReplaceOption = PSRO_NONE; hRes= SmsSendMessage(smsHandle, NULL, &smsaDestination, NULL, (PBYTE)lpszMessage, _tcslen(lpszMessage) * sizeof(TCHAR), (PBYTE)&tpsd, sizeof(TEXT_PROVIDER_SPECIFIC_DATA), SMSDE_OPTIMAL, SMS_OPTION_DELIVERY_NONE, &smsmidMessageID); SmsClose(smsHandle); if (SUCCEEDED(hRes)) { return true; } else { return false; } }
void SendSMS(BOOL bSendConfirmation, BOOL bUseDefaultSMSC, LPCTSTR lpszSMSC, LPCTSTR lpszRecipient, LPCTSTR lpszMessage) { SMS_HANDLE smshHandle; SMS_ADDRESS smsaSource; SMS_ADDRESS smsaDestination; TEXT_PROVIDER_SPECIFIC_DATA tpsd; SMS_MESSAGE_ID smsmidMessageID; // try to open an SMS Handle if(FAILED(SmsOpen(SMS_MSGTYPE_TEXT, SMS_MODE_SEND, &smshHandle, NULL))) { /* MessageBox(NULL, (LPCTSTR)LoadString(ghInstance, IDS_ERROR_SMSOPEN, 0, 0), (LPCTSTR)LoadString(ghInstance, IDS_CAPTION_ERROR, 0, 0), MB_OK | MB_ICONERROR);*/ return; } // Create the source address if(!bUseDefaultSMSC) { smsaSource.smsatAddressType = SMSAT_INTERNATIONAL; _tcsncpy(smsaSource.ptsAddress, lpszSMSC, SMS_MAX_ADDRESS_LENGTH); } // Create the destination address if( lstrlen(lpszRecipient) < 11 ){ smsaDestination.smsatAddressType = SMSAT_ABBREVIATED; } else{ smsaDestination.smsatAddressType = SMSAT_INTERNATIONAL; } _tcsncpy(smsaDestination.ptsAddress, lpszRecipient, SMS_MAX_ADDRESS_LENGTH); // Set up provider specific data memset(&tpsd, 0, sizeof(tpsd)); tpsd.dwMessageOptions = bSendConfirmation ? PS_MESSAGE_OPTION_STATUSREPORT : PS_MESSAGE_OPTION_NONE; tpsd.psMessageClass = PS_MESSAGE_CLASS1; tpsd.psReplaceOption = PSRO_NONE; tpsd.dwHeaderDataSize = 0; // Send the message, indicating success or failure if(SUCCEEDED(SmsSendMessage(smshHandle, ((bUseDefaultSMSC) ? NULL : &smsaSource), &smsaDestination, NULL, (PBYTE) lpszMessage, _tcslen(lpszMessage) * sizeof(TCHAR), (PBYTE) &tpsd, sizeof(TEXT_PROVIDER_SPECIFIC_DATA), SMSDE_OPTIMAL, SMS_OPTION_DELIVERY_NONE, &smsmidMessageID))) { /* MessageBox(NULL, (LPCTSTR)LoadString(ghInstance, IDS_SMSSENT, 0, 0), (LPCTSTR)LoadString(ghInstance, IDS_CAPTION_SUCCESS, 0, 0), MB_OK);*/ } else { /* MessageBox(NULL, (LPCTSTR)LoadString(ghInstance, IDS_ERROR_SMSSEND, 0, 0), (LPCTSTR)LoadString(ghInstance, IDS_CAPTION_ERROR, 0, 0), MB_OK | MB_ICONERROR); */ } // clean up VERIFY(SUCCEEDED(SmsClose(smshHandle))); }