我有时需要编译大程序或做一些运算,计算机处理数据时间比较长,这时很难说服自己去做别的事情,经常眼巴巴地瞅着计算机,心急如焚。即使放下这个活去做别的事情心里也不踏实,经常时不时地回来看看计算的情况。
如果能有一个简单易用的办法及时告诉我程序处理完毕就好啦。
后来我发现了http://sms.api.bz/这个飞信免费短信的接口平台,用这个平台可以轻松发送短信通知自己。因为觉得这种需求可能不大,所以写了这个程序后一直自己用,没有向众人献丑。但是我今天在干等着迅雷下载一个急用的资料时,忽然想到可以把这个程序用上——下载完毕让计算机发条短信给自己,然后我再过来查看资料岂不美哉。
说明1:首先,你得有个飞信的账号,没有的话,去注册一个吧。
说明2:无参数或参数个数错误时,采用hardcoded参数发送,否则用传入的参数发送。这样可以方便从程序里调用。
说明3:其实没有必要打出来MessageBox滴。
辩解1:写这种小程序就是要少花精力,所以选择了最熟悉的vc;
辩解2:要用到简单的串,故加上mfc;
辩解3:还要方便程序调用,因此采用控制台。
废话少说,下面就把代码贴出来抛砖引玉。
1.创建基于mfc的console程序;
2.主要功能code:
void SendMessage(int argc, TCHAR* argv[])
{
if(5!=argc && 1!=argc && 2!=argc)
{
printf("Send sms, using fetion api. Please make sure of the usage./n"
"Usage: your_phone_number your_password his(her)_phone_number message./n"
"If no parameters, will send /"OK/" to 11111111111./n");
}
CString usrname, pwd, recvusr, message;
if(5==argc)
{
usrname.Format(_T("%s"), argv[1]);
pwd.Format(_T("%s"), argv[2]);
recvusr.Format(_T("%s"), argv[3]);
message.Format(_T("%s"), argv[4]);
}
else
{
usrname = _T("11111111111");// Source fetion phone number.(Your number)
pwd = _T("yourfetionpass");// Your fetion password.
recvusr = _T("11111111111");// Targer fetion phone number.(Your number TOO)
message = _T("OK!");
}
CString strSentence, strLocalInfo;
strLocalInfo.Format(_T("username=%s&password=%s&sendto=%s&message=%s"),usrname,pwd,recvusr,message);
CString strRemoteName =_T("http://sms.api.bz/fetion.php?") + strLocalInfo;
CInternetSession sess;
CHttpFile* fileGet;
try
{
fileGet=(CHttpFile*)sess.OpenURL(strRemoteName);
}
catch(CException* e)
{
fileGet = 0;
}
if(fileGet)
{
DWORD dwStatus;
DWORD dwBuffLen = sizeof(dwStatus);
BOOL bSuccess = fileGet->QueryInfo(HTTP_QUERY_STATUS_CODE|HTTP_QUERY_FLAG_NUMBER, &dwStatus, &dwBuffLen);
if( !bSuccess || dwStatus< 200|| dwStatus>=300 )
{
strSentence.Format(_T("打开网页文件出错,错误码:%d"), dwStatus);
AfxMessageBox(strSentence);
}
fileGet->Close();
delete fileGet;
}
else
AfxMessageBox(_T("不能找到网页文件!"));
sess.Close();
}
3.main函数
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
// initialize MFC and print and error on failure
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: change error code to suit your needs
_tprintf(_T("Fatal Error: MFC initialization failed/n"));
nRetCode = 1;
}
else
{
SendMessage(argc, argv);
}
return nRetCode;
}
4.注意传参时,message里不能有空格,否则会被识别成多个参数。我的本意是能发送OK!或者DONE!就心满意足了,你不会想用这个程序给别人发抒情诗吧。
5.怎么在迅雷下载完毕后自动调用它呢?迅雷的“配置面板”里有“下载安全”,可以指定“下载后自动杀毒”。这个功能我一直没机会用,可以把路径配置成这个小程序的路径,代码里判断argc是否等于2就是是支持“下载后杀毒”功能的。注意:“指定格式”里的后缀名要跟你下载的文件后缀匹配哦。在flashget里也是同样的使用方法。迅雷和flashget都不支持通配符,很令我窝火,如果大家有好办法请明示。