浏览代码

提取启动OGCTool代码段为函数。

Jeff 3 年之前
父节点
当前提交
d08dd5a627
共有 1 个文件被更改,包括 70 次插入46 次删除
  1. 70 46
      Source/OGCAssistTool/OGCAssistTool/OGCAssistTool.cpp

+ 70 - 46
Source/OGCAssistTool/OGCAssistTool/OGCAssistTool.cpp

@@ -11,6 +11,72 @@
 #define new DEBUG_NEW
 #endif
 
+INT StartOGCTool()
+{
+	INT nRet = 0;
+	DWORD dwProcId = 0;
+	if ( 0 == ( dwProcId = GLOBAL::FindProcess(_T("Demo.exe"))) )
+	{
+		// 没有找到目标进程,启动;
+		if ( !GLOBAL::StartProcess(GLOBAL::g_config.szOGCToolProgram) )
+		{
+			// 新开失败;
+			MessageBox(NULL, _T("启动进程失败"), _T("错误!"), MB_ICONERROR);
+			return 0;
+		}
+
+		nRet = 1;	// 进程新开;
+	}
+	else 
+	{
+		TCHAR szModulPath[MAX_PATH] = {0};
+		_stprintf(szModulPath, _T("%s"), GLOBAL::GetModulePath(_T("Demo.exe"), dwProcId));
+		if ( _tcscmp(szModulPath, GLOBAL::g_config.szOGCToolProgram) != 0 )
+		{
+			TCHAR szMsg[1024] = {0};
+			_stprintf_s(szMsg, 
+				_T("存在同名进程,目录非指定路径,请手动关闭非目标路径程序")
+				_T("\n\n当前进程路径:%s\n\n正确进程路径:%s\n\n")
+				_T("是:关闭当前进程并启动目标进程\n")
+				_T("否:不关闭当前进程,退出操作\n")
+				_T("取消:不关闭当前进程,启动目标进程\n"), 
+				szModulPath, 
+				GLOBAL::g_config.szOGCToolProgram);
+			INT nChoose = MessageBox(NULL, szMsg, _T("错误,存在同名进程!"), MB_ICONERROR|MB_YESNOCANCEL);
+			if ( nChoose == IDNO )
+			{
+				// 退出新开;
+				return -1;
+			}
+			else if ( nChoose == IDYES )
+			{
+				// 关闭当前进程;
+				HANDLE token = OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwProcId);
+				TerminateProcess(token, 0);
+			}
+
+			if ( !GLOBAL::StartProcess(GLOBAL::g_config.szOGCToolProgram) )
+			{
+				// 新开失败;
+				MessageBox(NULL, _T("启动进程失败"), _T("错误!"), MB_ICONERROR);
+				return 0;
+			}
+
+			nRet = 1;
+		}
+		else
+		{
+			nRet = 2;
+			GLOBAL::g_procWndInfo.dwProcId = dwProcId;
+		}
+	}
+
+	// 新开进程标记未劫持;
+	if ( nRet == 1 )
+		GLOBAL::g_bHijacted = FALSE;
+
+	return nRet;
+}
 
 // COGCAssistToolApp
 
@@ -63,52 +129,8 @@ BOOL COGCAssistToolApp::InitInstance()
 	MTVERIFY(GLOBAL::GetConfigInfo());
 
 #pragma region 打开目标进程;
-	DWORD dwProcId = 0;
-	if ( 0 == ( dwProcId = GLOBAL::FindProcess(_T("Demo.exe"))) )
-	{
-		// 没有找到目标进程,启动;
-		if ( !GLOBAL::StartProcess(GLOBAL::g_config.szOGCToolProgram) )
-		{
-			return FALSE;
-		}
-	}
-	else 
-	{
-		TCHAR szModulPath[MAX_PATH] = {0};
-		_stprintf(szModulPath, _T("%s"), GLOBAL::GetModulePath(_T("Demo.exe"), dwProcId));
-		if ( _tcscmp(szModulPath, GLOBAL::g_config.szOGCToolProgram) != 0 )
-		{
-			TCHAR szMsg[1024] = {0};
-			_stprintf_s(szMsg, 
-				_T("存在同名进程,目录非指定路径,请手动关闭非目标路径程序")
-				_T("\n\n当前进程路径:%s\n\n正确进程路径:%s\n\n")
-				_T("是:关闭当前进程并启动目标进程\n")
-				_T("否:不关闭当前进程,退出登录\n")
-				_T("取消:不关闭当前进程,启动目标进程\n"), 
-				szModulPath, 
-				GLOBAL::g_config.szOGCToolProgram);
-			INT nChoose = MessageBox(NULL, szMsg, _T("错误,存在同名进程!"), MB_ICONERROR|MB_YESNOCANCEL);
-			if ( nChoose == IDNO )
-			{
-				return FALSE;
-			}
-			else if ( nChoose == IDYES )
-			{
-				// 关闭当前进程;
-				HANDLE token = OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwProcId);
-				TerminateProcess(token, 0);
-			}
-
-			if ( !GLOBAL::StartProcess(GLOBAL::g_config.szOGCToolProgram) )
-			{
-				return FALSE;
-			}
-		}
-		else
-		{
-			GLOBAL::g_procWndInfo.dwProcId = dwProcId;
-		}
-	}
+	if ( StartOGCTool() < 0 )
+		return FALSE;
 #pragma endregion
 
 #pragma region 登录对话框;
@@ -119,6 +141,8 @@ BOOL COGCAssistToolApp::InitInstance()
 	}
 #pragma endregion
 
+	GLOBAL::g_IOCP.Start();
+
 	COGCAssistToolDlg dlg;
 	m_pMainWnd = &dlg;
 	INT_PTR nResponse = dlg.DoModal();