?? smsrobot更多介紹,不錯(cuò)解釋詳細(xì).htm
字號(hào):
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<!-- saved from url=(0062)http://www.sendsms.cn/product/smssoft/jindi-smsrobot-more4.htm -->
<HTML><HEAD><TITLE>SMSRobot更多介紹</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312"><LINK
href="SMSRobot更多介紹,不錯(cuò)解釋詳細(xì).files/style.css" type=text/css rel=stylesheet>
<STYLE type=text/css>BODY {
MARGIN: 0px
}
.style6 {
COLOR: #fead54
}
.style8 {
FONT-WEIGHT: bold; COLOR: #fead54
}
</STYLE>
<SCRIPT language=JavaScript
src="SMSRobot更多介紹,不錯(cuò)解釋詳細(xì).files/mm_menu1.js"></SCRIPT>
<SCRIPT language=JavaScript src="SMSRobot更多介紹,不錯(cuò)解釋詳細(xì).files/mm_menu.js"></SCRIPT>
<SCRIPT language=JavaScript
src="SMSRobot更多介紹,不錯(cuò)解釋詳細(xì).files/mm_menu2.js"></SCRIPT>
<META content="MSHTML 6.00.2800.1106" name=GENERATOR></HEAD>
<BODY>
<SCRIPT language=JavaScript1.2>mmLoadMenus();</SCRIPT>
<TABLE cellSpacing=0 cellPadding=0 width=778 align=center border=0>
<SCRIPT language=JavaScript src="SMSRobot更多介紹,不錯(cuò)解釋詳細(xì).files/head.js"></SCRIPT>
<TBODY></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=778 align=center border=0><!--DWLayoutTable-->
<TBODY>
<TR>
<TD width=778 height=10> </TD></TR></TBODY></TABLE>
<TABLE class=con1 cellSpacing=0 cellPadding=0 width=778 align=center border=0><!--DWLayoutTable-->
<TBODY>
<TR>
<TD style="PADDING-LEFT: 0px" vAlign=top align=middle width=207><A
href="http://www.sendsms.cn/product/smssoft/jindi-smsrobot.htm"><IMG
height=99 src="SMSRobot更多介紹,不錯(cuò)解釋詳細(xì).files/img-smsrobot.gif" width=93
border=0></A><BR><STRONG><A
href="http://www.sendsms.cn/product/smssoft/jindi-smsrobot.htm">Jindi-SMSRobot
v2.0</A></STRONG> <BR></TD>
<TD style="PADDING-LEFT: 0px" vAlign=top width=571>
<TABLE cellSpacing=0 cellPadding=0 width="90%" border=0>
<TBODY>
<TR>
<TD><STRONG>關(guān)于金笛短消息群發(fā)機(jī)器人的更多介紹...</STRONG></TD></TR></TBODY></TABLE><SPAN
class=style8><SPAN class=style6><BR><IMG height=16
src="SMSRobot更多介紹,不錯(cuò)解釋詳細(xì).files/icon-indent.gif"
width=12></SPAN></SPAN>金笛短消息控件SMSActiveX 方法說明<BR><SPAN class=style8><SPAN
class=style6><IMG height=16
src="SMSRobot更多介紹,不錯(cuò)解釋詳細(xì).files/icon-indent.gif" width=12></SPAN></SPAN><A
href="http://www.sendsms.cn/product/smssoft/jindi-smsrobot-more2.htm">金笛短消息控件SMSActiveX使用說明</A><BR><SPAN
class=style8><SPAN class=style6><IMG height=16
src="SMSRobot更多介紹,不錯(cuò)解釋詳細(xì).files/icon-indent.gif" width=12></SPAN></SPAN><A
href="http://www.sendsms.cn/product/smssoft/jindi-smsrobot-more3.htm">短信群發(fā)機(jī)器人
SMSRobot 系統(tǒng)盈利分析</A><BR><SPAN class=style8><SPAN class=style6><IMG
height=16 src="SMSRobot更多介紹,不錯(cuò)解釋詳細(xì).files/icon-indent.gif"
width=12></SPAN></SPAN>SMSRobot程序二次開發(fā)接口</TD></TR>
<TR bgColor=#fff7dd>
<TD vAlign=top colSpan=2>
<P><SPAN class=style8>SMSRobot程序二次開發(fā)接口</SPAN><BR></P></TD></TR>
<TR align=middle>
<TD vAlign=top colSpan=2>
<TABLE cellSpacing=0 cellPadding=0 width="90%" border=0>
<TBODY>
<TR>
<TD align=left>一 程序結(jié)構(gòu): <BR>1 開發(fā)及運(yùn)行環(huán)境
<BR>本程序由VC開發(fā),用到了MFC類庫(kù),它只能運(yùn)行于WINDOWS操作系統(tǒng)下。 <BR>2程序工作原理及所用到的類 <BR>(1)
CSmsrobatApp類: MFC產(chǎn)生的類,它沒有太多的函數(shù),而其程序只用到了它的InitInstance()函數(shù),
<BR>此函數(shù)用于程序的初始化。初始化要完成下圖所示內(nèi)容。(其中會(huì)對(duì)文件進(jìn)行讀寫操作,這些操作會(huì)涉及到
<BR>自定義的HandleFile類,關(guān)于這個(gè)類以及要用到的文件我在文檔的后面有更詳細(xì)的說明。) </TD></TR>
<TR>
<TD align=middle><IMG height=300
src="SMSRobot更多介紹,不錯(cuò)解釋詳細(xì).files/smsrobot-second.jpg"
width=400><BR></TD></TR>
<TR>
<TD align=middle bgColor=#fff7dd>SMSRobot 初始化流程
</TD></TR></TBODY></TABLE></TD></TR>
<TR align=left>
<TD vAlign=top colSpan=2><SPAN
class=style8>圖為CsmsrobatApp::InitInstance()的邏輯關(guān)系,
<BR>下面是函數(shù)InitInstance()的源代碼(手工加入部分) </SPAN></TD></TR>
<TR align=middle>
<TD vAlign=top colSpan=2><TEXTAREA class=con1 style="WIDTH: 700px; HEIGHT: 400px; BACKGROUND-COLOR: #fff7dd" name=textfield> int ifreg = 0;
int iffirst;
HandleFile m_hand;
CString path1,path2;
path1 = m_hand.GetCtFilePath(\"datasms.reg1\");
path2 = m_hand.GetCtFilePath(\"datasms.tim\");
ifreg = m_hand.GetReg(&iffirst,path1);
if(iffirst == 0) //判斷程序是否為第一次運(yùn)行
{
CTime tm;
tm = CTime::GetCurrentTime();
m_hand.WriteTime(tm.Format(\"%Y\"),
tm.Format(\"%m\"),
tm.Format(\"%d\"),
path2);
m_hand.WriteReg(0,1,path1);//如果是第一次運(yùn)行,把當(dāng)前時(shí)間寫入sms.tim文件,
//在sms.reg1文件中去除第一次運(yùn)行標(biāo)記
}
else //如果不是第一次運(yùn)行
{
int year,month,day;
m_hand.GetTime(&year,&month,&day,path2);
CTime tm(year,month,day,0,0,0,-1);
CTime tmN = CTime::GetCurrentTime();
CTimeSpan tms = tmN - tm;
int inte;
inte = tms.GetDays();
CString tem;
tem.Format(\"%d\",inte);
if(ifreg == 0) //判斷程序是否注冊(cè)
{
if(inte>=90) //如果程序沒有注冊(cè),判斷它是否過期,如過期則退出程序
{
AfxMessageBox(\"程序已過期\");
return FALSE;
}
}
}
if(ifreg == 0) //如果程序沒有注冊(cè),也沒有過期則用CsmsrobatView類作為活動(dòng)視圖
{
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CSmsRobatDoc),
RUNTIME_CLASS(CMainFrame),
RUNTIME_CLASS(CSmsRobatView));
AddDocTemplate(pDocTemplate);
}
else if(ifreg == 1) //如果程序注冊(cè),則用review類作為活動(dòng)視圖
{
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CSmsRobatDoc),
RUNTIME_CLASS(CMainFrame),
RUNTIME_CLASS(review));
AddDocTemplate(pDocTemplate);
}
else
{
AfxMessageBox(\"注冊(cè)文件被破壞!!\\r\\n請(qǐng)重裝軟件!!\");
return FALSE;
}
// Parse command line for standard shell commands, DDE, file open
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
// Dispatch commands specified on the command line
if (!ProcessShellCommand(cmdInfo))
return FALSE;
// The one and only window has been initialized, so show and update it.
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
m_pMainWnd->SetWindowText(\"SMSRobot短信群發(fā)機(jī)器人\");//設(shè)置程序的標(biāo)題
(2) CMainFrame類
這個(gè)類是程序的框架類,也由MFC產(chǎn)生。其中有一個(gè)變量m_ifreg,和三個(gè)函數(shù) OnCreate(),OnSetPara(),
OnGetMinMaxInfo()很重要。 在OnCreate()中讀文件sms.reg1以設(shè)置m_ifreg,在OnSetPara()和
OnGetMinMaxInfo()中需要用m_ifreg來確定review, CsmsrobatView誰(shuí)是活動(dòng)視圖。
OnSetPara()用來彈出設(shè)置本地發(fā)送或WEB發(fā)送參數(shù)的對(duì)話框,至于是本地還是WEB方式由活動(dòng)視圖的變量
m_WebOrLocal決定。OnGetMinMaxInfo()函數(shù)決定程序框架窗口的大小。CMainFrame中還會(huì)用到一個(gè)函數(shù)
OnClose(),它察看程序終止前是否還在進(jìn)行本地發(fā)送操作,如果是,程序會(huì)彈出一個(gè)對(duì)話框提醒用戶先結(jié)束發(fā)送。
下面是CMainFrame類中一些重要函數(shù)的源代碼
OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) //定制程序窗口的大小
{
if(m_ifreg == 0)//程序沒有注冊(cè)時(shí)的窗口大小
{
lpMMI->ptMinTrackSize.x = 548;
lpMMI->ptMinTrackSize.y = 472;
lpMMI->ptMaxTrackSize.x = 548;
lpMMI->ptMaxTrackSize.y = 472;
}
if(m_ifreg == 1)//注冊(cè)過程序的窗口大小
{
lpMMI->ptMinTrackSize.x = 548;
lpMMI->ptMinTrackSize.y = 365;
lpMMI->ptMaxTrackSize.x = 548;
lpMMI->ptMaxTrackSize.y = 365;
}
}
(3) 活動(dòng)視圖類(review或CsmsrobatView類)
這兩個(gè)類誰(shuí)是程序的視圖由程序是否注冊(cè)來決定,如果注冊(cè)了,程序用review作為其視圖,
反之用CsmsrobatView作為其視圖。視圖是用戶和程序交互的界面。
視圖中的數(shù)據(jù)和控件在OnInitialUpdate()函數(shù)中被初始化。程序發(fā)送短信息的功能也是在
視圖中完成的。本地發(fā)送用函數(shù)LocalSend(),WEB發(fā)送用全局函數(shù)WebSend1(review)或
WebSend(CsmsrobatView)。這里有一點(diǎn)需要說明,LocalSend()用到了一個(gè)Active控件,
這個(gè)控件發(fā)送短信息時(shí)會(huì)把控制交給程序,所以,我把Localsend()作為視圖的一個(gè)操作,
它被激活時(shí)在程序的主線程內(nèi)運(yùn)行。而用WebSend或WebSend1通過網(wǎng)站發(fā)送短信息時(shí),
不返回控制給程序,所以為了能夠中途停止網(wǎng)上發(fā)送,把WebSend或WebSend1做成了全局函數(shù),
他們被激活時(shí)會(huì)啟動(dòng)一個(gè)輔助線程。
下面是視圖里主要函數(shù)的源代碼及其說明
視圖的初始化函數(shù)OnInitialUpdate()
OnInitialUpdate()
{
CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
//下面是程序中手工加入的代碼
HandleFile m_hand;
m_currentpath = m_hand.GetCtFilePath(\"\"); //得到程序運(yùn)行的當(dāng)前路徑
CString m_filepath;
m_filepath = m_currentpath + \"date\\\\local.conf\";
m_comport = m_hand.SetPara(m_filepath);
m_connectmode = m_hand.ChangeCtModeToFit(m_hand.ConnectionMode);
m_mode1 = m_hand.ChangeModelToFit(m_hand.Mode1);
//以上代碼通過讀文件里的數(shù)據(jù)初始化本地發(fā)送的參數(shù)
m_filepath = m_currentpath + \"date\\\\ph1.txt\";
m_hand.Getphone(&m_Olist,m_filepath);
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -