发短信源码

分享一段发短信的源码,用于WinCE/WM,M8上测试通过。 /************************************ * 调用范例: * 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 * *************************************/ #include #pragma comment(lib,"sms.lib") bool 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; } } 090730更新修正了没清空头信息导致部分情况下无法发送的bug。这个问题比较奇怪,当初在“管它”测试的时候任何地方都会发送成功,但是在别的工程不成功。 另外感谢网友Benjamin的贴子(http://www.cppblog.com/zhangyq/archive/2008/04/10/46744.html),我把他的代码转载到这里: #include #pragma comment(lib,"sms.lib") void SendSMS1(LPCTSTR lpszMessage, LPCTSTR lpszRecipient,LPCTSTR lpszSMSC,BOOL bSendConfirmation, BOOL bUseDefaultSMSC) { SMS_HANDLE smshHandle; //短信句柄 SMS_ADDRESS smsaDestination;//接收号码 TEXT_PROVIDER_SPECIFIC_DATA tpsd; SMS_MESSAGE_ID smsmidMessageID; // 打开发送句柄 // 协议字符串, SMS_MODE_SEND:发送模式 psmshHandle:返回的句柄 phMessageAvailableEvent:通知的事件 if(FAILED(SmsOpen(SMS_MSGTYPE_TEXT, SMS_MODE_SEND, &smshHandle, NULL))) { return; } // Create the destination address //SMSAT_NATIONAL:国内电话 SMSAT_INTERNATIONAL:国际电话 smsaDestination.smsatAddressType = SMSAT_UNKNOWN; _tcsncpy(smsaDestination.ptsAddress, lpszRecipient, SMS_MAX_ADDRESS_LENGTH); // Set up provider specific data memset(&tpsd, 0, sizeof(tpsd)); //tpsd.dwMessageOptions = PS_MESSAGE_OPTION_NONE; tpsd.dwMessageOptions = PS_MESSAGE_OPTION_STATUSREPORT;//表示需要状态报告 tpsd.psMessageClass = PS_MESSAGE_CLASSUNSPECIFIED; //PS_MESSAGE_CLASS0表示短信在被接收后立即显示且不存储在收件箱(称为闪信) //PS_MESSAGE_CLASS1表示一般的情况,被接收后存储到收件箱并发送一个确认回短信中心,发送方收到一个已被接收的状态报告。 tpsd.psReplaceOption = PSRO_NONE; //手动清空头信息 ZeroMemory(tpsd.pbHeaderData, sizeof(tpsd.pbHeaderData)); tpsd.dwHeaderDataSize = 0; tpsd.fMessageContainsEMSHeaders = FALSE; tpsd.dwProtocolID = SMS_MSGPROTOCOL_UNKNOWN; // Send the message, indicating success or failure /* *smshHandle: SmsOpen打开的句柄
信二次开发接口适用于WAVECOM、西门子、诺基亚、摩托罗拉等支持标准AT 指令的GSM 信终端 使用方式: 将sms.dll 文件拷贝到系统安装目录中的system32 文件夹中,然后再根据以下接口函数说明和提供的例 程源码开发 接口函数: 1、Sms_Connection(Com_Port As Integer,Com_BaudRate As Integer, Mobile_Type As String) As Integer Sms_Connection 函数说明如下: 功能描述:用于初始化终端与串口的连接 Com_Port:串口号(0 为红外接口,1,2,3,...为串口) Com_BaudRate:波特率 Mobile_Type:返回终端型号 Sms_Connection:返回值(0:连接终端失败;1:连接终端成功) 2、Sms_Send(Sms_TelNum As String, Sms_Text As String) As Integer Sms_Send 函数说明如下: 功能描述:发送Sms_TelNum:发送给的终端号码 Sms_Text:发送的信内容 Sms_Send:返回值(0:发送信失败;1:发送信成功) 3、Sms_Receive(Sms_Type As String, Sms_Text As String) As Integer Sms_Receive 函数说明如下: 功能描述:接收指定类型的Sms_Type:信类型(0:未读信;1:已读信;2:待发短信;3:已发短信;4:全部信) Sms_Text:返回指定类型的信内容字符串(信内容字符串说明:信与信之前用"|"符号 作为分隔符,每条信中间的各字段用"#"符号作为分隔符) 4、Sms_Delete(ByVal Sms_Index As String) As Integer Sms_Delete 函数说明如下: 功能描述:删除指定的Sms_Index:信的索引号 5、Sms_AutoFlag()As Integer Sms_AutoFlag 函数说明如下: 功能描述:检测连接的终端是否支持自动收发短信
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值