?? unit1.~cpp
字號:
//---------------------------------------------------------------------------
void __fastcall TForm1::mEdSmDelClick(TObject *Sender)
{
int i,rr;
rr=sgEdSmTxt->Row;
for(i=rr;i<RowCount+1;i++)
sgEdSmTxt->Cells[1][i]=sgEdSmTxt->Cells[1][i+1];
sgEdSmTxt->Cells[1][RowCount]="";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::sbConnectOffClick(TObject *Sender)
{
sbSendSms->Enabled=false;
sbConnectOn->Enabled=true;
sbConnectOff->Enabled=false;
StatusBar1->SimpleText="電腦與手機連接斷開!";
Comm1->PortOpen=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::sbSendSmsClick(TObject *Sender)
{
FILE *fp;
int i,p,n,SendTm;
String ss,tt,sName,pName;
char MpCode[20],SmTxt[256],RecTxt[1024];
String CurDate,CurTime,fn;
CurDate=DateToStr(Date());
fn=CurDir+"\\"+CurDate+".sms";
fp=fopen(fn.c_str(),"a");
//
n=lsRecv->Count;
if(n==0){
ShowMessage("沒有收放手機號碼,不知道發給誰?");
return;
}
SendTm=0;
for(i=0;i<n;i++){
ss=lsRecv->Items->Strings[i];
p=ss.Pos("+");
sName=ss.SubString(1,p-1);
ss.Delete(1,p);
p=ss.Pos("+");
pName=ss.SubString(1,p-1);
ss.Delete(1,p);
p=ss.Length();
if(p<11){
ShowMessage("手機號碼不對,請核對號碼!");
return;
}
strcpy(MpCode,ss.c_str());
ss=sName+"家長:"+mmSmsTxt->Text;
p=1;
while(p){
p=ss.Pos("");
}
if(ss==""){
ShowMessage("沒有短信內容,不知道發什么?");
return;
}
else
strcpy(SmTxt,ss.c_str());
StatusBar1->SimpleText="正在給"+sName+"同學的家長"+pName+"發短信...";
if(!SendSms(SmTxt,MpCode)){
ShowMessage("發送給"+sName+"同學的家長"+pName+"的發短信錯誤!");
}
else{
StatusBar1->SimpleText="發送給"+sName+"同學的家長"+pName+"的發短信成功!";
CurTime=TimeToStr(Time());
tt=CurTime+"發送給"+sName+"同學的家長"+pName+"的短信內容:"+ss+"\n";
strcpy(RecTxt,tt.c_str());
fprintf(fp,"%s",RecTxt);
SendTm++;
}
}
StatusBar1->SimpleText="短信發送結束!";
ShowMessage("短信發送結束,共發"+IntToStr(SendTm)+"條短信。");
fclose(fp);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::sgMpBookDblClick(TObject *Sender)
{
int rr;
rr=sgMpBook->Row;
lsRecv->Items->Add(sgMpBook->Cells[1][rr]+"+"+sgMpBook->Cells[2][rr]+"+"+sgMpBook->Cells[3][rr]);
if(lsRecv->Count<10)
Label4->Caption ="接收短信人數為0"+IntToStr(lsRecv->Count)+"位";
else
Label4->Caption ="接收短信人數為"+IntToStr(lsRecv->Count)+"位";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::mEditClick(TObject *Sender)
{
int rr,cc;
rr=sgMpBook->Row;
cc=sgMpBook->Col;
if(cc==1){
sgMpBook->Cells[1][rr]=InputBox("輸入姓名: ","輸入姓名: ",sgMpBook->Cells[1][rr]);
}
if(cc==2){
sgMpBook->Cells[2][rr]=InputBox("輸入手機號碼: ","輸入手機號碼: ",sgMpBook->Cells[2][rr]);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::cbClassNameChange(TObject *Sender)
{
int i,j,CurName;
CurName=cbClassName->ItemIndex;
for(i=0;i<RowCount;i++)
for(j=0;j<3;j++)
sgMpBook->Cells[j+1][i+1]=NameCode[CurName][i][j];
}
//---------------------------------------------------------------------------
void __fastcall TForm1::lsRecvDblClick(TObject *Sender)
{
int rr;
rr=lsRecv->ItemIndex;
lsRecv->Items->Delete(rr);
if(lsRecv->Count<10)
Label4->Caption ="接收短信人數為0"+IntToStr(lsRecv->Count)+"位";
else
Label4->Caption ="接收短信人數為"+IntToStr(lsRecv->Count)+"位";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::mCLearClick(TObject *Sender)
{
lsRecv->Items->Clear();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::cbSmsTxtChange(TObject *Sender)
{
mmSmsTxt->Lines->Clear();
mmSmsTxt->Lines->Add(cbSmsTxt->Text);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SendByte(Byte dt)
{
DynamicArray<byte> ByteSend;
ByteSend.Length=1;
ByteSend[0]=dt;
Comm1->OutputByte(ByteSend);
ByteSend.Length=0;
}
//---------------------------------------------------------------------------
bool __fastcall TForm1::SendSms(char *SmsTxt,char *SendCode)
{
String SMSC,Phon,SMS;
String DR,FO,mf,LS,mva,tep;
WideString ws;
int i,l,p,lnth;
char str[400];
String AtCmgs,At="AT+CMGS=";
DynamicArray<byte> ByteSend;
//if(chkRept->Checked)
//DR="31"; //提交報告
//else
DR="11"; //不提交報告
if(cbLang->Text=="英文")
mf="00";
else if(cbLang->Text=="中文")
mf="08";
else if(cbLang->Text=="Flash")
mf="18";
SMSC=edSmsc->Text; //短信中心號碼
if(SMSC.SubString(1,1)=="+")//去掉加號
SMSC.Delete(1,1);
//收放電話號碼
Phon=SendCode;
//短信內容
SMS=SmsTxt;
//短信中心號碼轉換
SMSC="91"+RevNum(SMSC); //國際碼
lnth=SMSC.Length()/2; //中心號碼長度
SMSC=IntToHex(lnth,2)+SMSC;
//收放號碼轉換
lnth=Phon.Length(); //發送到電話號碼長度
if(lnth<12)
FO="81";
else if(lnth<14)
FO="91";
else if(lnth>13)
FO="A1";
Phon=IntToHex(lnth,2)+FO+RevNum(Phon);
//過濾\r\n
l=1;
while(l){
l=SMS.Pos("\r\n");
if(l>0)
SMS.Delete(l,2);
}
//短信編碼
if(mf=="00"){
lnth=SMS.Length(); //英文短信長度
LS=IntToHex(lnth,2);
SMS=Encode(SMS); //英文編碼
}
else if(mf=="08"){
ws=WideString(SMS);//中文短信長度*2
lnth=ws.Length();
LS=IntToHex(lnth*2,2);
SMS=AnsiToUnicode(SMS);//中文信息編碼
}
else if(mf=="18"){
ws=WideString(SMS);//Flash SMS短信長度+1
lnth=ws.Length()+1;
LS=IntToHex(lnth*2,2);
SMS="0001"+AnsiToUnicode(SMS);//Flash SMS前+"0001"
}
mva=cbMval->Text.SubString(1,2);//短信息有效期
tep=DR+"00"+Phon+"00"+mf+mva+LS+SMS; //合成為信息流
lnth=tep.Length()/2;
msg=SMSC+tep;
//
AtCmgs=At+IntToStr(lnth)+"\r"; //請求發送:AT+CMGS
strcpy(str,AtCmgs.c_str());
l=strlen(str);
ByteSend.Length=l;
for(i=0;i<l;i++)
ByteSend[i]=str[i];
Comm1->OutputByte(ByteSend);
Sleep(100);
while((p=SmsRcv.Pos(">"))==0){ //等待發送數據提示">"
Application->ProcessMessages();
}
SmsRcv="";
strcpy(str,msg.c_str());//發送消息
l=strlen(str);
str[l]=26;//數據結尾標志
str[l+1]='\r';
ByteSend.Length=l+2;
for(i=0;i<l+2;i++)
ByteSend[i]=str[i];
Comm1->OutputByte(ByteSend);
Sleep(1000);
while((p=SmsRcv.Pos("\r\nOK\r\n"))==0&&SmsRcv.Pos("\r\nERROR\r\n")==0){ // 等待回應正確與否?
Application->ProcessMessages();
}
ByteSend.Length=0;
if(p!=0)
return true; //成功
return false;
}
//---------------------------------------------------------------------------
String __fastcall TForm1::Encode(String sAnsi)//英文編碼
{
int i,j,len;
Byte cur1,cur2,cur;
String Result,t;
Result="";
len=sAnsi.Length();
i=1;j=0;
while(i<=len){
if(i<len){
cur1=Byte(sAnsi.SubString(i+1,1).c_str());
cur1<<=(7-j);
cur2=Byte(sAnsi.SubString(i,1).c_str());
cur2>>=j;
cur=cur1|cur2;
}
else{
cur2=Byte(sAnsi.SubString(i,1).c_str());
cur=cur2>>j;
}
FmtStr(t,"%2.2X",ARRAYOFCONST((cur)));
Result=Result+t;
i++;
j=(j+1)%7;
if(j==0)
i++;
}
return Result;
}
//---------------------------------------------------------------------------
String __fastcall TForm1::AnsiToUnicode(String sAnsi)//中文編碼
{
int cur,l;
String tempstr="",returnstr="";
WideString ws;
wchar_t mid[2];
ws=WideString(sAnsi);
l=ws.Length();
for(int i=1;i<=l;i++){
wcscpy(mid,ws.SubString(i,1).c_bstr());
cur=mid[0];
FmtStr(tempstr,"%4.4X",ARRAYOFCONST((cur)));
returnstr=returnstr+tempstr;
}
return returnstr;
}
//---------------------------------------------------------------------------
String __fastcall TForm1::RevNum(String numb)//電話號碼,短信中心編碼
{
char cc,txt[20];
String tt;
int i,l;
l=numb.Length();
if(l%2!=0)
numb=numb+"F";
strcpy(txt,numb.c_str());
l=strlen(txt);
for(i=0;i<l/2;i++){
cc=txt[i*2];
txt[i*2]=txt[i*2+1];
txt[i*2+1]=cc;
}
tt=txt;
return tt;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Comm1ReceiveData(TObject *Sender)
{
SmsRcv=SmsRcv+Comm1->Input;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::AddCombo()
{
int h,Hrs,Min,days,weeks;
String sp;
Hrs=0;
Min=5;
for(h=0;h<=143;h++){
sp=IntToHex(h,2);
cbMval->Items->Add(sp+" "+IntToStr(Hrs)+"小時 "+IntToStr(Min)+"分");
Min+=5;
if(Min==60){
Min=0;
Hrs++;
}
}
Hrs=12;
Min=30;
for(h=144;h<=167;h++){
sp=IntToHex(h,2);
cbMval->Items->Add(sp+" "+IntToStr(Hrs)+"小時 "+IntToStr(Min)+"分");
if(Min==30){
Min=0;
Hrs++;
}
else{
Min=30;
}
}
days=2;
for(h=168;h<=196;h++){
sp=IntToHex(h,2);
cbMval->Items->Add(sp+" "+IntToStr(days)+"天");
days++;
}
weeks=5;
for(h=197;h<=255;h++){
sp=IntToHex(h,2);
cbMval->Items->Add(sp+" "+IntToStr(weeks)+"星期");
weeks++;
}
cbMval->ItemIndex=167;
}
//---------------------------------------------------------------------------
bool __fastcall TForm1::GetCgsn()
{
int i,j,p,counter;
char AtCgsn[]="AT+CGSN\r",rCode[20];
Byte bb;
String ss,ass;
DynamicArray<byte> ByteSend;
TRegistry *rg;
SmsRcv="";
ByteSend.Length=8;
for(i=0;i<8;i++)
ByteSend[i]=AtCgsn[i];
Comm1->OutputByte(ByteSend);
Sleep(200);
counter=0;
while((p=SmsRcv.Pos("\r\n"))==0&&counter<100){
Application->ProcessMessages();
counter++;
}
if(counter>=100){
return false;
}
SmsRcv.Delete(1,p+1);
ss=SmsRcv.SubString(1,15);
//
strcpy(rCode,ss.c_str());
for(i=0;i<31;i++){
bb=(rCode[0]+rCode[5]+rCode[7]+rCode[13])&0xff;
while(bb>=0x1a)
bb-=0x1a;
bb+=0x41;
for(j=0;j<14;j++){
rCode[j]=rCode[j+1];
}
rCode[14]=bb;
}
ss=rCode;
//
rg=new TRegistry();
rg->RootKey=HKEY_LOCAL_MACHINE;
rg->OpenKey("\\Software\\SchoolSms",True);
ass=rg->ReadString("Serial");
rg->CloseKey();
rg->Free();
//
if(ss!=ass){
return false;
}
return true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::sbRegistClick(TObject *Sender)
{
Form2->Show();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::sbOpenClick(TObject *Sender)
{
FILE *fp;
String fn,ss;
char RecTxt[1024];
OpenDialog->Title="查看發送短信發送紀錄";
OpenDialog->DefaultExt="*.sms|*.sms";
OpenDialog->Filter="*.sms|*.sms|*.sms|*.sms";
if(OpenDialog->Execute()){
fn=OpenDialog->FileName;
edSmsRec->Text=fn;
fp=fopen(fn.c_str(),"r");
mmSmsRec->Clear();
do{
fscanf(fp,"%s",RecTxt);
ss=RecTxt;
if(!feof(fp))
mmSmsRec->Lines->Add(ss);
}while(!feof(fp));
fclose(fp);
}
}
//---------------------------------------------------------------------------
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -