Exemple #1
0
// 选择列表框中的所有行
BOOL CMyListCtrl::SelectAll()
{
   BOOL bReturn(TRUE);

   for (int nItem = 0; IsItem(nItem); nItem++) 
      if (! SetItemState(nItem, LVIS_SELECTED, LVIS_SELECTED)) {
         bReturn = FALSE;
         break;
      }

   return bReturn;
}
Exemple #2
0
// 验证是否需要更新
BOOL CUpdaterApp::_CheckNeedUpdate()
{
	BOOL bReturn(FALSE);

	int nCount = m_arrUpdate.GetSize();
	if (nCount > 0)
	{
		// 启动线程池
		SYSTEM_INFO si = {0};
		GetSystemInfo(&si);
		CThreadPool *pThreadPool = new CThreadPool(32);
		for (int i(0); i < nCount; ++i)
		{
			pThreadPool->Run(_CheckFileMD5, m_arrUpdate.GetAt(i));
		}
		pThreadPool->Wait(INFINITE);
		delete pThreadPool;

		// 检查是否存在更新
		BOOL bExistUpdate(FALSE);
		for (int j(0); j < nCount; ++j)
		{
			if (m_arrUpdate.GetAt(j)->bNeedUpdate)
			{
				bExistUpdate = TRUE;
				break;
			}
		}
		
		if (bExistUpdate)
		{
			// 询问控制窗口
			if (IsWindow(m_hWindowCtrl))
			{
				if (0 == SendMessage(m_hWindowCtrl, UM_IFNEEDUPDATE, 0, 0))
				{
					// 返回值0允许更新
					bReturn = TRUE;
				}
			}
		}
	}
	else
	{
		LOG(_T("更新列表为空!"));
	}

	return bReturn;
}
Exemple #3
0
// 初始化命令行参数
BOOL CUpdaterApp::_InitCmdline(int argc, LPTSTR* args)
{
	BOOL bReturn(FALSE);
	CCmdLine cmder;
	if (cmder.SplitLine(__argc, __targv) >= 2)
	{
		if (cmder.HasSwitch(_T("-PID")) && cmder.HasSwitch(_T("-H")))
		{
			m_dwProcessId = (DWORD)_ttoi(cmder.GetSafeArgument(_T("-PID"), 0, _T("0")));
			m_hWindowCtrl = (HWND)_ttoi(cmder.GetSafeArgument(_T("-H"), 0, _T("0")));
			bReturn = TRUE;
		}
		else
		{
			LOG(_T("命令行参数错误!"));
		}
	}
	else
	{
		LOG(_T("未指定命令行参数"));
	}
	return bReturn;
}
Exemple #4
0
// 加载PNG图片资源
BOOL CUpdaterApp::LoadPngFromRes(CImage& image, LPCTSTR pszResName)
{
	BOOL bReturn(FALSE);
	HINSTANCE hInst = AfxGetInstanceHandle();
	HRSRC hRsrc = ::FindResource(hInst, pszResName, _T("PNG"));
	if (hRsrc)
	{
		DWORD len = SizeofResource(hInst, hRsrc);
		BYTE* lpRsrc = (BYTE*)LoadResource(hInst, hRsrc);
		if (lpRsrc)
		{
			HGLOBAL hMem = GlobalAlloc(GMEM_FIXED, len);
			BYTE* pmem = (BYTE*)GlobalLock(hMem);
			memcpy(pmem, lpRsrc, len);
			IStream* pstm = NULL;
			if (S_OK == CreateStreamOnHGlobal(hMem, FALSE, &pstm))
			{
				image.Load(pstm);
				bReturn = TRUE;
			}
		}
	}
	return bReturn;
}
Exemple #5
0
// 初始化更新列表
BOOL CUpdaterApp::_InitFileList()
{
	BOOL bReturn(FALSE);

	CString strFileList(m_szServer);
	strFileList += _T("/Filelist.txt");

	CInternetSession sess;
	sess.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT, 5000);
	sess.SetOption(INTERNET_OPTION_SEND_TIMEOUT, 1000);
	sess.SetOption(INTERNET_OPTION_RECEIVE_TIMEOUT, 5000);
	sess.SetOption(INTERNET_OPTION_DATA_SEND_TIMEOUT, 1000);
	sess.SetOption(INTERNET_OPTION_DATA_RECEIVE_TIMEOUT, 5000);
	sess.SetOption(INTERNET_OPTION_CONNECT_RETRIES, 1);

	try
	{
		CHttpFile* pHttpFile = (CHttpFile*)sess.OpenURL(strFileList, 1, INTERNET_FLAG_DONT_CACHE | INTERNET_FLAG_TRANSFER_ASCII, NULL, 0);
		if (pHttpFile)
		{
			DWORD dwErrCode(0);
			pHttpFile->QueryInfo(HTTP_QUERY_STATUS_CODE, dwErrCode);
			if (dwErrCode >= 200 && dwErrCode < 300)
			{
				CStringA strLineA;
				while (pHttpFile->ReadString((LPTSTR)strLineA.GetBuffer(512), 511))
				{
					strLineA.ReleaseBuffer(); // MFC-bug
					CString strLine(strLineA);
					strLine.TrimLeft();
					if (strLine.GetLength() > 0 && strLine[0] != _T('\\'))
					{
						continue;
					}
					std::vector<CString> vecStrs = Split(strLine, _T("^^^^^^"));
					if (vecStrs.size() >= 2)
					{
						LPUPDATEITEM pUpdateItem = new UPDATEITEM;
						ZeroMemory(pUpdateItem, sizeof(*pUpdateItem));
						lstrcpyn(pUpdateItem->szFileName, vecStrs[0], MAX_PATH);
						lstrcpyn(pUpdateItem->szServerMD5, vecStrs[1], 33);
						m_arrUpdate.Add(pUpdateItem);
					}
				}
				pHttpFile->Close();
				sess.Close();
				bReturn = TRUE;
			}
			else
			{
				LOG(_T("网站访问错误码:%d"), dwErrCode);
			}
		}
	}
	catch (...)
	{
		LOG(_T("下载列表异常!"));
	}

	return bReturn;
}