整体的布局是这样的。
这个我总共做了3个版本,一个是直接用ShellExecute打开网页,一个是通过CInternerConnection获取网页的内容,最后这个便是通过post访问指定网址(需要网址,端口,路径名)
总的思路是通过判断定时时间和当前系统的时间是否相等,相等就执行访问。
定时的功能是直接用控件DATETIMEPICKER,然后设置一下时间的显示格式
CDateTimeCtrl m_date;
//因为是每天定时,所以只要显示小时和分钟
m_date.SetFormat(_T("HH:mm"));
时间的更新采用的是SetTimer
ID为1(只要跟后面的KillTimer一样就行),间隔1分钟,NULL表示执行的是OnTimer函数
SetTimer(1, 60000, NULL);
OnTimer函数代码如下
CDialogEx::OnTimer(nIDEvent);
//获取当前时间
CTime CurrenTime;
CurrenTime = CTime::GetCurrentTime();
chour = CurrenTime.GetHour();
cminute = CurrenTime.GetMinute();
if (chour == hour && cminute == minute)
{
CInternetSession session(L"Http");
try
{
INTERNET_PORT nPort = 319;
DWORD dwRet = 0;
CHttpConnection* pServer = session.GetHttpConnection(L"game818.dyyl8888.com", nPort);
CHttpFile* pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_POST, L"Account/AutoRunWriteControlUserInfo");
CString strHeaders = L"Content-Type: application/x-www-form-urlencoded"; //请求头
//开始发送请求
pFile->SendRequest(strHeaders, (LPVOID)postData.c_str(), postData.size());
pFile->QueryInfoStatusCode(dwRet);
if (dwRet == HTTP_STATUS_OK)
{
bCount++;
SetDlgItemInt(IDC_EDIT1, bCount);
UpdateData(false);
}
else
{
MessageBox(L"启动失败");
}
delete pFile;
delete pServer;
}
catch (CInternetException* pEx)
{
//catch errors from WinInet
TCHAR pszError[200];
pEx->GetErrorMessage(pszError, 200);
std::cout << pszError << std::endl;//显示异常信息
MessageBox(L"发生异常");
}
session.Close();
}
CString 转 LPCTSTR 直接强转