|
@@ -39,10 +39,10 @@ void CPageDebug::DoDataExchange(CDataExchange* pDX)
|
|
|
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)
|
|
|
+ ON_BN_CLICKED(BTN_CONNECT, &CPageDebug::OnBnClickedConnect)
|
|
|
+ ON_WM_TIMER()
|
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
|
|
@@ -130,85 +130,189 @@ HWND MyFindWindow(LPCTSTR lpClassName)
|
|
|
void CPageDebug::OnBnClickedShowWnd()
|
|
|
{
|
|
|
// TODO: 在此添加控件通知处理程序代码
|
|
|
- HWND hWnd = NULL;
|
|
|
- if ( hWnd = MyFindWindow(_T("TfrmDemo")) )
|
|
|
- ::ShowWindow(hWnd, SW_SHOW);
|
|
|
-
|
|
|
- if ( hWnd = MyFindWindow(_T("TApplication")) )
|
|
|
- ::ShowWindow(hWnd, SW_SHOW);
|
|
|
+ CString strText;
|
|
|
+ GetDlgItemText(BTN_SHOW_WND, strText);
|
|
|
+ if ( strText == _T("显示窗口") )
|
|
|
+ {
|
|
|
+ ShowOGCWnd(SW_SHOW);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ ShowOGCWnd(SW_HIDE);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
-void CPageDebug::OnBnClickedHideWnd()
|
|
|
+void CPageDebug::OnBnClickedHijack()
|
|
|
{
|
|
|
// TODO: 在此添加控件通知处理程序代码
|
|
|
- HWND hWnd = NULL;
|
|
|
- if ( hWnd = MyFindWindow(_T("TfrmDemo")) )
|
|
|
- ::ShowWindow(hWnd, SW_HIDE);
|
|
|
-
|
|
|
- if ( hWnd = MyFindWindow(_T("TApplication")) )
|
|
|
- ::ShowWindow(hWnd, SW_HIDE);
|
|
|
+ BOOL bCheck = ((CButton*)GetDlgItem(CHECK_HIJACK))->GetCheck();
|
|
|
+ if ( bCheck )
|
|
|
+ {
|
|
|
+ // 劫持窗口;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ // 恢复窗口;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
-void CPageDebug::OnBnClickedHijack()
|
|
|
+void CPageDebug::OnBnClickedTest()
|
|
|
{
|
|
|
- // TODO: 在此添加控件通知处理程序代码
|
|
|
+ if ( GLOBAL::g_procWndInfo.bHijackStatus && GLOBAL::g_procWndInfo.bConnectStatus )
|
|
|
+ {
|
|
|
+ CString strSN;
|
|
|
+ GetDlgItemText(EDIT_SN, strSN);
|
|
|
+ if ( strSN.IsEmpty() )
|
|
|
+ {
|
|
|
+ MessageBox(_T("错误:SN不能空,请输入SN!"), _T("错误!"), MB_ICONERROR);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if ( strSN.GetLength() > 25 )
|
|
|
+ {
|
|
|
+ MessageBox(_T("错误:SN长度不能超过25!"), _T("错误!"), MB_ICONERROR);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 设置SN下拉框长度;
|
|
|
+ if ( g_hWnd_SN_Combobox )
|
|
|
+ {
|
|
|
+ TCHAR szLen[10] = {0};
|
|
|
+ _ltot_s(strSN.GetLength(), szLen, 10, 10);
|
|
|
+ ::SendMessage(g_hWnd_SN_Combobox, CB_SELECTSTRING, 0, (LPARAM)&szLen); // 此方法:设置句柄文本成功;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 设置SN编辑框;
|
|
|
+ if ( g_hWnd_SN )
|
|
|
+ {
|
|
|
+ TCHAR szSN[26] = {0};
|
|
|
+ _stprintf_s(szSN, _T("%s"), strSN.GetString());
|
|
|
+ ::SendMessage(g_hWnd_SN, WM_SETTEXT, 0, (LPARAM)&szSN);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 按钮Go按钮;
|
|
|
+ HWND hWnd = GLOBAL::g_procWndInfo.GetButtonWnd(_T("Go"));
|
|
|
+ if ( hWnd )
|
|
|
+ {
|
|
|
+ ::PostMessage(hWnd, WM_LBUTTONDOWN, 0, 0);
|
|
|
+ Sleep(20);
|
|
|
+ ::PostMessage(hWnd, WM_LBUTTONUP, 0, 0);
|
|
|
+ }
|
|
|
+
|
|
|
+ GetDlgItem(BTN_TEST)->EnableWindow(FALSE);
|
|
|
+ SetTimer(1, 500, NULL);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ MessageBox(_T("未连接设备,请先按“连接设备”按钮!"), _T("提示"), MB_ICONWARNING);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
-void CPageDebug::OnBnClickedResumeHijacking()
|
|
|
+void CPageDebug::OnBnClickedConnect()
|
|
|
{
|
|
|
- // TODO: 在此添加控件通知处理程序代码
|
|
|
+ CString strText;
|
|
|
+ GetDlgItemText(BTN_CONNECT, strText);
|
|
|
+ if ( strText == _T("连接设备") )
|
|
|
+ {
|
|
|
+ // 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:
|
|
|
+ // 已存在进程;
|
|
|
+ {
|
|
|
+ // 执行Connect按钮;
|
|
|
+ if ( GLOBAL::g_procWndInfo.bHijackStatus && !GLOBAL::g_procWndInfo.bConnectStatus )
|
|
|
+ {
|
|
|
+ HWND hWnd = GLOBAL::g_procWndInfo.GetButtonWnd(_T("Connect CA310"));
|
|
|
+ if ( hWnd )
|
|
|
+ {
|
|
|
+ ::PostMessage(hWnd, WM_LBUTTONDOWN, 0, 0);
|
|
|
+ Sleep(20);
|
|
|
+ ::PostMessage(hWnd, WM_LBUTTONUP, 0, 0);
|
|
|
+ }
|
|
|
+
|
|
|
+ SetDlgItemText(BTN_CONNECT, _T("连接中……"));
|
|
|
+ SetTimer(0, 500, NULL);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ MessageBox(_T("设备已连接成功~"), _T("提示!"), MB_OK);
|
|
|
+ SetDlgItemText(BTN_CONNECT, _T("断开设备"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ HWND hWnd = GLOBAL::g_procWndInfo.GetButtonWnd(_T("Disconnect"));
|
|
|
+ if ( hWnd )
|
|
|
+ {
|
|
|
+ ::PostMessage(hWnd, WM_LBUTTONDOWN, 0, 0);
|
|
|
+ Sleep(20);
|
|
|
+ ::PostMessage(hWnd, WM_LBUTTONUP, 0, 0);
|
|
|
+ }
|
|
|
+
|
|
|
+ SetDlgItemText(BTN_CONNECT, _T("连接设备"));
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
-void CPageDebug::OnBnClickedTest()
|
|
|
+void CPageDebug::OnTimer(UINT_PTR nIDEvent)
|
|
|
{
|
|
|
- // 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() )
|
|
|
+ // TODO: 在此添加消息处理程序代码和/或调用默认值
|
|
|
+ switch ( nIDEvent )
|
|
|
{
|
|
|
- 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:
|
|
|
- // 已存在进程;
|
|
|
- {
|
|
|
- // 执行Connect按钮;
|
|
|
- if ( GLOBAL::g_procWndInfo.bHijackStatus && !GLOBAL::g_procWndInfo.bConnectStatus )
|
|
|
+ if ( GLOBAL::g_procWndInfo.bConnectStatus )
|
|
|
{
|
|
|
- HWND hWnd = GLOBAL::g_procWndInfo.GetButtonWnd(_T("Connect CA310"));
|
|
|
+ //GetDlgItem(BTN_CONNECT)->EnableWindow(FALSE);
|
|
|
+ SetDlgItemText(BTN_CONNECT, _T("断开连接"));
|
|
|
+ // 按钮CheckFW按钮;
|
|
|
+ HWND hWnd = GLOBAL::g_procWndInfo.GetButtonWnd(_T("Check FW"));
|
|
|
if ( hWnd )
|
|
|
{
|
|
|
::PostMessage(hWnd, WM_LBUTTONDOWN, 0, 0);
|
|
|
Sleep(20);
|
|
|
::PostMessage(hWnd, WM_LBUTTONUP, 0, 0);
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- // 按钮CheckFW按钮;
|
|
|
-
|
|
|
- // 设置SN下拉框长度;
|
|
|
-
|
|
|
- // 设置SN编辑框;
|
|
|
+ KillTimer(nIDEvent);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 1:
|
|
|
+ {
|
|
|
+ if ( GLOBAL::g_procWndInfo )
|
|
|
+ {
|
|
|
|
|
|
- // 按钮Go按钮;
|
|
|
+ }
|
|
|
}
|
|
|
break;
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
+ CDialogEx::OnTimer(nIDEvent);
|
|
|
}
|