Chen Jian

导航

 
1.需要用到的结构
typedef   struct   _SM_PARAM
{
char   SCA[16];//+8613552678753//   短消息服务中心号码(SMSC地址)
char   TPA[16];//   目标号码或回复号码(TP-DA或TP-RA)
char   TP_PID;//   用户信息协议标识(TP-PID),00   GSM短信,[99短信状态报告,内部标识]
char   TP_DCS;//   用户信息编码方式(TP-DCS)
char   TP_SCTS[16];//030325122030//   服务时间戳字符串(TP_SCTS),   接收时用到
char   TP_UD[161];//   原始用户信息(编码前或解码后的TP-UD)
char   index;//   短消息序号,在读取时用到
char   original[350];   //接收到信息的原码
}SM_PARAM,*LPSM_PARAM;
2.接口函数

2.1   初始化COM口和模块   [成功返回COM口的句柄,失败返回NULL]
HANDLE   _stdcall   InitComm(int/*COM口的ID*/,BOOL   bStatusReport=FALSE/*是否开通短信报告*/);
初始化COM,bStatusReport默认关闭状态,如果需要支持短信状态设置TRUE.建议关闭状态报告

2.2   带参数的初始化   [成功返回COM口的句柄,失败返回NULL]
HANDLE   _stdcall   InitCommParam(int/*COM口的ID*/,COMMTIMEOUTS/*串口超时结构*/,BOOL   bStatusReport=FALSE/*是否开通短信报告*/);
如果需要自己设置COMMTIMEOUTS结构值,就要调此函数,bStatusReport作用同上

2.3   发送新短信   [成功返回TRUE,失败返回FALSE]
BOOL   _stdcall   SendSMS(HANDLE   hComm/*操作COM口的句柄*/,char[16]/*对方手机号*/,char[150]   /*发送内容*/,int   nSMSType=2/*短信类别,1免提短信,2普通短信*/);

2.3.1   参数说明
hComm   调用InitComm或者InitCommParam返回的值.
char[16]   /*对方手机号*/   16字符   ,对持以下几种
1.   86+手机号   中国移动/中国联通   例如:8615966019901
2.   106+区号+电话号码   中国网通小灵通   例如:10601081015255
3.   直接就是号码.   特殊号码   例如:10086   10010

char[150]   向对方发送短信,发送内容最长140个字节.为70个汉字.超过后系统会自动截断.  

nSMSType   短信类别,1免提短信,2普通短信   一种是免提短信,直接在屏幕显示内容,不存储.另一种就是普通的短信,需要手动打开.存储SIM卡

2.4   接收短信   [执行成功后返回共收到的短信条数]
int   _stdcall   ReceiveSMS(HANDLE/*操作COM口的句柄*/,SM_PARAM*/*返回所接收的全部短信*/);

参数说明
HANDLE   操作COM口的句柄,调用InitComm或者InitCommParam后返回的值.
SM_PARAM   存储短信的指针,调用前声明足够大的空间.例如:
//可以存放500条短信的空间,并初始化为空
SM_PARAM[500]={0};
HANDLE   hComm   =   InitComm(1);
int   nCount=ReceiveSMS(hComm,SM_PARAM);
接收到新短信后.要注意你初始化COM前是否开通状态报告,如果开通要注意以下信息
/*typedef   struct   _SM_PARAM
{
char   SCA[16];//+8613552678753//   短消息服务中心号码(SMSC地址)
char   TPA[16];//   目标号码或回复号码(TP-DA或TP-RA)
char   TP_PID;//   用户信息协议标识(TP-PID),00   GSM短信,[99短信状态报告,内部标识]
char   TP_DCS;//   用户信息编码方式(TP-DCS)
char   TP_SCTS[16];//030325122030//   服务时间戳字符串(TP_SCTS),   接收时用到
char   TP_UD[161];//   原始用户信息(编码前或解码后的TP-UD)
char   index;//   短消息序号,在读取时用到
char   original[350];   //接收到信息的原码
}SM_PARAM,*LPSM_PARAM;*/
for(int   i=0;i <nCount;i++)
{
if(SM_PARAM[i].TP_PID=99)
{
//代表此条短信为状态报告,没有实际内容
//注意.如果是状态报告
//SM_PARAM[i].TP_UD   内容为//   MO   到达SMSC时间   从本地到短消息中心服务器的时间
//SM_PARAM[i].TP_SCTS   内容为//SMSC   到达   MT时间   从短消息中心服务器下发到目标手机上的时间
char   temp[25]={0};
sms_StrToDate(SM_PARAM[i].TP_UD,temp);   //转日期格式
meset(temp,0,sizeof(temp));
sms_StrToDate(SM_PARAM[i].TP_SCTS,temp);   //转日期格式
}
else
{
//代表真正收到的短信
}
}
//如果对方手机处于有信号或者非停机状态.发送成功后5秒会收到短信报告状态.否则什么时候开机什么时候才会收到报告状态

2.5   删除指定短信或者全部短信   [成功返回TRUE,失败返回FALSE]
BOOL   _stdcall   DeleteSMS(HANDLE/*COM口的句柄*/,int/*删除指定编号的ID,0代表删除全部短信*/);
参数说明
HANDLE   初始化成功后返回的句柄
int   要删除短信的编号,如果为0,代表清空所有短信.否则删除指定编号的短信

2.6   卸载模块,关闭COM口  
void   _stdcall   UnInitComm(HANDLE/*卸载指定COM口,需要打开时的COM句柄*/);
参数说明
HANDLE   初始化COM口返回的句柄

2.7   附加函数   转换日期[030325122030]格式转成   [2003-3-25   12:20:30]
DLL_DEF   int   _stdcall   sms_StrToDate(const   char   *pSrc/*短信中的日期串*/,char   *pDst/*转换后的空间*/);
参数说明
const   char   *pSrc   SM_PARAM结构中TP_SCTS值.接收到的日期格式
pDst   转换正式日期格式空间
示例
SM_PARAM   sms={0};
char   date[25]={0};
sms_StrToDate(sms.TP_SCTS,date);
printf( "Date:%s ",date);
*提示:调用接口时.传参时注意参数的大小.如果越界就是产生异常.char[150]   可以存放150个字节.超过后就会越界
posted on 2014-01-25 08:15  Chen Jian  阅读(1523)  评论(0编辑  收藏  举报