瀏覽代碼

测试按钮实现

Jeff 3 年之前
父節點
當前提交
0414b7a50f

+ 3 - 2
Source/OGCAssistTool/OGCAssistTool/OGCAssistTool.rc

@@ -89,8 +89,8 @@ BEGIN
 END
 
 IDD_OGCASSISTTOOL_DIALOG DIALOGEX 0, 0, 639, 360
-STYLE DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_FIXEDSYS | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-EXSTYLE WS_EX_TOPMOST | WS_EX_APPWINDOW
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
+EXSTYLE WS_EX_APPWINDOW
 CAPTION "OGCAssistTool"
 FONT 9, "MS Shell Dlg", 0, 0, 0x1
 BEGIN
@@ -139,6 +139,7 @@ BEGIN
     PUSHBUTTON      "隐藏窗口",BTN_HIDE_WND,560,295,50,14
     CONTROL         "劫持窗口",CHECK_HIJACK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,617,297,48,10
     CONTROL         "恢复劫持",CHECK_RESUME_HIJACKING,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,672,297,48,10
+    PUSHBUTTON      "测试",BTN_TEST,663,18,50,14
 END
 
 PAGE_LOG DIALOGEX 0, 0, 732, 322

+ 14 - 7
Source/OGCAssistTool/OGCAssistTool/OGCAssistToolDlg.cpp

@@ -368,17 +368,20 @@ void COGCAssistToolDlg::OnTimer(UINT_PTR nIDEvent)
 				GLOBAL::EnumProcessAllWnd(&GLOBAL::g_procWndInfo);
 				if ( !GLOBAL::g_bHijacted )
 				{
-					if ( g_Injection.GetInjectProcess() )
-					{
-						g_Injection.EjectDynamicLibrary();
-					}
-
 					TCHAR szDll[MAX_PATH] = {0};
 					_stprintf(szDll, _T("%s%s"), GLOBAL::g_szModulePath, _T("OGCAssist.dll"));
 					g_Injection.setInjectionObj(GLOBAL::g_procWndInfo.dwProcId, szDll);
-					GLOBAL::g_bHijacted = g_Injection.InjectDynamicLibrary();
-				}
 
+					// 需要查找OGCAssist.dll是否在目录进程内;
+					if ( GLOBAL::GetModulePath(_T("OGCAssist.dll"), GLOBAL::g_procWndInfo.dwProcId) )
+					{
+						GLOBAL::g_bHijacted = TRUE;						
+					}
+					else 
+					{						
+						GLOBAL::g_bHijacted = g_Injection.InjectDynamicLibrary();
+					}
+				}
 				// 附加窗口句柄;
 				FetchOGCWnd();
 
@@ -389,6 +392,10 @@ void COGCAssistToolDlg::OnTimer(UINT_PTR nIDEvent)
 
 				if ( hWnd = MyFindWindow(_T("TApplication")) )
 					::ShowWindow(hWnd, SW_HIDE);
+#pragma endregion
+
+#pragma region 进程通信:请求状态;
+
 #pragma endregion
 				KillTimer(nIDEvent);
 			}			

+ 53 - 0
Source/OGCAssistTool/OGCAssistTool/PageDebug.cpp

@@ -14,6 +14,7 @@ extern HWND g_hWnd_SN_Combobox;
 extern HWND g_hWnd_Tester;
 extern HWND g_hWnd_FWVersion;
 extern HWND g_hWnd_Channel;
+extern BOOL StartOGCTool();
 // CDlgDebug 对话框
 
 IMPLEMENT_DYNAMIC(CPageDebug, CDialogEx)
@@ -39,6 +40,9 @@ BEGIN_MESSAGE_MAP(CPageDebug, CDialogEx)
 	ON_WM_CTLCOLOR()
 	ON_BN_CLICKED(BTN_SHOW_WND, &CPageDebug::OnBnClickedShowWnd)
 	ON_BN_CLICKED(BTN_HIDE_WND, &CPageDebug::OnBnClickedHideWnd)
+	ON_BN_CLICKED(CHECK_HIJACK, &CPageDebug::OnBnClickedHijack)
+	ON_BN_CLICKED(CHECK_RESUME_HIJACKING, &CPageDebug::OnBnClickedResumeHijacking)
+	ON_BN_CLICKED(BTN_TEST, &CPageDebug::OnBnClickedTest)
 END_MESSAGE_MAP()
 
 
@@ -64,6 +68,8 @@ HBRUSH CPageDebug::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
 	switch ( pWnd->GetDlgCtrlID() ) 
 	{
 	case CHECK_LOCK:
+	case CHECK_HIJACK:
+	case CHECK_RESUME_HIJACKING:
 		{
 #if 1 // 透明控件处理;
 			pDC->SetBkMode(TRANSPARENT);
@@ -142,3 +148,50 @@ void CPageDebug::OnBnClickedHideWnd()
 	if ( hWnd = MyFindWindow(_T("TApplication")) )
 		::ShowWindow(hWnd, SW_HIDE);
 }
+
+void CPageDebug::OnBnClickedHijack()
+{
+	// TODO: 在此添加控件通知处理程序代码
+}
+
+void CPageDebug::OnBnClickedResumeHijacking()
+{
+	// TODO: 在此添加控件通知处理程序代码
+}
+
+void CPageDebug::OnBnClickedTest()
+{
+	// 1、执行一次Connect按钮事件;
+	//// 1.1、Connect成功后, 目标进程会返回消息;
+	//// 1.2、若没有消息返回,需要判断是否在程序启动前已注入过并且Connect过。
+	//// 1.3、要避免2的情况,主进程应该每次启动时,都向目标进程发送消息获取按钮状态。
+	// 2、读取SN长度,设置一次SN长度下拉框;
+	// 3、将SN赋值到目标进程SN编辑框;
+	// 4、执行Go函数;
+	// 5、劫持的Go函数未返回消息时,Test按钮和SN编辑框禁止输入;
+	switch ( StartOGCTool() )
+	{
+	case -1:
+		// 退出新开;
+		break;
+	case 0:
+		// 新开失败;
+		break;
+	case 1:
+		// 新开成功;
+		{
+			AfxGetApp()->GetMainWnd()->SetTimer(0, 500, NULL);
+			MessageBox(_T("OGC程序启动中,请稍后再尝试,谢谢!"), _T("提示"), MB_OK|MB_ICONWARNING);
+			// 向目标发消息,请求获取状态信息;
+		}
+		break;
+	case 2:
+		// 已存在进程;
+		{
+
+		}
+		break;
+	default:
+		break;
+	}
+}

+ 3 - 0
Source/OGCAssistTool/OGCAssistTool/PageDebug.h

@@ -26,4 +26,7 @@ public:
 	void InitListCtrl();
 	afx_msg void OnBnClickedShowWnd();
 	afx_msg void OnBnClickedHideWnd();
+	afx_msg void OnBnClickedHijack();
+	afx_msg void OnBnClickedResumeHijacking();
+	afx_msg void OnBnClickedTest();
 };

+ 2 - 2
Source/OGCAssistTool/OGCAssistTool/resource.h

@@ -33,12 +33,12 @@
 #define IDC_EDIT4                       1008
 #define EDIT_SN                         1008
 #define LIST_DEBUG_DATA                 1009
-#define IDC_EDIT5                       1010
 #define EDIT_ARG_EVALUE                 1010
 #define BTN_HIDE_WND                    1011
 #define CHECK_HIJACK                    1012
 #define BTN_SHOW_WND                    1013
 #define CHECK_RESUME_HIJACKING          1014
+#define BTN_TEST                        1015
 
 // Next default values for new objects
 // 
@@ -46,7 +46,7 @@
 #ifndef APSTUDIO_READONLY_SYMBOLS
 #define _APS_NEXT_RESOURCE_VALUE        133
 #define _APS_NEXT_COMMAND_VALUE         32771
-#define _APS_NEXT_CONTROL_VALUE         1014
+#define _APS_NEXT_CONTROL_VALUE         1016
 #define _APS_NEXT_SYMED_VALUE           101
 #endif
 #endif