我有時需要編譯大程序或做一些運算,計算機處理數據時間比較長,這時很難說服自己去做別的事情,經常眼巴巴地瞅着計算機,心急如焚。即使放下這個活去做別的事情心裏也不踏實,經常時不時地回來看看計算的情況。
如果能有一個簡單易用的辦法及時告訴我程序處理完畢就好啦。
後來我發現了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都不支持通配符,很令我窩火,如果大家有好辦法請明示。