|
4.02版新增加功能:1.对串口号大于9的支持(4.01版仅支持1-9的串口号);2.自动读取sim卡中的短信中心号
码:设置的短信中心号码优先,如在OpenComm前没有设在短信中心号码,将首先选择SIM卡中的短信中心号码作为控
件使用的短信中心号码,如果没有读到sim卡的短信中心号码,将采用+8613800812500为短信中心号码。3.短信有效
时间增加到24小时.4.优化了短信发送速度.发送短信优先:如果有短信等待发送,就每发送10条才接收一次短信,加
快了短信发送速度;同时发送短信时等待发送成功的时间改为根据短信内容长短动态调整:基础时间为2.2秒,根据
短信长度最多可以到4.3秒.理想情况最快发送24条/分钟.
5.增加了设置短信(在对方关机情况下在短信中心保存)
有效时间的功能,详细情况见D短信中心号码属性设置.
属性:
1.串口号(nCommPort):
1,2,3等整数,默认值:1。
2.波特率(nBaudRate):2400,9600,19200,38400等整数,默认值是9600。
3.奇偶校验:(cParity):0,1,2等,默认为0,无校验。
4.字节位数:(nSizeByte):默认为8,一般不要修改。
5.停止位:(nStopBit):0,1,2为可取值,对应1位,1.5位,2位停止位,默认值为0(1位停止位)。
6.短信中心号码(strMSCA):字符串
4.02以后版本中,可以通过短信中心号码属性来设置短信有效时间(Validity
Period),设置格式为:m_ctrSMS.SetStrMSCA("validityPeriod#143")c++语言,m_ctrSMS.StrMSCA="validityPeriod#143"
vb 中设置,请注意,字符大小写敏感,设置有效时间只有在成功打开串口与手机连接后才会有效;.默认是12小时,即"validityPeriod#143"
,(143+1)*5分=12小时;有效时间x设置范围为0--255,0-143计算方法:(x+1)*5分钟,144-167计算方法:(x-143)*30分钟+12小时;168-196计算方法:(x-166)*1天;197-255计算方法:(x-192)*1周.
4.0版控件新增加属性:
7.短信内容编码方式(nCodeType):整数0,1,2。默认值0。0:UNICODE
编码,最常用用于发送中文或中英文短信,短信内容最多70个字符;1:8bit编码,用于传送纯英文字符(传中文可能有部分误码),短信内最多140个字符,部分中文手机不能正确解码显示;2:7bit压缩编码只能传输ASCII码表中的前128个字符,一般不推荐使用,一条短信最多可以传输160个字符,不推荐使用这种编码方式。除非你知道你要传递的内容是在这128个字符中。
方法:
1.
发短信1:long
SendMSG(LPCTSTR phonenumber, LPCTSTR msg):
phonenumber:字符串指针,是对方手机号码;
msg:字符串指针,是要发的短信内容。
注意:当编码方式为0即UNICODE时,应当限制在70个字符内,如果短信为71到140个字符,将自动
拆分为2条发送,序号为7,8;且发送成功事件只有一个,这种情况下在OnSndMsg事件中只能读回第二条短信的序号即8。如果大于140个字符,将只发送前140个字符;
当编码方式为1即8bit编码时,多于140个字符时,只取前面140个字符来发送;当编码方式为2即7bit编码时,多于160个字符时,只取前面160个字符来发送,其余的丢弃。
返回值:大于0表示成功发出短信,其值为本条短信的序号,这个序号可以在ONSNDMSG中用来确定本条短信是否实际发送到GSM网络中没。小于等于0表示失败。
可设定优先级的发送函数:
SendMSGPre(LPCTSTR
phonenumber, LPCTSTR msg, BOOL fSendFirst)//fSendFirst=TRUE时,表示这条短信优先发送。
2.发短信2:(连续号码发)
long SendMsgM(LPCTSTR
phonenumber, LPCTSTR msg, long nCount)
phonenumber:字符串指针,目标手机起始号码;如13982369018
msg:字符串指针,短信内容(70个字符);
nCount:长整数,要发的手机个数,比如3,表示发给3个手机,号码分别是13982369018,13982369019,13982369020;
返回值:大于0表示成功发出短信,其值为最后一条短信的序号,这个序号可以在ONSNDMSG事件中用来确定本条短信是否实际发送到GSM网络中没。小于等于0表示失败。
3.发短信3:(n个手机号)
long SendMsgMS(LPCTSTR
phonenumbers, LPCTSTR msg):
phonenumbers:字符串指针,以逗号隔开的n个手机号。比如13982369018,13982369019,13982369020;
msg:
字符串指针,是要发的短信内容(限制在70个字符内);
返回值:大于0表示成功发出短信,其值为本条短信的序号,这个序号可以在ONSNDMSG事件中用来确定本条短信是否实际发送到GSM网络中没。小于等于0表示失败。
4.发短信4:(定时发短信),到了指定的时间发短信。
long SendMsgOnTimer(LPCTSTR
phonenumber,LPCTSTR msg,LPCTSTR begintime):
phnonenumber:同发短信1;
msg:同发短信1;
begintime:字符串指针,发短信的时间,格式是撃昴昴昴暝略氯杖帐笔狈址謹,比如:200404121752表示2004年04月17点52分发该条短信。
返回值:0表示成功提交发短信请求;负数表示失败:-1表示日期长的不是12个字符,-2表示日期比当前日期还要早。
本条发送函数无法得到该条短信的实际序号。
注:要知道实际是否发送成功了,请在OnSndMsg事件中调用GetIndexOfLastSnd()来获得刚发送成功的短信的序号。
5.读短信1:
short Rea dMsg(VARIANT FAR*
pvariantSMCA, VARIANT FAR* pvariantOA, VARIANT FAR*
pvariantMSG, VARIANT FAR* pvariantTimeStamp)
在VC++中为VARIANT
指针,类型为VT_BSTR,返回结果存在bstrVal中。
第一个参数:对方短信中心号码;
第二个参数:对方号码;
第三个参数:短信内容;
第四个参数:时间邮戳:(年年月月日日时时分分秒秒XX)格式的字符串。XX表示时区,一般情况下可以不管。
返回值:小于0表示失败或没有新短信可读,等于0的数n表示读到了短信。
6.
读短信2(VB等语言用,
功能与上一个方法同)
short ReadMsgForVB(BSTR*
pbstrMSCA, BSTR* pbstrOA, STR* pbstrMSG, BSTR* pbstrTIMESTAMP)
VB中使用例子:
定义变量:Dim msca
as String Dim msg As String Dim oa As string Dim timestamp As
String
读短信:
result=smscontrol1.ReadMsgForVB(msca,oa,msg,timestamp)
如果result等于0表示成功读到短信,短信内容存在msg中,对方号码在oa中,时间在
timestamp中(时间格式与上面表示相同,为字符串,要变为时间VB程序自己转换);result<0表示没有读到短信。
注:成功读出一条短信后,将自动把该条短信从接收短信队列中删除。
8.打开串口:
short OpenComm()
打开串口,并且检测该串口是否连接了手机设备(手机或GSM
MODEM),在调用本函数之前必须设在串口号、波特率、短信中心
号码等属性。更属性后必须调用本函数,属性的更改才会生效:比如串口号由1改到2,将先关闭串口1,再打开串口2。
返回值:成功返回0,返回其它值表示失败。1表示串口不存在或存在但已经被别的程序占用;2表示没有接符合要求的手机.
9.关闭串口:
short CloseComm()
关闭串口,永远返回0。
10.读发送短信队列:
short GetCountInSnd();
返回值:短信队列中等待发送的短信条数。
11.读接收短信队列:
long GetCountInRcv();
返回值:当前接收队列中的短信条数。
13.读取最近发送成功短信序号:
long GetIndexOfLastSnd()
返回值为当前最后成功发送到GSM网络上的短信的编号,通常与OnSndMsg事件配合使用。
事件:
1.收到新短信OnRecvMsg:
收到新短信时触发的事件。可能一次收到多条短信,收到的短信条数可以用GetRcvMsgCount()来获取,在这里调用收短信ReadMsg()来读取收到的短信。
2.发送成功短信OnSndMsg:成功发送出一条新短信,调用GetIndexOfLastSnd()来获得刚发送成功的短信的序号。
使用方法简介:
第一步:初始化串口通信属性值串口号和波特率(如果你用的串口通信参数与默认的不同才有必要),通常是设置串口号。
第二步:设置短信中心号码。
第三步:打开串口。
第四步:收发短信的循环。
第五步:程序退出前关闭串口,释放资源以便其他程序使用。
当然,为了提高效率,建议你在发生收到短信的事件时才去读短信,否者可能因为没有新短信而使得读短信失败。
更加详细的使用方法请参考例子程序。
其他说明:1.发送函数返回成功并不代表实际已经发送到GSM网络上,只是表示成功将短信提交给短信收发线程。只有在OnSndMsg事件中调用GetIndexOfLastSnd()获得的短信序号才表示该序号的短信实际已经成功发送到GSM网络
2. vcdemo文件夹中是vc++6.0的例子程序,vbdemo文件夹中是vb6.0的例子程序。
|