您的位置:首页 > 编程语言

Windows Mobile SMS发送操作代码

2010-01-28 09:19 190 查看
在windows mobile中发送SMS主要需要调用以下两个API:
HRESULT SmsOpen (
const LPCTSTR ptsMessageProtocol,
const DWORD dwMessageModes,
SMS_HANDLE* const psmshHandle,
HANDLE* const phMessageAvailableEvent);

HRESULT SmsSendMessage (
const SMS_HANDLE smshHandle,
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);
  
 
在一本书的光盘代码里面有发送短信的函数,在很大程度上简化了操作--只要能用这个函数就行了。通过这个函数也能能搞明白发送SMS的代码是怎么回事儿了。
 
各个参数意义如下:bSendConfirmation 是否接受确认消息
bUserDefaultSMSC 是否使用默认短消息信息中心号码
lpszSMSC 短信中心的号码
lpszRecipient 信息接受方号码
lpszMessage 所发送的文本信息
 
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=0;
HRESULT hr=0;

// 打开SMS
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;
}

// 建立短信中心地址(号码)
if(!bUseDefaultSMSC)
{
smsaSource.smsatAddressType = SMSAT_INTERNATIONAL;
_tcsncpy(smsaSource.ptsAddress, lpszSMSC, SMS_MAX_ADDRESS_LENGTH);
}

// 创建目标地址(号码)
memset (&smsaDestination, 0, sizeof (smsaDestination));
smsaDestination.smsatAddressType = SMSAT_INTERNATIONAL;
_tcsncpy(smsaDestination.ptsAddress, TEXT("+8613611995238"), SMS_MAX_ADDRESS_LENGTH);

// 设置提供者服务
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;

// 发送
if(SUCCEEDED(hr=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);

}

//关闭
VERIFY(SUCCEEDED(SmsClose(smshHandle)));
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息