发送短信
BOOL SendSMS(TCHAR* szDestination, TCHAR* szContent)
{
HRESULT hr;
SMS_HANDLE hSms = NULL;
hr = SmsOpen(SMS_MSGTYPE_TEXT, SMS_MODE_SEND, &hSms, NULL);
if(FAILED(hr))
{
return FALSE;
}
SMS_ADDRESS smsDestination;
SMS_MESSAGE_ID smsMsgId = 0;
memset(&smsDestination, 0, sizeof(SMS_ADDRESS));
smsDestination.smsatAddressType = SMSAT_INTERNATIONAL;
_tcscpy(smsDestination.ptsAddress, TEXT("+86"));//国内手机必须在手机号码前加上+86
_tcscat(smsDestination.ptsAddress, szDestination);
DWORD dwMessageLength = 0;
TCHAR tchMessage[140] = TEXT("/0");
_tcscpy(tchMessage, szContent);
dwMessageLength = lstrlen(tchMessage)*sizeof(TCHAR);
TEXT_PROVIDER_SPECIFIC_DATA txtProviderData;
DWORD dwProviderLenth = 0;
memset(&txtProviderData, 0, sizeof(TEXT_PROVIDER_SPECIFIC_DATA));
txtProviderData.dwMessageOptions = PS_MESSAGE_OPTION_STATUSREPORT;
txtProviderData.psMessageClass = PS_MESSAGE_CLASS1;
txtProviderData.psReplaceOption = PSRO_NONE;
DWORD dwProviderLength = sizeof(TEXT_PROVIDER_SPECIFIC_DATA);
hr = SmsSendMessage(hSms, NULL, &smsDestination, NULL,(BYTE*)tchMessage,
dwMessageLength, (LPBYTE)&txtProviderData, dwProviderLength, SMSDE_OPTIMAL, SMS_OPTION_DELIVERY_NONE, &smsMsgId);
SmsClose(hSms);
}
SDK中提供了一个Mapirule的例子,展示如何拦截短信。
为了过滤垃圾短信或者拦截某些特定号码的短信,我们需要在ProcessMessage这个函数中插一杠。无非根据发送方电话号码(pspvEmail->Value.lpszW)或短信内容(pspvSubject->Value.lpszW)酌情处理。
在编译好mapirule.dll后,要对注册表进行一点改动。例中也有说明:
1)在注册表中增加一项HKEY_CLASSES_ROOT/CLSID/{3AB4C10E-673C-494c-98A2-CC2E91A48115/InProcServer32,默认值为mapirule.dll,字符型;
2)增加一项HKEY_LOCAL_MACHINE/Software/Microsoft/Inbox/Svc/SMS/Rules,新键名为{3AB4C10E-673C-494c-98A2-CC2E91A48115},值为1,DWORD型。
注册表改完,mapirule.dll拷到windows目录下。重启一下手机,拦截开始起作用。
编译有问题的话,例子所附readme有详细说明。
电话相关
除了使用TAPI的lineMakeCall可呼叫电话外,有一简单的函数PhoneMakeCall也可调用:
PHONEMAKECALLINFO info;
info.cbSize = sizeof(PHONEMAKECALLINFO);
info.dwFlags = PMCF_PROMPTBEFORECALLING;
info.pszDestAddress = L”13800138000”;
info.pszAppName = NULL;
info.pszCalledParty = NULL;
info.pszComment = NULL;
PhoneMakeCall(&info);
TAPI也支持来电拦截。首先定义一些参数:
DWORD LineHandleCount = 0;
HLINE* LineHandles = NULL;
HLINEAPP LineApp;
LPCWSTR szAppWndClass;
TCHAR szPhoneNumber[30];
然后要注册一个回调:
if (lineInitialize(
&LineApp,
hInst,
(LINECALLBACK)LineCallback,
szAppWndClass
<完>

6243

被折叠的 条评论
为什么被折叠?



