用飛信免費短信接口編寫小工具

我有時需要編譯大程序或做一些運算,計算機處理數據時間比較長,這時很難說服自己去做別的事情,經常眼巴巴地瞅着計算機,心急如焚。即使放下這個活去做別的事情心裏也不踏實,經常時不時地回來看看計算的情況。

如果能有一個簡單易用的辦法及時告訴我程序處理完畢就好啦。

後來我發現了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都不支持通配符,很令我窩火,如果大家有好辦法請明示。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章