📄 mainfrm.cpp
字号:
{
//设置PDU模式失败
break;
}
case AT_COMMAND_ATCMGS:
if(iserror==0)
{
//可以发送短消息了
CString sendpdudata,centeradd,dastring,userdata;
CString recphone;
CString pdutext;
CString headnum=_T("86");
char ch;
int i;
i=m_sendsmnum;
//servercenterphone=_T("8613800270500");
recphone=headnum+dialnumar.GetAt(i);
//recphone=_T("8613971405741");
sendpdudata=_T("");
TransAdd(headnum+servercenterphone,centeradd,SERVERCENTERADD);
sendpdudata+=centeradd;
ch=0x11;
sendpdudata.Insert(sendpdudata.GetLength(),ch);
ch=0x00;
sendpdudata.Insert(sendpdudata.GetLength(),ch);
TransAdd(recphone,dastring,DESTINATIONADD);
sendpdudata+=dastring;
ch=0x00;
sendpdudata.Insert(sendpdudata.GetLength(),ch);
ch=0x0A;
sendpdudata.Insert(sendpdudata.GetLength(),ch);
ch=0x01;
sendpdudata.Insert(sendpdudata.GetLength(),ch);
AnsiToUni(messagetext,pdutext);
ch=pdutext.GetLength();
sendpdudata.Insert(sendpdudata.GetLength(),ch);
CString ascpdustr;
pdutext.Empty();
AnsiToUni(messagetext,pdutext);
//ascpdustr+=pdutext;
sendpdudata+=pdutext;
TransToAscii(sendpdudata,ascpdustr);
sendpdudata=ascpdustr;
ch=0x1a;
sendpdudata.Insert(sendpdudata.GetLength(),ch);
m_commandtype=AT_COMMAND_ATCMGSSEND;
m_strcommand=sendpdudata;
SendString(m_strcommand);
precommand=curcommand;
curcommand=m_strcommand;
//m_ComPort.RestartMonitoring();
break;
}
else
{
break;
}
case AT_COMMAND_ATCMGSSEND:
if(iserror==0)
{
//发送成功
iserror=iserror;
m_sendsmnum++;
if(m_sendsmnum<dialnumar.GetSize())
{
m_strcommand.Empty();
m_strcommand=_T("AT+CMGS=");
CString tempstr,unitext;
int tsum;
AnsiToUni(messagetext,unitext);
tsum=unitext.GetLength()+15;
GetSumString(tsum,tempstr);
m_strcommand+=tempstr;
m_strcommand.Insert(m_strcommand.GetLength()+1,ch1);
m_commandtype=AT_COMMAND_ATCMGS;
SendString(m_strcommand);
precommand=curcommand;
curcommand=m_strcommand;
}
else
{
//CString textstr;
//textstr=_T("向号码:");
AfxMessageBox("发送成功!",IDOK);
}
break;
}
else
{
break;
}
case AT_COMMAND_RECSMS:
if(iserror==0)
{
//成功受到短消息
CStringArray ar;
BOOL flag;
flag=GetAnswerData(m_recstring,_T("+CMTI:"),ar);
if(flag)
{
num=ar[1];
nnum=atoi(num);
m_strcommand.Empty();
m_strcommand=_T("AT+CMGR=");
m_strcommand+=num;
m_strcommand.Insert(30,ch1);
m_commandtype=AT_COMMAND_ATCMGR;
SendString(m_strcommand);
precommand=curcommand;
curcommand=m_strcommand;
//m_ComPort.RestartMonitoring();
break;
}
else
{
break;
}
}
else
{
break;
}
case AT_COMMAND_ATCMGR:
if(iserror==0)
{
//得到短消息内容
BOOL flag;
flag=GetRecSMData(m_recstring,_T("+CMGR:"),m_smdata);
if(flag)
{
if(m_currentwindow==SENDFORM)
{
CReadSMDlg readsmdlg;
int dlgflag;
if(m_smdata.readflag)
readsmdlg.m_smtype=_T("已读消息");
else
readsmdlg.m_smtype=_T("未读消息");
readsmdlg.m_smphone=m_smdata.senddialnum;
readsmdlg.m_smtime=m_smdata.timestr;
readsmdlg.m_smtext=m_smdata.smtext;
dlgflag=readsmdlg.DoModal();
}
if(m_currentwindow==DELFORM)
{
if(m_smdata.readflag)
{
m_wndSplitter.SetActivePane(0,1,NULL);
m_smdata.smindex=cursmindex;
this->GetActiveView()->PostMessage(WM_GETSMTEXT,
(smallindex.GetLength())/3,(LPARAM)&m_smdata);
break;
}
else
{
CReadSMDlg readsmdlg;
int dlgflag;
if(m_smdata.readflag)
readsmdlg.m_smtype=_T("已读消息");
else
readsmdlg.m_smtype=_T("未读消息");
readsmdlg.m_smphone=m_smdata.senddialnum;
readsmdlg.m_smtime=m_smdata.timestr;
readsmdlg.m_smtext=m_smdata.smtext;
dlgflag=readsmdlg.DoModal();
m_strcommand.Empty();
m_strcommand=_T("AT+CMGL");
m_strcommand.Insert(30,ch1);
m_commandtype=AT_COMMAND_ATCMGLTOTOAL;
precommand=curcommand;
curcommand=m_strcommand;
m_isfirstlist=0;
GetSubStr(smallindex,(cursmindex-1)*3,(cursmindex-1)*3+2,
cursmindexstr);
SendString(m_strcommand);
}
}
break;
}
else
{
break;
}
}
else
{
break;
}
case AT_COMMAND_ATCMGD:
if(iserror==0)
{
AfxMessageBox("当前消息已被成功删除!",MB_OK);
m_strcommand.Empty();
m_strcommand=_T("AT+CMGL");
m_strcommand.Insert(30,ch1);
m_commandtype=AT_COMMAND_ATCMGLTOTOAL;
SendString(m_strcommand);
precommand=curcommand;
curcommand=m_strcommand;
m_isfirstlist=0;
smallindex.Delete((cursmindex-1)*3,3);
if(smallindex.GetLength()>0)
{
cursmindexstr.Empty();
if((cursmindex*3)>smallindex.GetLength())
GetSubStr(smallindex,smallindex.GetLength()-3,
smallindex.GetLength()-1,cursmindexstr);
else
GetSubStr(smallindex,(cursmindex-1)*3,(cursmindex-1)*3+2,
cursmindexstr);
}
break;
}
else
{
break;
}
/*
case AT_COMMAND_ATCPBS:
if(iserror==0)
{
m_strcommand.Empty();
m_strcommand=_T("AT+CPBS?");
m_strcommand.Insert(30,ch1);
m_commandtype=AT_COMMAND_ATCPBSINFO;
SendString(m_strcommand);
precommand=curcommand;
curcommand=m_strcommand;
//m_ComPort.RestartMonitoring();
break;
}
else
{
//打开SIM卡电话簿时出错
break;
}
case AT_COMMAND_ATCPBSINFO:
if(iserror==0)
{
CStringArray arcpbsinfo;
BOOL flagcpbs;
flagcpbs=GetAnswerData(m_recstring,_T("+CPBS:"),arcpbsinfo);
if(flagcpbs)
{
m_pbusedloc=atoi(arcpbsinfo[1]);
m_pbset.usedloc=m_pbusedloc;
m_pbtotalloc=atoi(arcpbsinfo[2]);
m_pbset.totalloc=m_pbtotalloc;
m_strcommand.Empty();
m_strcommand=_T("AT+CPBR=?");
m_strcommand.Insert(30,ch1);
m_commandtype=AT_COMMAND_ATCPBRLEN;
SendString(m_strcommand);
precommand=curcommand;
curcommand=m_strcommand;
}
break;
}
else
{
break;
}
case AT_COMMAND_ATCPBRLEN:
if(iserror==0)
{
CStringArray arans;
BOOL flag;
flag=GetAnswerData(m_recstring,_T("+CPBR:"),arans);
if(flag)
{
CString strnum,str1,str2,str3,strsi,strei;
int startindex,endindex,maxphonenum,maxassotext,pos;
str1=arans[0];
str2=arans[1];
str3=arans[2];
str1.Delete(0,2);
pos=str1.Find('-',0);
GetSubStr(str1,0,pos-1,strnum);
startindex=atoi(strnum);
m_pbsindex=startindex;
m_pbset.startindex=m_pbsindex;
strsi=strnum;
str1.Delete(0,pos+1);
pos=str1.Find(')',0);
strnum.Empty();
GetSubStr(str1,0,pos-1,strnum);
endindex=atoi(strnum);
m_pbdindex=endindex;
m_pbset.endindex=m_pbdindex;
strei=strnum;
maxphonenum=atoi(str2);
m_pbphonemaxlen=maxphonenum;
m_pbset.maxphonelen=maxphonenum;
maxassotext=atoi(str3);
m_pbset.maxnamelen=maxassotext;
m_pbnamemaxlen=maxassotext;
m_strcommand.Empty();
m_strcommand=_T("AT+CPBR=");
m_strcommand+=strsi;
m_strcommand.Insert(30,',');
m_strcommand+=strei;
m_strcommand.Insert(30,ch1);
m_commandtype=AT_COMMAND_ATCPBRLIST;
SendString(m_strcommand);
precommand=curcommand;
curcommand=m_strcommand;
//m_ComPort.RestartMonitoring();
break;
}
else
{
//得到电话簿条目总数时出错
break;
}
}
else
{
//查询SIM卡电话簿总条目时出错
break;
}
case AT_COMMAND_ATCPBRLIST:
if(iserror==0)
{
m_strphonebook.RemoveAll();
BOOL flaglist;
flaglist=GetAnswerData(m_recstring,_T("+CPBR:"),m_strphonebook);
if(flaglist)
{
m_wndSplitter.SetActivePane(0,1,NULL);
(this->GetActiveView())->PostMessage(WM_GETPHONEBOOKLIST,
(WPARAM)&m_pbset,(LPARAM)&m_strphonebook);
break;
}
else
{
//无法得到电话簿列表
}
}
else
{
//得到电话簿列表时出错
break;
}
break;
*/
case AT_COMMAND_ATCMGLTOTOAL:
if(iserror==0)
{
smallindex.Empty();
int pos=m_recstring.Find(':',0);
while(pos>=0)
{
CString oneindex;
GetSubStr(m_recstring,pos+2,pos+4,oneindex);
smallindex+=oneindex;
m_recstring.Delete(0,pos+5);
pos=m_recstring.Find(':',0);
}
int smlen=smallindex.GetLength()/3;
if(smlen!=0)
{
CString notestr;
notestr.Format("总共存储了%d条短消息",smlen);
if(m_isfirstlist)
{
AfxMessageBox(notestr,MB_OK);
cursmindex=1;
}
else
{
pos=smallindex.Find(cursmindexstr,0);
cursmindex=(pos/3)+1;
}
m_strcommand.Empty();
m_strcommand=_T("AT+CMGR=");
CString smindex;
if(m_isfirstlist)
GetSubStr(smallindex,(cursmindex-1)*3,(cursmindex-1)*3+2,smindex);
else
smindex=cursmindexstr;
m_strcommand+=smindex;
m_strcommand.Insert(30,ch1);
m_commandtype=AT_COMMAND_ATCMGR;
SendString(m_strcommand);
precommand=curcommand;
curcommand=m_strcommand;
}
else
AfxMessageBox("存储器中无短信息",IDOK);
break;
}
else
{
break;
}
/*
case AT_COMMAND_ATCPBW:
if(iserror==0)
{
m_strcommand.Empty();
m_strcommand=_T("AT+CPBS?");
m_strcommand.Insert(30,ch1);
m_commandtype=AT_COMMAND_ATCPBSINFO;
SendString(m_strcommand);
precommand=curcommand;
curcommand=m_strcommand;
}
else
{
}*/
}
return(iserror);
}
BOOL CMainFrame::GetAnswerData(CString answerstr, CString headstr, CStringArray &resultarray)
{
CString astr,fstr,substr;
fstr.Empty();
fstr.Insert(0,ch1);
fstr.Insert(1,ch2);
astr=answerstr;
int pos,fpos,i;
pos=astr.Find(headstr,0);
if(pos<0)
return(FALSE);
while(pos>=0)
{
substr.Empty();
astr.Delete(0,2+headstr.GetLength());
fpos=astr.Find(fstr,0);
i=0;
GetSubStr(astr,0,fpos,substr);
astr.Delete(0,fpos);
i=0;
do
{
fpos=substr.Find(',',0);
int j=0;
if(fpos<0)
{
CString tempstr2;
substr.Delete(substr.GetLength()-1,1);
tempstr2=substr;
resultarray.Add(tempstr2);
}
else
{
CString tempstr;
for(j=0;j<fpos;j++)
tempstr.Insert(fpos+5,substr.GetAt(j));
resultarray.Add(tempstr);
i++;
substr.Delete(0,fpos+1);
}
}while(fpos>=0);
pos=astr.Find(headstr,0);
}
return(TRUE);
}
void CMainFrame::GetSubStr(CString str, int sindex, int eindex,CString& substr)
{
int endindex,startindex;
if((sindex>=str.GetLength())||(sindex>eindex))
{
substr=_T("");
return;
}
startindex=sindex;
if(eindex>=str.GetLength())
endindex=str.GetLength()-1;
else
endindex=eindex;
int i;
for(i=startindex;i<=endindex;i++)
substr.Insert(100,str.GetAt(i));
}
void CMainFrame::Decode(CString sdata, CString &dedata)
{
CString tempstr,ss;
int len=sdata.GetLength();
int tempi;
tempi=0;
while(tempi<len)
{
ss.Empty();
ss.Insert(ss.GetLength(),sdata.GetAt(tempi++));
ss.Insert(ss.GetLength(),sdata.GetAt(tempi++));
char num;
num=hextoi(ss);
tempstr.Insert(tempstr.GetLength(),num);
}
sdata=tempstr;
int sdata_len=sdata.GetLength();
char SMSbuff[160];
char * p=SMSbuff;
for(int i=0;i< sdata_len;i++){
p[i]=sdata[i];
char y=p[i];
}
p[sdata_len]='\0';
int loop_len=sdata_len/7;
int remainder=sdata_len%7;
for( i=0;i<loop_len;i++){
char decode_data[9];
Oct2Sept(p,0,decode_data);
CString decode_s=decode_data;
dedata=dedata+decode_s;
p+=7;
}
if(remainder!=0){
char decode_data[8];
Oct2Sept(p,remainder,decode_data);
CString decode_s=decode_data;
dedata=dedata+decode_s;
}
}
void CMainFrame::Oct2Sept(char* poctet, int remainder, char *pseptet)
{
if(remainder==0){
char test;
char temp=poctet[0];
char high=temp&0x80;
temp=poctet[0];
char low=temp&0x7f;
pseptet[0]=low;
test=pseptet[0];
temp=poctet[1];
low=temp&0x3f;
WORD x,y=0;
x=low;
x=x<<8;
y=y|high;
y=y&0x00ff;
x=x|y;
x=x<<1;
x=x>>8;
pseptet[1]=x;
test=pseptet[1];
temp=poctet[1];
high=temp&0xc0;
temp=poctet[2];
low=temp&0x1f;
x=0;
y=0;
x=low;
x=x<<8;
y=y|high;
y=y&0x00ff;
x=x|y;
x=x<<2;
x=x>>8;
pseptet[2]=x;
temp=poctet[2];
high=temp&0xe0;
temp=poctet[3];
low=temp&0x0f;
x=0;
y=0;
x=low;
x=x<<8;
y=y|high;
y=y&0x00ff;
x=x|y;
x=x<<3;
x=x>>8;
pseptet[3]=x;
temp=poctet[3];
high=temp&0xf0;
temp=poctet[4];
low=temp&0x07;
x=0;
y=0;
x=low;
x=x<<8;
y=y|high;
y=y&0x00ff;
x=x|y;
x=x<<4;
x=x>>8;
pseptet[4]=x;
temp=poctet[4];
high=temp&0xf8;
temp=poctet[5];
low=temp&0x03;
x=0;
y=0;
x=low;
x=x<<8;
y=y|high;
y=y&0x00ff;
x=x|y;
x=x<<5;
x=x>>8;
pseptet[5]=x;
temp=poctet[5];
high=temp&0xfc;
temp=poctet[6];
low=temp&0x01;
x=0;
y=0;
x=low;
x=x<<8;
y=y|high;
y=y&0x00ff;
x=x|y;
x=x<<6;
x=x>>8;
pseptet[6]=x;
temp=poctet[6];
high=temp&0xfe;
char z=high;
z=z>>1;
z=z&0x7f;
pseptet[7]=z;
pseptet[8]='\0';
}
if(remainder==1){
char temp=poctet[0];
char high=temp&0x80;
temp=poctet[0];
char low=temp&0x7f;
pseptet[0]=low;
pseptet[1]='\0';
}
if(remainder==2){
char test;
char temp=poctet[0];
char high=temp&0x80;
temp=poctet[0];
char low=temp&0x7f;
pseptet[0]=low;
test=pseptet[0];
temp=poctet[1];
low=temp&0x3f;
WORD x,y=0;
x=low;
x=x<<8;
y=y|high;
y=y&0x00ff;
x=x|y;
x=x<<1;
x=x>>8;
pseptet[1]=x;
test=pseptet[1];
pseptet[2]='\0';
}
if(remainder==3){
char test;
char temp=poctet[0];
char high=temp&0x80;
temp=poctet[0];
char low=temp&0x7f;
pseptet[0]=low;
test=pseptet[0];
temp=poctet[1];
low=temp&0x3f;
WORD x,y=0;
x=low;
x=x<<8;
y=y|high;
y=y&0x00ff;
x=x|y;
x=x<<1;
x=x>>8;
pseptet[1]=x;
test=pseptet[1];
temp=poctet[1];
high=temp&0xc0;
temp=poctet[2];
low=temp&0x1f;
x=0;
y=0;
x=low;
x=x<<8;
y=y|high;
y=y&0x00ff;
x=x|y;
x=x<<2;
x=x>>8;
pseptet[2]=x;
pseptet[3]='\0';
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -