📄 smspage.cpp
字号:
// SMSPage.cpp : implementation file
//
#include "stdafx.h"
#include "SIMTOOL.h"
#include "SMSPage.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CSMSPage dialog
extern CSIMTOOLApp theApp;
DWORD WINAPI ExportSMSProc(LPVOID lpParameter);
CSMSPage::CSMSPage(CWnd* pParent /*=NULL*/)
: CDialogResize(CSMSPage::IDD, pParent)
{
//{{AFX_DATA_INIT(CSMSPage)
//}}AFX_DATA_INIT
}
void CSMSPage::DoDataExchange(CDataExchange* pDX)
{
CDialogResize::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CSMSPage)
DDX_Control(pDX, IDC_BTNSAVE, m_btnsave);
DDX_Control(pDX, IDC_BTNOPEN, m_btnopen);
DDX_Control(pDX, IDC_BTNEXPORT, m_btnexport);
DDX_Control(pDX, IDC_SMS, m_SMSList);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CSMSPage, CDialogResize)
//{{AFX_MSG_MAP(CSMSPage)
ON_BN_CLICKED(IDC_BTNEXPORT, OnBtnexport)
ON_BN_CLICKED(IDC_BTNSAVE, OnBtnsave)
ON_COMMAND(ID_DIALNUM, OnDialnum)
ON_COMMAND(ID_SENDSMSTO, OnSendsmsto)
ON_NOTIFY(NM_RCLICK, IDC_SMS, OnRclickSms)
ON_WM_CONTEXTMENU()
ON_COMMAND(ID_DELSMS, OnDelsms)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BEGIN_DLGRESIZE_MAP(CSMSPage)
DLGRESIZE_CONTROL(IDC_SMS, DLSZ_SIZE_X | DLSZ_SIZE_Y)
DLGRESIZE_CONTROL(IDC_BTNEXPORT, DLSZ_MOVE_X)
DLGRESIZE_CONTROL(IDC_BTNSAVE, DLSZ_MOVE_X)
DLGRESIZE_CONTROL(IDC_BTNOPEN, DLSZ_MOVE_X)
END_DLGRESIZE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSMSPage message handlers
BOOL CSMSPage::OnInitDialog()
{
CDialogResize::OnInitDialog();
// TODO: Add extra initialization here
menu.LoadMenu(MAKEINTRESOURCE(IDR_SMS));
InitResizing(FALSE, FALSE, WS_CLIPCHILDREN);
DWORD dwStyle = m_SMSList.GetExtendedStyle();
dwStyle |= LVS_EX_FULLROWSELECT;
m_SMSList.SetExtendedStyle(dwStyle);
imaSmall.Create(IDB_IMAGELIST, 16, 0, RGB(0,128,128));
m_SMSList.SetImageList(&imaSmall, LVSIL_SMALL);
m_btnsave.SetIcon(IDI_SAVE, 16, 16);
m_btnopen.SetIcon(IDI_OPEN, 16, 16);
m_btnexport.SetIcon(IDI_EXPORT, 16, 16);
InsertSMSHead("索引号", "发送者", "内容", "发送时间");
AutoSizeColumns(&m_SMSList);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CSMSPage::InsertSMSHead(char * index,
char * from,
char * sms,
char * rectime)
{
m_SMSList.InsertColumn(0,index,LVCFMT_LEFT,80);
m_SMSList.InsertColumn(1,from,LVCFMT_LEFT,180);
m_SMSList.InsertColumn(2,sms,LVCFMT_LEFT,400);
m_SMSList.InsertColumn(3,rectime,LVCFMT_LEFT,180);
}
void CSMSPage::InsertSMS(int imageindex,
char * index,
char * from,
char * sms,
char * rectime)
{
int listindex;
LV_ITEM lvItem;
listindex=m_SMSList.GetItemCount();
lvItem.mask = LVIF_IMAGE|LVIF_TEXT;
lvItem.iItem =listindex;
lvItem.iSubItem =0;
lvItem.iImage=imageindex;
lvItem.pszText = (LPTSTR) index;
m_SMSList.InsertItem(&lvItem);
lvItem.mask = LVIF_TEXT;
lvItem.iItem =listindex;
lvItem.iSubItem =1;
lvItem.pszText = (LPTSTR) from;
m_SMSList.SetItem(&lvItem);
lvItem.mask = LVIF_TEXT;
lvItem.iItem =listindex;
lvItem.iSubItem =2;
lvItem.pszText = (LPTSTR) sms;
m_SMSList.SetItem(&lvItem);
lvItem.mask = LVIF_TEXT;
lvItem.iItem =listindex;
lvItem.iSubItem =3;
lvItem.pszText = (LPTSTR) rectime;
m_SMSList.SetItem(&lvItem);
}
void CSMSPage::DelSMSList()
{
m_SMSList.DeleteAllItems();
}
void CSMSPage::ShowSMSList(CString RetSMS)
{
CIVStringSet m_setstrings;
int nWord, front, back, front1, back1;
CString PDU, tmp1, tmp2, tmp3, buf, smsid;
bool isend;
char csca[20], ToNum[20], sendtime[30], smsnr[300], smsindex[5];
memset(csca,0,20);
memset(ToNum,0,20);
memset(sendtime,0,30);
memset(smsnr,0,300);
memset(smsindex,0,5);
if (RetSMS.Find("OK") != -1)
{
isend = TRUE;
}
else
{
isend = FALSE;
}
m_setstrings.Add("+CMGL:");
UINT nPos = m_setstrings.FindFirstIn(RetSMS, nWord);
if (nPos != 0xFFFFFFFF)
{
do
{
front = nPos;
nPos = m_setstrings.FindNext(nWord);
back = nPos;
if (back != 0xFFFFFFFF)
{
tmp1 = RetSMS.Left(front+12);
tmp2 = tmp1.Right(12);
front1 = tmp2.Find(":");
back1 = tmp2.Find(",");
tmp3 = tmp2.Left(back1);
smsid = tmp3.Right(tmp3.GetLength()-front1-1);
buf = tmp2.Left(back1+2);
tmp2 = buf.Right(1);
if (tmp2.Right(1) != "1")
{
continue;
}
tmp1 = RetSMS.Left(back);
tmp2 = tmp1.Right(tmp1.GetLength()-front);
buf = tmp2.Right(tmp2.GetLength()-tmp2.Find("\n"));
PDU = buf.Left(buf.GetLength()-2);
}
else
{
if (isend)
{
tmp1 = RetSMS.Left(front+12);
tmp2 = tmp1.Right(12);
front1 = tmp2.Find(":");
back1 = tmp2.Find(",");
tmp3 = tmp2.Left(back1);
smsid = tmp3.Right(tmp3.GetLength()-front1-1);
buf = tmp2.Left(back1+2);
tmp2 = buf.Right(1);
if (tmp2.Right(1) != "1")
{
continue;
}
tmp1 = RetSMS.Right(RetSMS.GetLength()-front);
buf = tmp1.Right(tmp1.GetLength()-tmp1.Find("\n"));
PDU = buf.Left(buf.GetLength()-8);
// 短信列表结束
}
else
{
tmp1 = RetSMS.Left(front+12);
tmp2 = tmp1.Right(12);
front1 = tmp2.Find(":");
back1 = tmp2.Find(",");
tmp3 = tmp2.Left(back1);
smsid = tmp3.Right(tmp3.GetLength()-front1-1);
buf = tmp2.Left(back1+2);
tmp2 = buf.Right(1);
if (tmp2.Right(1) != "1")
{
continue;
}
tmp1 = RetSMS.Right(RetSMS.GetLength()-front);
buf = tmp1.Right(tmp1.GetLength()-tmp1.Find("\n"));
PDU = buf.Left(buf.GetLength()-2);
// 短信列表没有结束
}
}
sprintf(smsindex, "%s", smsid);
if (PDU.Find("\n") != -1)
{
tmp1 = PDU.Right(PDU.GetLength()-1);
PDU = tmp1;
}
theApp.mobile.gsmDecodePdu(PDU,
csca,
ToNum,
sendtime,
smsnr);
buf = sendtime;
sprintf(sendtime, "%s-%s-%s %s:%s:%s",
buf.Left(2),
buf.Left(4).Right(2),
buf.Left(6).Right(2),
buf.Left(8).Right(2),
buf.Left(10).Right(2),
buf.Left(12).Right(2));
// 转换PDU格式
InsertSMS(9,smsindex,ToNum,smsnr,sendtime);
// 插入list
} while (nPos != 0xFFFFFFFF);
}
}
int CSMSPage::GetItemCount()
{
return m_SMSList.GetItemCount();
}
void CSMSPage::OnBtnexport()
{
// TODO: Add your control notification handler code here
HANDLE hThread, hProc;
char cText[100], comm[20];
CString RetInfo, sDevComm, sStatus, sAppComm;
memset(comm, 0, 20);
memset(cText, 0, 100);
sAppComm = theApp.GetAppComm();
sprintf(comm, "%s", sAppComm);
theApp.SetStatusText("正在寻找GPRS无线网络设备,请稍后...");
theApp.SetDevText("");
sDevComm = theApp.OpenDev(comm, 9600);
if (sDevComm.GetLength() == 0)
{
theApp.SetStatusText("设备未被找到或端口未被初始化,正在尝试初始化...");
sDevComm = theApp.MultiBautOpenDev(comm);
if (sDevComm.GetLength() == 0)
{
theApp.mobile.CloseComm();
theApp.SetStatusText("没有找到设备或端口波特率不匹配,请确定设备是否连接...");
MessageBox("没有找到设备或端口波特率不匹配!", "AWS");
return;
}
else
{
theApp.SetStatusText("端口初始化完成,正在打开端口...");
sDevComm = theApp.OpenDev(comm, 9600);
}
}
if (theApp.GetDevType() == "WAVECOM")
{
theApp.SetStatusText("");
sprintf(cText, "ADBON GPRS MODEM : %s/%d", sDevComm, 9600);
theApp.SetDevText(cText);
DelSMSList();
m_ProgDlg.Create(IDD_PROGDLG);
ExitEvent=CreateEvent( NULL, // no security
TRUE, // explicit reset req
FALSE, // initial event reset
NULL ) ; // no name
ExitedEvent=CreateEvent( NULL, // no security
TRUE, // explicit reset req
FALSE, // initial event reset
NULL ) ; // no name
if ((hThread=CreateThread(NULL,0,ExportSMSProc,this,0,&ThreadId))==NULL) {
CloseHandle(ExitEvent);
CloseHandle(ExitedEvent);
MessageBox("创建通讯线程失败","错误信息",MB_OK);
return;
}
hProc=GetCurrentProcess();
SetPriorityClass(hProc,HIGH_PRIORITY_CLASS);
SetThreadPriority(hThread,THREAD_PRIORITY_TIME_CRITICAL);
}
if (theApp.GetDevType() == "BENQ")
{
theApp.SetStatusText("");
sprintf(cText, "ADBON GPRS MODEM : %s/%d", sDevComm, 9600);
theApp.SetDevText(cText);
DelSMSList();
m_ProgDlg.Create(IDD_PROGDLG);
ExitEvent=CreateEvent( NULL, // no security
TRUE, // explicit reset req
FALSE, // initial event reset
NULL ) ; // no name
ExitedEvent=CreateEvent( NULL, // no security
TRUE, // explicit reset req
FALSE, // initial event reset
NULL ) ; // no name
if ((hThread=CreateThread(NULL,0,ExportSMSProc,this,0,&ThreadId))==NULL) {
CloseHandle(ExitEvent);
CloseHandle(ExitedEvent);
MessageBox("创建通讯线程失败","错误信息",MB_OK);
return;
}
hProc=GetCurrentProcess();
SetPriorityClass(hProc,HIGH_PRIORITY_CLASS);
SetThreadPriority(hThread,THREAD_PRIORITY_TIME_CRITICAL);
}
if (theApp.GetDevType() == "SAGEM MO1xx")
{
theApp.mobile.SetModuleType("SAGEM MO1xx");
MessageBox("SAGEM MO1xx", "AWS");
}
}
void CSMSPage::OnBtnsave()
{
// TODO: Add your control notification handler code here
int itemcount, i;
CFileDialog filedlg(FALSE,NULL,NULL,OFN_HIDEREADONLY,
"TXT Files (*.txt)|*.txt|All Files (*.*)|*.*||",NULL);
CString pathname, smsindex, sendname, content, sendtime;
FILE * savestream;
char savefile[MAX_PATH], itemtmp[1000];
memset(savefile,0,MAX_PATH);
itemcount = GetItemCount();
if (itemcount == 0)
{
MessageBox("没有可以保存的电话簿数据", "AWS");
return;
}
if (filedlg.DoModal() == IDOK) {
pathname = filedlg.GetPathName();
pathname += ".txt";
sprintf(savefile, "%s", pathname);
// 保存路径
if((savestream = fopen(savefile, "w+")) == NULL)
{
MessageBox("文件无法打开", "AWS");
return;
}
for (i=0; i<itemcount; i++)
{
memset(itemtmp,0,1000);
smsindex = m_SMSList.GetItemText(i, 0);
sendname = m_SMSList.GetItemText(i, 1);
content = m_SMSList.GetItemText(i, 2);
sendtime = m_SMSList.GetItemText(i, 3);
sprintf(itemtmp, "%s\t%s\t%s\t%s\n", smsindex, sendname, content, sendtime);
fwrite(itemtmp, sizeof(char), strlen(itemtmp), savestream);
}
fclose(savestream);
}
}
DWORD WINAPI ExportSMSProc(LPVOID lpParameter)
{
CSMSPage * pParentWnd;
CString RetInfo;
pParentWnd=(CSMSPage *) lpParameter;
pParentWnd->m_ProgDlg.ShowWindow(TRUE);
pParentWnd->m_ProgDlg.SetRange(0,20);
pParentWnd->m_ProgDlg.SetStatusText("正在读取SIM卡上的短信息...");
theApp.mobile.CMGF("0");
Sleep(10);
RetInfo = theApp.mobile.ReceiveInfo();
//theApp.mobile.CMGLFORBENQ("\"ALL\""); // 读取短信列表(BENQ)
theApp.mobile.CMGL(4); // 读取短信列表
Sleep(10);
RetInfo = theApp.mobile.ReceiveInfo();
if (RetInfo.GetLength() == 0)
{
Sleep(500);
theApp.mobile.CMGL(4); // 读取短信列表
Sleep(10);
RetInfo = theApp.mobile.ReceiveInfo();
}
do
{
pParentWnd->ShowSMSList(RetInfo);
RetInfo = theApp.mobile.ReceiveInfo();
}
while(RetInfo.GetLength() != 0);
pParentWnd->m_ProgDlg.SetPos(20);
pParentWnd->m_ProgDlg.SetStatusText("完成");
pParentWnd->m_ProgDlg.SetPos(0);
pParentWnd->m_ProgDlg.SetBtnEnable(TRUE);
theApp.mobile.CloseComm();
return 0;
}
void CSMSPage::OnDialnum()
{
// TODO: Add your command handler code here
CString sName, sNum;
char num[20];
memset(num, 0, 20);
sName = "未知";
sNum = m_SMSList.GetItemText(iCurrIndex, 1);
sprintf(num, "%s", sNum);
sNum = Cut86(num);
m_InfoDlg.InfoCreate(sName, sNum, IDD_DIALINFODLG);
}
void CSMSPage::OnSendsmsto()
{
// TODO: Add your command handler code here
CString sName, sNum;
char num[20];
memset(num, 0, 20);
sName = "未知";
sNum = m_SMSList.GetItemText(iCurrIndex, 1);
sprintf(num, "%s", sNum);
sNum = Cut86(num);
m_ReplyDlg.InfoCreate(sName, sNum, IDD_REPLYSMSDLG);
}
void CSMSPage::OnRclickSms(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
int nIndex = m_SMSList.GetNextItem(-1, LVNI_ALL | LVNI_SELECTED);
iCurrIndex = nIndex;
*pResult = 0;
}
void CSMSPage::OnContextMenu(CWnd* pWnd, CPoint point)
{
// TODO: Add your message handler code here
MousePoint = point;
if(iCurrIndex == -1)
return;
menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTBUTTON, MousePoint.x, MousePoint.y, this, NULL);
}
CString CSMSPage::Cut86(char * num)
{
CString buf, strRet;
buf = num;
if (buf.Left(2) == "86")
{
strRet = buf.Right(buf.GetLength()-2);
}
else
{
strRet = buf;
}
return strRet;
}
void CSMSPage::OnDelsms()
{
// TODO: Add your command handler code here
CString m_DelNum, sAppComm, sDevComm;
char buf[5], comm[20], cText[100];
int iNum;
memset(comm, 0, 20);
memset(buf, 0, 5);
memset(cText, 0, 100);
m_DelNum = m_SMSList.GetItemText(iCurrIndex, 0);
sprintf(buf, "%s", m_DelNum);
iNum = atoi(buf);
sAppComm = theApp.GetAppComm();
sprintf(comm, "%s", sAppComm);
theApp.SetStatusText("正在寻找GPRS无线网络设备,请稍后...");
theApp.SetDevText("");
sDevComm = theApp.OpenDev(comm, 9600);
if (sDevComm.GetLength() == 0)
{
theApp.SetStatusText("设备未被找到或端口未被初始化,正在尝试初始化...");
sDevComm = theApp.MultiBautOpenDev(comm);
if (sDevComm.GetLength() == 0)
{
theApp.mobile.CloseComm();
theApp.SetStatusText("没有找到设备或端口波特率不匹配,请确定设备是否连接...");
MessageBox("没有找到设备或端口波特率不匹配!", "AWS");
return;
}
else
{
theApp.SetStatusText("端口初始化完成,正在打开端口...");
sDevComm = theApp.OpenDev(comm, 9600);
}
}
if (theApp.GetDevType() == "WAVECOM")
{
theApp.SetStatusText("");
sprintf(cText, "ADBON GPRS MODEM : %s/%d", sDevComm, 9600);
theApp.SetDevText(cText);
DelSMSList();
theApp.mobile.CMGD(iNum);
theApp.mobile.CloseComm();
}
if (theApp.GetDevType() == "BENQ")
{
theApp.SetStatusText("");
sprintf(cText, "ADBON GPRS MODEM : %s/%d", sDevComm, 9600);
theApp.SetDevText(cText);
DelSMSList();
theApp.mobile.CMGD(iNum);
theApp.mobile.CloseComm();
}
OnBtnexport();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -