|
@@ -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;
|
|
|
+ }
|
|
|
+};
|