dado

dado

0个粉丝

4

问答

0

专栏

0

资料

dado  发布于  2012-12-04 11:51:25
采纳率 0%
4个问答
2548

Windows Mobile下发送短信SMS

 
  SMS(Short Messaging Service)是最早的短消息业务,也是现在普及率最高的一种短消息业务。在Windows Mobile中我们同样也可以利用已提供的SMS API接口,来实现发送/接收短信的功能。
       要实现一个简单的SMS发送短信程序,主要有三个步骤:
1.     打开SMS句柄,这里调用SmsOpen()来实现;
       HRESULT SmsOpen (
               const LPCTSTR ptsMessageProtocol,     //SMS要使用到的协议
               const DWORD dwMessageModes,           //发送/接收模式  
               SMS_HANDLE* const psmshHandle,        //成功返回的句柄
               HANDLE* const phMessageAvailableEvent ) //等待信号的事件句柄
2.     初始化短信的源地址和目的地址,和一些参数结构;
       这里的地址主要使用SMS_ADDRESS结构体:
       typedef struct sms_address_tag {
               SMS_ADDRESS_TYPE smsatAddressType; //地址的类型
               TCHAR ptsAddress[SMS_MAX_ADDRESS_LENGTH]; //地址
       } SMS_ADDRESS, *LPSMS_ADDRESS;
       数据
       typedef struct text_provider_specific_data_tag {
              DWORD dwMessageOptions;                  //操作命令
              PROVIDER_SPECIFIC_MESSAGE_CLASS psMessageClass;   //消息类
              PROVIDER_SPECIFIC_REPLACE_OPTION psReplaceOption; //代替操作
              DWORD dwHeaderDataSize;                  //头大小
              BYTE pbHeaderData[SMS_DATAGRAM_SIZE];//头地址
              BOOL fMessageContainsEMSHeaders;         //是否含有EMS头
              DWORD dwProtocolID;                      //协议ID
       } TEXT_PROVIDER_SPECIFIC_DATA;
3.     发送短信SmsSendMessage
       HRESULT SmsSendMessage (
               const SMS_HANDLE smshHandle,                //SMS句柄
               const SMS_ADDRESS * const psmsaSMSCAddress, //源地址
               const SMS_ADDRESS * const psmsaDestinationAddress,//目的地址
               const SYSTEMTIME * const pstValidityPeriod, //时间
               const BYTE * const pbData,                  //短信的数据
               const DWORD dwDataSize,                     //数据的大小
               const BYTE * const pbProviderSpecificData,  //提供者的信息
               const DWORD dwProviderSpecificDataSize,     //信息空间的大小
               const SMS_DATA_ENCODING smsdeDataEncoding,  //对短信加密的口令
               const DWORD dwOptions,                      //操作命令
               SMS_MESSAGE_ID * psmsmidMessageID);         //消息ID
4.     关闭SMS句柄
       HRESULT SmsClose (
               const SMS_HANDLE smshHandle);

下面给出一段发送短信的实现函数代码
示例:
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
       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)));
}
我来回答
回答0个
时间排序
认可量排序
易百纳技术社区暂无数据
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区