|
@@ -11,6 +11,13 @@
|
|
|
#endif
|
|
|
|
|
|
|
|
|
+// OGC Tool无序句柄;
|
|
|
+HWND g_hWnd_SN = NULL;
|
|
|
+HWND g_hWnd_SN_Combobox = NULL;
|
|
|
+HWND g_hWnd_Tester = NULL;
|
|
|
+HWND g_hWnd_FWVersion = NULL;
|
|
|
+HWND g_hWnd_Channel = NULL;
|
|
|
+
|
|
|
// 用于应用程序“关于”菜单项的 CAboutDlg 对话框
|
|
|
|
|
|
class CAboutDlg : public CDialog
|
|
@@ -55,8 +62,9 @@ CInjectDLLDlg::CInjectDLLDlg(CWnd* pParent /*=NULL*/)
|
|
|
|
|
|
void CInjectDLLDlg::DoDataExchange(CDataExchange* pDX)
|
|
|
{
|
|
|
- CDialog::DoDataExchange(pDX);
|
|
|
- DDX_Control(pDX, COMBO_PROCESS, m_cbProcess);
|
|
|
+ CDialog::DoDataExchange(pDX);
|
|
|
+ DDX_Control(pDX, COMBO_PROCESS, m_cbProcess);
|
|
|
+ DDX_Control(pDX, COMBOX_BTN_NAME, m_cbBtnName);
|
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CInjectDLLDlg, CDialog)
|
|
@@ -69,6 +77,8 @@ BEGIN_MESSAGE_MAP(CInjectDLLDlg, CDialog)
|
|
|
ON_BN_CLICKED(BTN_REFLESH, &CInjectDLLDlg::OnBnClickedReflesh)
|
|
|
ON_BN_CLICKED(BTN_HIDE_WND, &CInjectDLLDlg::OnBnClickedHideWnd)
|
|
|
ON_BN_CLICKED(BTN_SHOW_WND, &CInjectDLLDlg::OnBnClickedShowWnd)
|
|
|
+ ON_BN_CLICKED(BTN_TEST, &CInjectDLLDlg::OnBnClickedTest)
|
|
|
+ ON_BN_CLICKED(BTN_SETDATA, &CInjectDLLDlg::OnBnClickedSetdata)
|
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
|
|
@@ -197,6 +207,7 @@ void CInjectDLLDlg::InitCommbox()
|
|
|
{
|
|
|
m_vtProInfo.clear();
|
|
|
m_cbProcess.ResetContent();
|
|
|
+ m_wndData.vtWndInfo.clear();
|
|
|
// 获取全部进程到Commbox;
|
|
|
FindAllProcess(m_vtProInfo);
|
|
|
|
|
@@ -210,9 +221,26 @@ void CInjectDLLDlg::InitCommbox()
|
|
|
#ifdef _DEBUG
|
|
|
TRACE3("%ld-%s:%p\n", it->dwProId, it->strProName.c_str(), *it);
|
|
|
#endif
|
|
|
- }
|
|
|
+ }
|
|
|
+
|
|
|
+ if ( (nIndex = m_cbProcess.SelectString(0, _T("Demo"))) != -1 )
|
|
|
+ {
|
|
|
+ ProInfo *ptr = (ProInfo*)m_cbProcess.GetItemDataPtr(nIndex);
|
|
|
+ if ( ptr )
|
|
|
+ {
|
|
|
+ m_wndData.dwPid = ptr->dwProId;
|
|
|
+ EnumProcessAllWnd(&m_wndData);
|
|
|
+ for (std::vector<WNDINFO>::iterator it = m_wndData.vtWndInfo.begin(); it != m_wndData.vtWndInfo.end(); it++ )
|
|
|
+ {
|
|
|
+ if ( _tcscmp(it->szClassName, _T("TButton")) == 0 )
|
|
|
+ {
|
|
|
+ m_cbBtnName.AddString(it->szWndTitle);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- m_cbProcess.SelectString(0, _T("Demo"));
|
|
|
+ FetchOGCWnd();
|
|
|
}
|
|
|
|
|
|
CString CInjectDLLDlg::OpenInectDLL()
|
|
@@ -265,23 +293,32 @@ void CInjectDLLDlg::OnBnClickedHideWnd()
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- ProInfo *ptr = (ProInfo*)m_cbProcess.GetItemDataPtr(nCurSel);
|
|
|
- if ( ptr )
|
|
|
- {
|
|
|
- WNDDATA wndData;
|
|
|
- wndData.dwPid = ptr->dwProId;
|
|
|
- EnumProcessAllWnd(&wndData);
|
|
|
- g_hCurrentProWnd = GetProcessMainWnd(ptr->dwProId, _T("Demo"));
|
|
|
- //g_hCurrentProWnd = GetProcessMainWnd(ptr->dwProId, NULL);
|
|
|
- if ( g_hCurrentProWnd )
|
|
|
- {//(TPV 2021/09/29) UHD Series OGC Tool V2.21.1.3
|
|
|
- // Demo是多窗口程序,Demo是最外层的影子窗口,Spy++无法直接获取;
|
|
|
- g_hCurrentProWnd2 = GetProcessMainWnd(ptr->dwProId, _T("(TPV 2021/09/29) UHD Series OGC Tool V2.21.1.3"));
|
|
|
- ::ShowWindow(g_hCurrentProWnd2, SW_HIDE);
|
|
|
- ::ShowWindow(g_hCurrentProWnd, SW_HIDE);
|
|
|
- //ShowInTaskbar(g_hCurrentProWnd, FALSE);
|
|
|
- }
|
|
|
- }
|
|
|
+ HWND hWnd = NULL;
|
|
|
+ if ( hWnd = FindWindow(_T("TfrmDemo")) )
|
|
|
+ ::ShowWindow(hWnd, SW_HIDE);
|
|
|
+
|
|
|
+ if ( hWnd = FindWindow(_T("TApplication")) )
|
|
|
+ ::ShowWindow(hWnd, SW_HIDE);
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+HWND CInjectDLLDlg::FindWindow(LPCTSTR lpClassName)
|
|
|
+{
|
|
|
+ HWND hWnd = NULL;
|
|
|
+ if ( lpClassName == NULL || lpClassName[0] == '\0' )
|
|
|
+ return hWnd;
|
|
|
+
|
|
|
+ for (std::vector<WNDINFO>::iterator it = m_wndData.vtWndInfo.begin(); it != m_wndData.vtWndInfo.end(); it++ )
|
|
|
+ {
|
|
|
+ // 返回第一个找到的类名;
|
|
|
+ if ( _tcscmp(lpClassName, it->szClassName) == 0 )
|
|
|
+ {
|
|
|
+ hWnd = it->hWnd;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return hWnd;
|
|
|
}
|
|
|
|
|
|
void CInjectDLLDlg::OnBnClickedShowWnd()
|
|
@@ -294,14 +331,118 @@ void CInjectDLLDlg::OnBnClickedShowWnd()
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- ProInfo *ptr = (ProInfo*)m_cbProcess.GetItemDataPtr(nCurSel);
|
|
|
- if ( ptr )
|
|
|
- {
|
|
|
- if ( g_hCurrentProWnd )
|
|
|
- {
|
|
|
- ::ShowWindow(g_hCurrentProWnd, SW_SHOW);
|
|
|
- ::ShowWindow(g_hCurrentProWnd2, SW_SHOW);
|
|
|
- //ShowInTaskbar(g_hCurrentProWnd, TRUE);
|
|
|
- }
|
|
|
- }
|
|
|
+ HWND hWnd = NULL;
|
|
|
+ if ( hWnd = FindWindow(_T("TfrmDemo")) )
|
|
|
+ ::ShowWindow(hWnd, SW_SHOW);
|
|
|
+
|
|
|
+ if ( hWnd = FindWindow(_T("TApplication")) )
|
|
|
+ ::ShowWindow(hWnd, SW_SHOW);
|
|
|
}
|
|
|
+
|
|
|
+void CInjectDLLDlg::OnBnClickedTest()
|
|
|
+{
|
|
|
+ TCHAR szBtnName[MAX_PATH] = {0};
|
|
|
+ INT nCurSel = m_cbBtnName.GetCurSel();
|
|
|
+ if ( nCurSel == CB_ERR )
|
|
|
+ {
|
|
|
+ MessageBox(_T("请选择要测试的按钮名称"), _T("提醒"), MB_ICONWARNING);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ m_cbBtnName.GetLBText(nCurSel, szBtnName);
|
|
|
+
|
|
|
+ // TODO: 在此添加控件通知处理程序代码
|
|
|
+ HWND hWnd = NULL;
|
|
|
+ for ( std::vector<WNDINFO>::iterator it = m_wndData.vtWndInfo.begin(); it != m_wndData.vtWndInfo.end(); it++ )
|
|
|
+ {
|
|
|
+ if ( _tcscmp(it->szWndTitle, szBtnName) == 0 )
|
|
|
+ {
|
|
|
+ hWnd = it->hWnd;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if ( hWnd )
|
|
|
+ {
|
|
|
+ ::PostMessage(hWnd, WM_LBUTTONDOWN, 0, 0);
|
|
|
+ Sleep(20);
|
|
|
+ ::PostMessage(hWnd, WM_LBUTTONUP, 0, 0);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ AfxMessageBox(_T("没有找到控件句柄"));
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void CInjectDLLDlg::OnBnClickedSetdata()
|
|
|
+{
|
|
|
+ // TODO: 在此添加控件通知处理程序代码
|
|
|
+ UINT dwAddr = GetDlgItemInt(TX_ID);
|
|
|
+ TCHAR szData[MAX_PATH] = {0};
|
|
|
+ GetDlgItemText(TX_DATA, szData, MAX_PATH);
|
|
|
+ BOOL bIsDropList = ((CButton*)GetDlgItem(CH_DROPLIST))->GetCheck();
|
|
|
+
|
|
|
+ if ( dwAddr != -1 )
|
|
|
+ {
|
|
|
+ //WNDINFO &info = m_wndData.vtWndInfo.at(nID);
|
|
|
+
|
|
|
+ //::SetWindowText(info.hWnd, szData); // 此方法:设置句柄文本失败;
|
|
|
+ //::SendMessage(info.hWnd, WM_SETTEXT, 0, (LPARAM)&szData); // 此方法:设置句柄文本成功;
|
|
|
+ if ( bIsDropList )
|
|
|
+ ::SendMessage(HWND(dwAddr), CB_SELECTSTRING, 0, (LPARAM)&szData); // 此方法:设置句柄文本成功;
|
|
|
+ else
|
|
|
+ ::SendMessage(HWND(dwAddr), WM_SETTEXT, 0, (LPARAM)&szData); // 此方法:设置句柄文本成功;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void CInjectDLLDlg::FetchOGCWnd()
|
|
|
+{
|
|
|
+ // SN Combobox;
|
|
|
+ for(std::vector<WNDINFO>::iterator it = m_wndData.vtWndInfo.begin(); it != m_wndData.vtWndInfo.end(); it++ )
|
|
|
+ {
|
|
|
+ if ( _tcscmp(_T("TfrmDemo"), it->szClassName) == 0 )
|
|
|
+ {
|
|
|
+ g_hWnd_SN_Combobox = (++it)->hWnd;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // SN Edit && Tester;
|
|
|
+ for(std::vector<WNDINFO>::iterator it = m_wndData.vtWndInfo.begin(); it != m_wndData.vtWndInfo.end(); it++ )
|
|
|
+ {
|
|
|
+ if ( !_tcscmp(_T("OCC"), it->szWndTitle) && !_tcscmp(_T("TCheckBox"), it->szClassName) )
|
|
|
+ {
|
|
|
+ g_hWnd_SN = (--it)->hWnd;
|
|
|
+ g_hWnd_Tester = (--it)->hWnd;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // Channel Edit;
|
|
|
+ for(std::vector<WNDINFO>::iterator it = m_wndData.vtWndInfo.begin(); it != m_wndData.vtWndInfo.end(); it++ )
|
|
|
+ {
|
|
|
+ if ( !_tcscmp(_T("Connect CA310"), it->szWndTitle) && !_tcscmp(_T("TButton"), it->szClassName) )
|
|
|
+ {
|
|
|
+ g_hWnd_Channel = (--it)->hWnd;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // FW Version;
|
|
|
+ for(std::vector<WNDINFO>::iterator it = m_wndData.vtWndInfo.begin(); it != m_wndData.vtWndInfo.end(); it++ )
|
|
|
+ {
|
|
|
+ if ( !_tcscmp(_T("FS2"), it->szWndTitle) && !_tcscmp(_T("TCheckBox"), it->szClassName) )
|
|
|
+ {
|
|
|
+ g_hWnd_FWVersion = (--it)->hWnd;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+#ifdef _DEBUG
|
|
|
+ TCHAR szMsg[MAX_PATH] = {0};
|
|
|
+ //_stprintf(szMsg, _T("Channel=%08X, SN=%08X, Combobox=%08X, Tester=%08X, FWVersion=%08X\n"), g_hWnd_Channel, g_hWnd_SN, g_hWnd_SN_Combobox, g_hWnd_Tester, g_hWnd_FWVersion);
|
|
|
+ _stprintf(szMsg, _T("Channel=%ld, SN=%ld, Combobox=%ld, Tester=%ld, FWVersion=%ld\n"), g_hWnd_Channel, g_hWnd_SN, g_hWnd_SN_Combobox, g_hWnd_Tester, g_hWnd_FWVersion);
|
|
|
+ //TRACE(szMsg);
|
|
|
+ WriteTextLog(szMsg);
|
|
|
+#endif
|
|
|
+}
|