⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 receivesmsthread.cpp

📁 基于普通手机的短信编程源码
💻 CPP
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <dirent.h>
#include <dir.h>
#include <stdio.h>
#include <stdlib.h>
#include <winbase.h>
#include <time.h>
#include "smsPdu.h"
#include "ReceiveSmsThread.h"
#include "sms_Unit1.h"
#pragma package(smart_init)
extern int is_receive_thread_running;  //线程运行标志
extern int receive_thread_stop;
extern HANDLE hComm1;
//---------------------------------------------------------------------------

//   Important: Methods and properties of objects in VCL can only be
//   used in a method called using Synchronize, for example:
//
//      Synchronize(UpdateCaption);
//
//   where UpdateCaption could look like:
//
//      void __fastcall Unit1::UpdateCaption()
//      {
//        Form1->Caption = "Updated in a thread";
//      }
//---------------------------------------------------------------------------

__fastcall ReciveSmsThread::ReciveSmsThread(bool CreateSuspended)
        : TThread(CreateSuspended)
{
}
//---------------------------------------------------------------------------
void __fastcall ReciveSmsThread::Execute()
{
        BOOL tf;
        char comm[100],bite_rate[100],sms_center[100],tmp[500],full_file_name[100];
        //char tel_no[500],sms_content[500];
        FILE *fp;
        SM_PARAM sm_param;
        SM_PARAM  pMsg;
        int GetItemFromStr(char * str,char fgf,int item_no,char * val,int val_len );
        char * delete_space(char *str);
        int get_systime1(char *bgntime);
        int GetCfgItem(char * cfg_file,char *cfg_seg, char *cfg_item, char *value);
        BOOL OpenComm1(const char* pPort, int nBaudRate, int nParity, int nByteSize, int nStopBits);
        void WriteComm1(void* pData, int nLength);
        int ReadComm1(void* pData, int nLength);
        int my_gsmReadMessage(SM_PARAM* pMsg);

        //设线程运行标志
        is_receive_thread_running=1;
        
        //进行手机和电脑的连接
        //
        getcwd(full_file_name, 100);
        strcat(full_file_name,"\\sms.ini");
        memset(comm, 0, sizeof(comm));
        memset(bite_rate, 0, sizeof(bite_rate));
        memset(sms_center, 0, sizeof(sms_center));
        if( GetCfgItem(full_file_name,"receive_sms","comm",comm)!=0
          ||GetCfgItem(full_file_name,"receive_sms","bite_rate",bite_rate)!=0
          )

        {
                sprintf(tmp,"读配置文件  %s  错误!! 接收线程结束 ",full_file_name);
                Form1->StatusBar1->Panels->Items[0]->Text=tmp;
                is_receive_thread_running=0;
                return;
        }

        //打开串口
        tf=OpenComm1(comm, atol(bite_rate), NOPARITY, 8, ONESTOPBIT);

        if( tf == 0 )
        {
                 sprintf(tmp,"接收:打开串口%s失败!!", comm);
                 Form1->StatusBar1->Panels->Items[2]->Text=tmp;
                 is_receive_thread_running=0;
                 return ;
        }

      connect:
        //连接手机和电脑
        {
                char cmd[100],ans[100];
                int nLength;

                //清除串口缓冲区
                PurgeComm(hComm1,PURGE_TXCLEAR);
                PurgeComm(hComm1,PURGE_RXCLEAR);

                memset(ans, 0, sizeof(ans));
                sprintf(cmd, "AT\r");
                // 输出命令串"AT"
                WriteComm1(cmd, strlen(cmd));
                // 读应答数据
                nLength = ReadComm1(ans, 128);

                // 根据能否找到"OK"决定连接成功与否
                if( (nLength<=0) || (strstr(ans, "OK")==NULL) )
                {
                         sprintf(tmp, "%s", "接收:手机与电脑连接失败!");
                         Form1->StatusBar1->Panels->Items[2]->Text=tmp;
                         Sleep(2000);
                         if( receive_thread_stop==1 ){   //终止线程
                                is_receive_thread_running=0;
                                CloseHandle(hComm1);
                                return;
                         }
                         else{
                                Sleep(2000);
                                goto connect;
                        }
                }
                sprintf(tmp, "%s", "");
                Form1->StatusBar1->Panels->Items[2]->Text=tmp;
          }//end of connect

          /*
          //对西门子3618、6618要置mem1为它的‘读’短信内存
          {
          char cmd[100];
          sprintf(cmd, "AT+CPMS=ME\r");
          WriteComm1(cmd, strlen(cmd));
          }
          */
          
          //循环扫描手机短信接收内存
          while(1){
                if( receive_thread_stop==1 ){     //终止线程
                         CloseHandle(hComm1);
                         is_receive_thread_running=0;
                         return;
                }
                memset(&pMsg, 0, sizeof(pMsg));

                //清除串口缓冲区
                PurgeComm(hComm1,PURGE_TXCLEAR);
                PurgeComm(hComm1,PURGE_RXCLEAR);

                //接收短信
                my_gsmReadMessage(&pMsg);

                Sleep(1000);
          }





}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -