|  | @@ -0,0 +1,171 @@
 | 
	
		
			
				|  |  | +#include "StdAfx.h"
 | 
	
		
			
				|  |  | +#include "Global.h"
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +namespace GLOBAL
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +	TCHAR g_szModulePath[MAX_PATH] = _T("");			// 软件目录;
 | 
	
		
			
				|  |  | +	TCHAR g_szModuleFileName[MAX_PATH] = _T("");		// 软件名称;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	void Init()
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		TCHAR szDrive[_MAX_DRIVE] = { 0 };
 | 
	
		
			
				|  |  | +		TCHAR szDir[_MAX_DIR] = { 0 };
 | 
	
		
			
				|  |  | +		TCHAR szFna[_MAX_DIR] = { 0 };
 | 
	
		
			
				|  |  | +		TCHAR szExt[_MAX_DIR] = { 0 };
 | 
	
		
			
				|  |  | +		::GetModuleFileName(NULL, g_szModulePath, sizeof(g_szModulePath) / sizeof(TCHAR));
 | 
	
		
			
				|  |  | +		_stprintf_s(g_szModuleFileName, _T("%s"), g_szModulePath);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		_tsplitpath_s(g_szModulePath, szDrive, szDir, szFna, szExt);
 | 
	
		
			
				|  |  | +		_tcscpy_s(g_szModulePath, szDrive);
 | 
	
		
			
				|  |  | +		_tcscat_s(g_szModulePath, szDir);
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	// 调用批处理,返回的是多字节字符;
 | 
	
		
			
				|  |  | +	BOOL StartProcess(LPCTSTR lpApplicationName, LPCTSTR lpCommandLine, CString &strStdOutput)
 | 
	
		
			
				|  |  | +	{	
 | 
	
		
			
				|  |  | +		HANDLE hRead,hWrite;  
 | 
	
		
			
				|  |  | +		SECURITY_ATTRIBUTES sa;  		
 | 
	
		
			
				|  |  | +		sa.nLength = sizeof(SECURITY_ATTRIBUTES);  
 | 
	
		
			
				|  |  | +		sa.lpSecurityDescriptor = NULL; //使用系统默认的安全描述符  
 | 
	
		
			
				|  |  | +		sa.bInheritHandle = TRUE; //创建的进程继承句柄
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		if (!CreatePipe(&hRead,&hWrite,&sa,0)) //创建匿名管道  
 | 
	
		
			
				|  |  | +		{  
 | 
	
		
			
				|  |  | +			MessageBox(NULL, _T("CreatePipe Failed!"), _T("提示"), MB_OK | MB_ICONWARNING);  
 | 
	
		
			
				|  |  | +			return FALSE;  
 | 
	
		
			
				|  |  | +		}  
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		STARTUPINFO si;  
 | 
	
		
			
				|  |  | +		PROCESS_INFORMATION pi;  
 | 
	
		
			
				|  |  | +		ZeroMemory(&si,sizeof(STARTUPINFO)); 
 | 
	
		
			
				|  |  | +		si.cb = sizeof(STARTUPINFO);  
 | 
	
		
			
				|  |  | +		GetStartupInfo(&si);  
 | 
	
		
			
				|  |  | +		//si.hStdError = hWrite;  
 | 
	
		
			
				|  |  | +		si.hStdOutput = hWrite; //新创建进程的标准输出连在写管道一端  
 | 
	
		
			
				|  |  | +		si.wShowWindow = SW_HIDE; //隐藏窗口  
 | 
	
		
			
				|  |  | +		si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;  
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		TCHAR szCommandLine[MAX_PATH] = {0};
 | 
	
		
			
				|  |  | +		if ( lpCommandLine ) _stprintf_s(szCommandLine, _T("%s"), lpCommandLine);
 | 
	
		
			
				|  |  | +		if (!CreateProcess(lpApplicationName, lpCommandLine ? szCommandLine : NULL, NULL, NULL, TRUE, NULL, NULL, NULL, &si, &pi)) //创建子进程  
 | 
	
		
			
				|  |  | +		{  
 | 
	
		
			
				|  |  | +			MessageBox(NULL, _T("CreateProcess Failed!"), _T("提示"), MB_OK | MB_ICONWARNING);  
 | 
	
		
			
				|  |  | +			return FALSE;  
 | 
	
		
			
				|  |  | +		}  
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		CloseHandle(hWrite); //关闭管道句柄  
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		TCHAR szBuffer[4096] = {0};  
 | 
	
		
			
				|  |  | +		DWORD bytesRead;  
 | 
	
		
			
				|  |  | +		while (true)
 | 
	
		
			
				|  |  | +		{  
 | 
	
		
			
				|  |  | +			if (ReadFile(hRead,szBuffer,4096*sizeof(TCHAR),&bytesRead,NULL) == NULL) //读取管道  
 | 
	
		
			
				|  |  | +				break;  
 | 
	
		
			
				|  |  | +			strStdOutput += szBuffer;  
 | 
	
		
			
				|  |  | +			Sleep(100);  
 | 
	
		
			
				|  |  | +		}  
 | 
	
		
			
				|  |  | +		CloseHandle(hRead); 
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		return TRUE;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	CString ReadFileContent(LPCTSTR lpFileName)
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		CString strData = _T("");
 | 
	
		
			
				|  |  | +		if ( !lpFileName || !PathFileExists(lpFileName) )
 | 
	
		
			
				|  |  | +			return strData;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		CFile file;
 | 
	
		
			
				|  |  | +		CFileException exp;
 | 
	
		
			
				|  |  | +		std::string strRead;
 | 
	
		
			
				|  |  | +		if ( file.Open(lpFileName, CFile::modeRead, &exp) )
 | 
	
		
			
				|  |  | +		{
 | 
	
		
			
				|  |  | +			DWORD dwRead = 0;
 | 
	
		
			
				|  |  | +			DWORD dwCount = 0;
 | 
	
		
			
				|  |  | +			
 | 
	
		
			
				|  |  | +			TCHAR szRead[MAX_PATH] = {0};
 | 
	
		
			
				|  |  | +			DWORD dwLen = file.GetLength();
 | 
	
		
			
				|  |  | +			while ( dwCount = file.Read(szRead, MAX_PATH) )
 | 
	
		
			
				|  |  | +			{
 | 
	
		
			
				|  |  | +				strRead.append(szRead, dwCount);
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			file.Close();
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		return CString(strRead.c_str());
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	void GetStringList(CString strData, CString strSplit, CStringList &ListStr)
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		int nPos = -1;
 | 
	
		
			
				|  |  | +		CString strTemp;
 | 
	
		
			
				|  |  | +		ListStr.RemoveAll();
 | 
	
		
			
				|  |  | +		do 
 | 
	
		
			
				|  |  | +		{
 | 
	
		
			
				|  |  | +			nPos = strData.Find(strSplit);
 | 
	
		
			
				|  |  | +			if ( nPos != -1 )
 | 
	
		
			
				|  |  | +			{
 | 
	
		
			
				|  |  | +				strTemp = strData.Mid(0, nPos);
 | 
	
		
			
				|  |  | +				ListStr.AddTail(strTemp);
 | 
	
		
			
				|  |  | +				strData = strData.Mid(nPos+strSplit.GetLength());
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		} while (nPos != -1);
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	BOOL FindString(CStringList &ListStr, CString strFind, CString &strResult)
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		CString strTemp;
 | 
	
		
			
				|  |  | +		POSITION pos = ListStr.GetHeadPosition();
 | 
	
		
			
				|  |  | +		while (pos != NULL)
 | 
	
		
			
				|  |  | +		{
 | 
	
		
			
				|  |  | +			strTemp = ListStr.GetNext(pos);
 | 
	
		
			
				|  |  | +			if ( strTemp.Find(strFind) != -1 )
 | 
	
		
			
				|  |  | +			{
 | 
	
		
			
				|  |  | +				strResult = strTemp;
 | 
	
		
			
				|  |  | +				return TRUE;
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		return FALSE;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	BOOL CheckListData(CStringList &listStr)
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		INT nCount = listStr.GetSize();
 | 
	
		
			
				|  |  | +		if ( nCount == 0 ) return FALSE;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		CString strLevel = _T(""), strDist = _T("");
 | 
	
		
			
				|  |  | +		POSITION pos = listStr.GetHeadPosition();
 | 
	
		
			
				|  |  | +		while (pos != NULL)
 | 
	
		
			
				|  |  | +		{
 | 
	
		
			
				|  |  | +			strDist = listStr.GetNext(pos);
 | 
	
		
			
				|  |  | +			if ( pos == NULL ) 
 | 
	
		
			
				|  |  | +				return FALSE;
 | 
	
		
			
				|  |  | +			strLevel = listStr.GetNext(pos);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			TCHAR szDist[5][5] = {0};
 | 
	
		
			
				|  |  | +			TCHAR szLevel[5][5] = {0};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			//TCHAR szData[1024] = {0};
 | 
	
		
			
				|  |  | +			//if (_stscanf_s(strDist.GetString(), _T("%[^=]"), szData, 1024))
 | 
	
		
			
				|  |  | +			if (_stscanf_s(strDist.GetString(), _T("%*[^=]=%[^,],%[^,],%[^,],%[^,],%s"), szDist[0], 5, szDist[1], 5, szDist[2], 5, szDist[3], 5, szDist[4], 5) == 5 )
 | 
	
		
			
				|  |  | +			{
 | 
	
		
			
				|  |  | +				if (_stscanf_s(strLevel.GetString(), _T("%*[^=]=%[^,],%[^,],%[^,],%[^,],%s"), szDist[0], 5, szDist[1], 5, szDist[2], 5, szDist[3], 5, szDist[4], 5) == 5 )
 | 
	
		
			
				|  |  | +				{
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			//if ( _stscanf_s(buf, "%[^;];%[^;];%[^;];%[^;];%[^;];%[^;];%[^;];%[^;]", name, MAX_PATH, option, MAX_PATH, head, MAX_PATH, code, MAX_PATH, param, MAX_PATH, multicode, MAX_PATH, read_wait_time, MAX_PATH, cmd_wait_time, MAX_PATH) == 8) // 等价下面;
 | 
	
		
			
				|  |  | +			//if (_stscanf_s(strDist.GetString(), "%[^=]=%[^,],%[^,],%[^,],%[^,],%[^,],%s", szDist[0], 5, szDist[1], 5, szDist[2], 5, szDist[3], 5, szDist[4], 5) == 6)
 | 
	
		
			
				|  |  | +			{
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			int aa = 0;
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		return FALSE;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +};
 |