Sfoglia il codice sorgente

1、新增配置项,以便处理测试精灵。
2、将之前红老鼠dll函数指针等放入RedRat命名空间中。
3、新增测试精灵dll命名空间TW.
4、新增界面UI:选择测试精灵串号号、是否启用测试精灵。

scbc.sat2 5 anni fa
parent
commit
5b43922e76

+ 1 - 1
SATHelper/SATHelper/DevicesWnd.cpp

@@ -42,7 +42,7 @@ CDevicesWnd::CDevicesWnd() noexcept
 
 CDevicesWnd::~CDevicesWnd()
 {
-	FreeLogLibarary();	
+	RedRat::UnloadLibrary();	
 }
 
 

+ 12 - 138
SATHelper/SATHelper/Global.cpp

@@ -7,144 +7,6 @@
 #include <WinIoCtl.h>
 #pragma comment(lib, "SetupAPI.lib")
 
-
-//////////////////////////////////////////////////////////////////////////
-// dll相关;
-HMODULE g_hdll = NULL;
-irc_IsAppRunning g_IsAppRunning = NULL;
-irc_StartIRApp g_StartIRApp = NULL;
-irc_CloseApp g_CloseApp = NULL;
-irc_Connect g_Connect = NULL;
-irc_DisConnect g_DisConnect = NULL;
-irc_loadSignalDataSet g_loadSignalDataSet = NULL;
-irc_getDeviceNames g_getDeviceNames = NULL;
-irc_getSignalsName g_getSignalsName = NULL;
-irc_sendSignal g_sendSignal = NULL;
-irc_sendSignals g_sendSignals = NULL;
-irc_sendRepeatsSignal g_sendRepeatsSignal = NULL;
-int g_nIRControl = 0;
-
-BOOL LoadLogLibarary()
-{
-	if (g_hdll == NULL)
-	{
-		g_hdll = (HMODULE)LoadLibrary(_T("IRControl.dll"));
-		if (!g_hdll)
-			return FALSE;
-	}
-
-	g_sendRepeatsSignal = (irc_sendRepeatsSignal)GetProcAddress(g_hdll, "sendRepeatsSignal");
-	if (!g_sendRepeatsSignal)
-	{
-		FreeLogLibarary();
-		return FALSE;
-	}
-
-	g_sendSignals = (irc_sendSignals)GetProcAddress(g_hdll, "sendSignals");
-	if (!g_sendSignals)
-	{
-		FreeLogLibarary();
-		return FALSE;
-	}
-
-	g_sendSignal = (irc_sendSignal)GetProcAddress(g_hdll, "sendSignal");
-	if (!g_sendSignal)
-	{
-		FreeLogLibarary();
-		return FALSE;
-	}
-
-	g_loadSignalDataSet = (irc_loadSignalDataSet)GetProcAddress(g_hdll, "loadSignalDataSet");
-	if (!g_loadSignalDataSet)
-	{
-		FreeLogLibarary();
-		return FALSE;
-	}
-
-	g_IsAppRunning = (irc_IsAppRunning)GetProcAddress(g_hdll, "IsAppRunning");
-	if (!g_IsAppRunning)
-	{
-		FreeLogLibarary();
-		return FALSE;
-	}
-
-	g_StartIRApp = (irc_StartIRApp)GetProcAddress(g_hdll, "StartIRApp");
-	if (!g_StartIRApp)
-	{
-		FreeLogLibarary();
-		return FALSE;
-	}
-
-	g_CloseApp = (irc_CloseApp)GetProcAddress(g_hdll, "CloseApp");
-	if (!g_CloseApp)
-	{
-		FreeLogLibarary();
-		return FALSE;
-	}
-
-	g_getDeviceNames = (irc_getDeviceNames)GetProcAddress(g_hdll, "getDeviceNames");
-	if (!g_getDeviceNames)
-	{
-		FreeLogLibarary();
-		return FALSE;
-	}
-
-	g_Connect = (irc_Connect)GetProcAddress(g_hdll, "Connect");
-	if (!g_Connect)
-	{
-		FreeLogLibarary();
-		return FALSE;
-	}
-
-	g_getSignalsName = (irc_getSignalsName)GetProcAddress(g_hdll, "getSignalsName");
-	if (!g_getSignalsName)
-	{
-		FreeLogLibarary();
-		return FALSE;
-	}
-
-	g_DisConnect = (irc_DisConnect)GetProcAddress(g_hdll, "DisConnect");
-	if (!g_DisConnect)
-	{
-		FreeLogLibarary();
-		return FALSE;
-	}
-
-	// 导出全局变量;
-	g_nIRControl = *(int*)GetProcAddress(g_hdll, "nIRControl");
-	if (!g_CloseApp)
-	{
-		FreeLogLibarary();
-		return FALSE;
-	}
-
-
-	return TRUE;
-}
-
-void FreeLogLibarary()
-{
-	if (g_hdll)
-	{
-		if (FreeLibrary(g_hdll))
-		{
-			g_hdll = NULL;
-			g_IsAppRunning = NULL;
-			g_StartIRApp = NULL;
-			g_CloseApp = NULL;
-			g_Connect = NULL;
-			g_getDeviceNames = NULL;
-			g_getSignalsName = NULL;
-			g_loadSignalDataSet = NULL;
-			g_sendSignal = NULL;
-			g_sendSignals = NULL;
-			g_sendRepeatsSignal = NULL;
-			g_DisConnect = NULL;
-		}
-	}
-}
-//////////////////////////////////////////////////////////////////////////
-
 namespace Global
 {
 	//////////////////////////////////////////////////////////////////////////
@@ -388,6 +250,7 @@ namespace Global
 
 		TCHAR szValue[MAX_PATH] = { 0 };
 		// 读取配置内容;
+		g_Config.enableTW = GetPrivateProfileInt(_T("SATHelper"), _T("enableTW"), 0, szConfigpath);
 		g_Config.bGenerics = GetPrivateProfileInt(_T("ir-device"), _T("generics"), 0, szConfigpath);
 
 		if (PathFileExists(g_szPython27Dir))
@@ -438,6 +301,17 @@ namespace Global
 
 		// 重连周期:分钟为单位;
 		g_Config.nReconnectCycle = GetPrivateProfileInt(_T("UB530"), _T("ReconnectCycle"), 60, szConfigpath);
+
+		//////////////////////////////////////////////////////////////////////////
+		GetPrivateProfileString(_T("TestWizard"), _T("xmlpath"), NULL, szValue, MAX_PATH, szConfigpath);
+		g_Config.twSignaldir = szValue;
+		memset(szValue, 0, MAX_PATH);
+
+		GetPrivateProfileString(_T("TestWizard"), _T("useSignal"), NULL, szValue, MAX_PATH, szConfigpath);
+		g_Config.twUseSignal = szValue;
+		memset(szValue, 0, MAX_PATH);
+
+		g_Config.twPort = GetPrivateProfileInt(_T("TestWizard"), _T("Com"), 0, szConfigpath);
 	}
 
 	BOOL GetOrientation(IN Image* pImg)

+ 8 - 32
SATHelper/SATHelper/Global.h

@@ -21,42 +21,18 @@ typedef string TString;
 typedef wstring TString;
 #endif
 
-//////////////////////////////////////////////////////////////////////////
-// dllÏà¹Ø;
-extern HMODULE g_hdll;
-extern BOOL LoadLogLibarary();
-extern void FreeLogLibarary();
-
-typedef DWORD(*irc_IsAppRunning)(LPCTSTR lpszAppDir);
-typedef bool (*irc_StartIRApp)(LPCTSTR lpszAppDir, LPCTSTR lpSignalXml, DWORD dwPort);
-typedef bool (*irc_CloseApp)();
-typedef bool (*irc_Connect)(LPCTSTR lpServer, int port);
-typedef void (*irc_DisConnect)();
-typedef bool (*irc_loadSignalDataSet)(LPCTSTR lpDatasetXml);
-typedef LPCTSTR(*irc_getDeviceNames)();
-typedef LPCTSTR(*irc_getSignalsName)();
-typedef bool (*irc_sendSignal)(LPCTSTR lpSignal, int send_times, int sleep_time);
-typedef bool (*irc_sendSignals)(LPCTSTR lpSignals, int sleep_time);
-typedef bool (*irc_sendRepeatsSignal)(LPCTSTR lpSignal, int repeat_time);
-
-extern int g_nIRControl;
-extern irc_IsAppRunning g_IsAppRunning;
-extern irc_StartIRApp g_StartIRApp;
-extern irc_CloseApp g_CloseApp;
-extern irc_Connect g_Connect;
-extern irc_DisConnect g_DisConnect;
-extern irc_getDeviceNames g_getDeviceNames;
-extern irc_getSignalsName g_getSignalsName;
-extern irc_loadSignalDataSet g_loadSignalDataSet;
-extern irc_sendSignal g_sendSignal;
-extern irc_sendSignals g_sendSignals;
-extern irc_sendRepeatsSignal g_sendRepeatsSignal;
-//////////////////////////////////////////////////////////////////////////
-
 namespace Global
 {
 	typedef struct __ST_CONFIG__
 	{
+		// ÊÇ·ñÆôÓòâÊÔ¾«Áé;
+		bool enableTW;
+
+		// test wizard
+		int twPort;
+		std::string twSignaldir;
+		std::string twUseSignal;
+
 		// ir-device;
 		std::string redratpath;
 		bool bGenerics;

+ 182 - 100
SATHelper/SATHelper/IRControlWnd.cpp

@@ -63,7 +63,7 @@ CIRControlWnd::CIRControlWnd() noexcept
 
 CIRControlWnd::~CIRControlWnd()
 {
-	FreeLogLibarary();
+	RedRat::UnloadLibrary();
 
 	for (std::vector<BtnInfo>::iterator it = m_vtBtnInfo.begin(); it != m_vtBtnInfo.end(); it++)
 	{
@@ -98,16 +98,17 @@ BEGIN_MESSAGE_MAP(CIRControlWnd, CDockablePane)
 	ON_WM_SETTINGCHANGE()
 	ON_WM_PAINT()
 	ON_MESSAGE(WM_IR_SHOT_IMG, OnIRShotImg)
+	ON_CBN_SELCHANGE(ID_COMBOBOX_SIGNAL_FILE, &CIRControlWnd::OnCbnSelchangeSignal)
 	// 信号按钮;
 	ON_COMMAND_RANGE(BTNID, BTNID + 100, OnSignalBtnClick)
 	ON_UPDATE_COMMAND_UI_RANGE(BTNID, BTNID + 100, OnUpdateSignalBtn)
 	// checkbox
 	ON_UPDATE_COMMAND_UI(ID_CHECKBOX_SIGNAL_TYPE, OnUpdateCheckBox)
 	ON_COMMAND(ID_CHECKBOX_SIGNAL_TYPE, OnCheckBoxClicked)
-	//
-	ON_CBN_SELCHANGE(ID_COMBOBOX_SIGNAL_FILE, &CIRControlWnd::OnCbnSelchangeSignal)
+	// 重启按钮;
 	ON_UPDATE_COMMAND_UI(ID_BUTTON_RESTART_PROC, OnUpdateBtnRestartProc)
 	ON_COMMAND(ID_BUTTON_RESTART_PROC, OnBtnRestartProcClicked)
+	//ON_UPDATE_COMMAND_UI(ID_BUTTON_RESTART_PROC, OnUpdateReStartBtn)
 END_MESSAGE_MAP()
 
 /////////////////////////////////////////////////////////////////////////////
@@ -169,6 +170,7 @@ int CIRControlWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
 		TRACE0("未能创建信号集下拉框 \n");
 		return -1;      // 未能创建
 	}
+
 	LoadSignals();
 
 	CRect rectCombo;
@@ -193,7 +195,7 @@ int CIRControlWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
 
 	//////////////////////////////////////////////////////////////////////////
 	// 启动红老鼠;
-	if (!LoadLogLibarary())
+	if (!RedRat::LoadLibrary())
 	{
 		AfxMessageBox("加载遥控dll失败,请检测dll是否正常!");
 	}
@@ -285,14 +287,21 @@ void CIRControlWnd::OnCbnSelchangeSignal()
 {
 	CString strSignal;
 	int nCurSel = m_wndSignalCombo.GetCurSel();
-	if ( nCurSel != CB_ERR )
+	if (nCurSel != CB_ERR)
 	{
 		std::string signalpath;
 		m_wndSignalCombo.GetLBText(nCurSel, strSignal);
 
 		// 保存到配置文件中;
-		Global::g_Config.use_signal = strSignal.GetString();
-		WritePrivateProfileString("ir-device", "use-signal", strSignal.GetString(), Global::g_szConfig);
+		if (Global::g_Config.enableTW)
+		{
+			Global::g_Config.twUseSignal = strSignal.GetString();
+			WritePrivateProfileString("TestWizard", "useSignal", strSignal.GetString(), Global::g_szConfig);
+		}
+		else {
+			Global::g_Config.use_signal = strSignal.GetString();
+			WritePrivateProfileString("ir-device", "use-signal", strSignal.GetString(), Global::g_szConfig);
+		}
 	}
 
 	DisableSignalBtn();
@@ -324,8 +333,8 @@ void CIRControlWnd::StartIRDevice(BOOL bReStart)
 {
 	std::thread t([&](BOOL _bReStart_) {
 		// 结束进程;
-		if (_bReStart_ && g_CloseApp)
-			g_CloseApp();
+		if (_bReStart_ && RedRat::g_CloseApp)
+			RedRat::g_CloseApp();
 
 		// 默认加载配置的信号集文件;
 		std::string signale = Global::g_Config.bGenerics ? Global::g_Config.signaldir + "\\general\\" : Global::g_Config.signaldir + "\\product\\";
@@ -340,9 +349,9 @@ void CIRControlWnd::StartIRDevice(BOOL bReStart)
 			m_wndSignalCombo.SelectString(0, Global::g_Config.use_signal.c_str());
 		}
 
-		if ( !g_IsAppRunning(Global::g_Config.redratpath.c_str()) )
+		if ( !RedRat::g_IsAppRunning(Global::g_Config.redratpath.c_str()) )
 		{
-			if (g_StartIRApp(Global::g_Config.redratpath.c_str(), signale.c_str(), 40000))
+			if (RedRat::g_StartIRApp(Global::g_Config.redratpath.c_str(), signale.c_str(), 40000))
 			{
 				TRACE("启动红老鼠进程启动成功\r");
 			}
@@ -358,7 +367,7 @@ void CIRControlWnd::StartIRDevice(BOOL bReStart)
 		// 连接服务器;
 		for (int i = 0; i < 5; i++)
 		{
-			if ((bRet = g_Connect(_T("127.0.0.1"), 40000)))
+			if ((bRet = RedRat::g_Connect(_T("127.0.0.1"), 40000)))
 				break;
 			Sleep(1000);
 		}
@@ -369,7 +378,7 @@ void CIRControlWnd::StartIRDevice(BOOL bReStart)
 		// 更新按钮状态;
 		UpdateSignalBtnStatus();
 		// 获取设备列表,以逗号分隔;
-		std::string devices = g_getDeviceNames();
+		std::string devices = RedRat::g_getDeviceNames();
 		if (devices.size() == 0)
 		{
 			AfxMessageBox("当前无红老鼠设备连接!");
@@ -382,74 +391,128 @@ void CIRControlWnd::StartIRDevice(BOOL bReStart)
 
 void CIRControlWnd::ReLoadSignalXml()
 {
-	std::string signaldir,signalpath;
-	if (Global::g_Config.bGenerics)
-	{
-		signaldir = Global::g_Config.signaldir + "\\general\\";
-	}
-	else
-	{
-		signaldir = Global::g_Config.signaldir + "\\product\\";
-	}
-
-	signalpath = signaldir;
-	signalpath.append(Global::g_Config.use_signal + ".xml");
-	if (!PathFileExists(signalpath.c_str()))
+	if (Global::g_Config.enableTW)
 	{
-		AfxMessageBox(_T("该信号文件不存在!"));
-		// 设置默认的;
-		CString strSignal;
-		m_wndSignalCombo.SetCurSel(0);
-		m_wndSignalCombo.GetLBText(0, strSignal);
+		std::string signaldir = Global::g_Config.twSignaldir;
+		std::string signalpath = signaldir;
 
-		signalpath = signaldir;
-		signalpath.append(strSignal.GetString());
-		signalpath.append(".xml");
+		signalpath.append(Global::g_Config.twUseSignal + ".xml");
+		if (!PathFileExists(signalpath.c_str()))
+		{
+			AfxMessageBox(_T("该信号文件不存在!"));
+			// 设置默认的;
+			CString strSignal;
+			m_wndSignalCombo.SetCurSel(0);
+			m_wndSignalCombo.GetLBText(0, strSignal);
+
+			signalpath = signaldir;
+			signalpath.append(strSignal.GetString());
+			signalpath.append(".xml");
+
+			// 保存到配置文件中;
+			Global::g_Config.twUseSignal = strSignal.GetString();
+			WritePrivateProfileString("TestWizard", "useSignal", strSignal.GetString(), Global::g_szConfig);
+		}
+		else // 切换通用类型时用到;
+		{
+			m_wndSignalCombo.SelectString(0, Global::g_Config.twUseSignal.c_str());
+		}
 
-		// 保存到配置文件中;
-		Global::g_Config.use_signal = strSignal.GetString();
-		WritePrivateProfileString("ir-device", "use-signal", strSignal.GetString(), Global::g_szConfig);
-	}
-	else // 切换通用类型时用到;
-	{
-		m_wndSignalCombo.SelectString(0, Global::g_Config.use_signal.c_str());
+		// 加载指定目录的xml信号集文件;
+		if (!TW::LoadXml(signalpath.c_str()))
+		{
+			TRACE("加载信号集文件失败\r");
+		}
+		else
+		{
+			TRACE("加载信号集文件成功\r");
+			UpdateSignalBtnStatus();
+		}
 	}
+	else {
+		std::string signaldir, signalpath;
+		if (Global::g_Config.bGenerics)
+		{
+			signaldir = Global::g_Config.signaldir + "\\general\\";
+		}
+		else
+		{
+			signaldir = Global::g_Config.signaldir + "\\product\\";
+		}
 
-	// 加载指定目录的xml信号集文件;
-	if (!g_loadSignalDataSet(signalpath.c_str()))
-	{
-		TRACE("加载信号集文件失败\r");
-	}
-	else
-	{
-		TRACE("加载信号集文件成功\r");
-		UpdateSignalBtnStatus();
+		signalpath = signaldir;
+		signalpath.append(Global::g_Config.use_signal + ".xml");
+		if (!PathFileExists(signalpath.c_str()))
+		{
+			AfxMessageBox(_T("该信号文件不存在!"));
+			// 设置默认的;
+			CString strSignal;
+			m_wndSignalCombo.SetCurSel(0);
+			m_wndSignalCombo.GetLBText(0, strSignal);
+
+			signalpath = signaldir;
+			signalpath.append(strSignal.GetString());
+			signalpath.append(".xml");
+
+			// 保存到配置文件中;
+			Global::g_Config.use_signal = strSignal.GetString();
+			WritePrivateProfileString("ir-device", "use-signal", strSignal.GetString(), Global::g_szConfig);
+		}
+		else // 切换通用类型时用到;
+		{
+			m_wndSignalCombo.SelectString(0, Global::g_Config.use_signal.c_str());
+		}
+
+		// 加载指定目录的xml信号集文件;
+		if (!RedRat::g_loadSignalDataSet(signalpath.c_str()))
+		{
+			TRACE("加载信号集文件失败\r");
+		}
+		else
+		{
+			TRACE("加载信号集文件成功\r");
+			UpdateSignalBtnStatus();
+		}
 	}
 }
 
 void CIRControlWnd::LoadSignals()
 {
-	filehelper fh;
-	fh.getfiles_findout_subfolder((Global::g_Config.signaldir + "\\general\\").c_str(), NULL, &m_vtsignal_gen);
-	fh.getfiles_findout_subfolder((Global::g_Config.signaldir + "\\product\\").c_str(), NULL, &m_vtsignal_pro);
-
-	// 添加到combobox中;
-	if (Global::g_Config.bGenerics )
+	if (Global::g_Config.enableTW)
 	{
+		filehelper fh;
+		fh.getfiles_findout_subfolder(Global::g_Config.signaldir.c_str(), NULL, &m_vtsignal_tw);
+
 		m_wndSignalCombo.ResetContent();
-		for ( auto it : m_vtsignal_gen)
+		for (auto it : m_vtsignal_tw)
 		{
 			m_wndSignalCombo.AddString(fh.getfilename(it).c_str());
 		}
 	}
 	else
 	{
-		m_wndSignalCombo.ResetContent();
-		for (auto it : m_vtsignal_pro)
+		filehelper fh;
+		fh.getfiles_findout_subfolder((Global::g_Config.signaldir + "\\general\\").c_str(), NULL, &m_vtsignal_gen);
+		fh.getfiles_findout_subfolder((Global::g_Config.signaldir + "\\product\\").c_str(), NULL, &m_vtsignal_pro);
+
+		// 添加到combobox中;
+		if (Global::g_Config.bGenerics)
 		{
-			m_wndSignalCombo.AddString(fh.getfilename(it).c_str());
+			m_wndSignalCombo.ResetContent();
+			for (auto it : m_vtsignal_gen)
+			{
+				m_wndSignalCombo.AddString(fh.getfilename(it).c_str());
+			}
+		}
+		else
+		{
+			m_wndSignalCombo.ResetContent();
+			for (auto it : m_vtsignal_pro)
+			{
+				m_wndSignalCombo.AddString(fh.getfilename(it).c_str());
+			}
 		}
-	}	
+	}
 
 	AutoSetDroppedWidth();
 }
@@ -568,15 +631,21 @@ void CIRControlWnd::OnSignalBtnClick(UINT uId) // 发送遥控信号;
 	{
 		CString text;
 		pWnd->GetWindowText(text);
-		// 发送单信号;
-		if (g_sendSignal(text.GetString(), 1, 20))
+		if (Global::g_Config.enableTW)
 		{
-			m_bSendKey = TRUE;
-			TRACE("发送单信号成功\n");
 		}
-		else
+		else 
 		{
-			TRACE("发送单信号失败\n");
+			// 发送单信号;
+			if (RedRat::g_sendSignal(text.GetString(), 1, 20))
+			{
+				m_bSendKey = TRUE;
+				TRACE("发送单信号成功\n");
+			}
+			else
+			{
+				TRACE("发送单信号失败\n");
+			}
 		}
 	}
 }
@@ -588,40 +657,46 @@ void CIRControlWnd::OnUpdateSignalBtn(CCmdUI* pCmdUI)
 
 void CIRControlWnd::OnUpdateCheckBox(CCmdUI* pCmdUI)
 {
-	pCmdUI->Enable();
+	pCmdUI->Enable(!Global::g_Config.enableTW);
 }
 
 void CIRControlWnd::OnCheckBoxClicked()
 {
-	Global::g_Config.bGenerics = m_wndSignalCheck.IsChecked();
-	// 保存到配置文件中;
-	WritePrivateProfileString("ir-device", "generics", Global::g_Config.bGenerics ? "1" : "0", Global::g_szConfig);
-
-	// 添加到combobox中;
-	if (Global::g_Config.bGenerics)
+	if (Global::g_Config.enableTW)
 	{
-		m_wndSignalCombo.ResetContent();
-		for (auto it : m_vtsignal_gen)
+
+	}
+	else {
+		Global::g_Config.bGenerics = m_wndSignalCheck.IsChecked();
+		// 保存到配置文件中;
+		WritePrivateProfileString("ir-device", "generics", Global::g_Config.bGenerics ? "1" : "0", Global::g_szConfig);
+
+		// 添加到combobox中;
+		if (Global::g_Config.bGenerics)
 		{
-			m_wndSignalCombo.AddString(filehelper::getfilename(it).c_str());
+			m_wndSignalCombo.ResetContent();
+			for (auto it : m_vtsignal_gen)
+			{
+				m_wndSignalCombo.AddString(filehelper::getfilename(it).c_str());
+			}
 		}
-	}
-	else
-	{
-		m_wndSignalCombo.ResetContent();
-		for (auto it : m_vtsignal_pro)
+		else
 		{
-			m_wndSignalCombo.AddString(filehelper::getfilename(it).c_str());
+			m_wndSignalCombo.ResetContent();
+			for (auto it : m_vtsignal_pro)
+			{
+				m_wndSignalCombo.AddString(filehelper::getfilename(it).c_str());
+			}
 		}
+		AutoSetDroppedWidth();
+		DisableSignalBtn();
+		ReLoadSignalXml();
 	}
-	AutoSetDroppedWidth();
-	DisableSignalBtn();
-	ReLoadSignalXml();	
 }
 
 void CIRControlWnd::OnUpdateBtnRestartProc(CCmdUI* pCmdUI)
 {
-	pCmdUI->Enable(TRUE);
+	pCmdUI->Enable(!Global::g_Config.enableTW);
 }
 
 void CIRControlWnd::OnBtnRestartProcClicked() // 重启红老鼠;
@@ -632,22 +707,28 @@ void CIRControlWnd::OnBtnRestartProcClicked() // 重启红老鼠;
 
 void CIRControlWnd::UpdateSignalBtnStatus()
 {
-	// 获取信号集;
-	if (g_getSignalsName )
+	if (Global::g_Config.enableTW)
 	{
-		// 获取信号数据集,以\n分隔;
-		std::string data = g_getSignalsName();
-		CString signals = data.append(1, '\n').c_str();
-		signals.MakeUpper();
-		for ( std::vector<BtnInfo>::iterator it = m_vtBtnInfo.begin(); it != m_vtBtnInfo.end(); it++)
+
+	}
+	else{
+		// 获取信号集;
+		if (RedRat::g_getSignalsName)
 		{
-			if ( signals.Find((it->name+'\n').c_str()) == -1 )
-			{
-				it->bEnable = false;
-			}
-			else
+			// 获取信号数据集,以\n分隔;
+			std::string data = RedRat::g_getSignalsName();
+			CString signals = data.append(1, '\n').c_str();
+			signals.MakeUpper();
+			for (std::vector<BtnInfo>::iterator it = m_vtBtnInfo.begin(); it != m_vtBtnInfo.end(); it++)
 			{
-				it->bEnable = true;
+				if (signals.Find((it->name + '\n').c_str()) == -1)
+				{
+					it->bEnable = false;
+				}
+				else
+				{
+					it->bEnable = true;
+				}
 			}
 		}
 	}
@@ -725,3 +806,4 @@ LRESULT CIRControlWnd::OnIRShotImg(WPARAM wparam, LPARAM lparam)
 	
 	return LRESULT();
 }
+

+ 1 - 0
SATHelper/SATHelper/IRControlWnd.h

@@ -110,6 +110,7 @@ public:
 	std::map<UINT, BtnInfo&> m_map_btn;
 	std::vector<std::string> m_vtsignal_gen;
 	std::vector<std::string> m_vtsignal_pro;
+	std::vector<std::string> m_vtsignal_tw;
 	void LoadSignals();
 	std::vector<BtnInfo> m_vtBtnInfo;
 	void Loadlayout(std::vector<BtnInfo> &vt);

+ 70 - 3
SATHelper/SATHelper/MainFrm.cpp

@@ -92,6 +92,10 @@ BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWndEx)
 	ON_COMMAND(ID_CHECK_WATCHTV, &CMainFrame::OnCheckWatchtv)
 	ON_UPDATE_COMMAND_UI(ID_CHECK_WATCHTV, &CMainFrame::OnUpdateCheckWatchtv)
 	ON_COMMAND(ID_TRAYMENU_LOGIN, &CMainFrame::OnTraymenuLogin)
+	ON_COMMAND(ID_CHECK_ENABLETW, &CMainFrame::OnCheckEnabletw)
+	ON_UPDATE_COMMAND_UI(ID_CHECK_ENABLETW, &CMainFrame::OnUpdateCheckEnabletw)
+	ON_COMMAND(ID_COMBO_TWPORT, &CMainFrame::OnComboTwport)
+	ON_UPDATE_COMMAND_UI(ID_COMBO_TWPORT, &CMainFrame::OnUpdateComboTwport)
 END_MESSAGE_MAP()
 
 // CMainFrame 构造/析构
@@ -375,7 +379,7 @@ int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
 
 	InitDevicePanel();
 
-	SetWindowText(_T("SATHelper 版本4.39.002"));
+	SetWindowText(_T("SATHelper 版本4.39.003"));
 
 	return 0;
 }
@@ -754,12 +758,12 @@ BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)
 			if (bTopWnd == FALSE)
 			{
 				SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);//窗口置顶
-				SetWindowText(_T("SATHelper 版本4.39.002 视频采集卡 - 前置窗口(请按F3取消或开启前置)"));
+				SetWindowText(_T("SATHelper 版本4.39.003 视频采集卡 - 前置窗口(请按F3取消或开启前置)"));
 			}
 			else
 			{
 				SetWindowPos(&wndNoTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);//取消窗口置顶	
-				SetWindowText(_T("SATHelper 版本4.39.002 视频采集卡-取消前置(请按F3取消或开启前置)"));
+				SetWindowText(_T("SATHelper 版本4.39.003 视频采集卡-取消前置(请按F3取消或开启前置)"));
 			}
 
 			bTopWnd = !bTopWnd;
@@ -1056,6 +1060,7 @@ void CMainFrame::InitCombobox_port()
 	CMFCRibbonComboBox* pCommbox1 = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_COMBO1_22293));
 	CMFCRibbonComboBox* pCommbox2 = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_COMBO2_22293));
 	CMFCRibbonComboBox* pCommboxTV = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_COMBO_TVPORT));
+	CMFCRibbonComboBox* pCommboxTW = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_COMBO_TWPORT));
 	for (std::vector<std::string>::iterator it = m_vtCOM.begin(); it != m_vtCOM.end(); it++)
 	{
 		if (!IsPortInserted(pCommbox1, it->c_str()))
@@ -1066,6 +1071,9 @@ void CMainFrame::InitCombobox_port()
 
 		if (!IsPortInserted(pCommboxTV, it->c_str()))
 			pCommboxTV->AddItem(it->c_str());
+
+		if (!IsPortInserted(pCommboxTW, it->c_str()))
+			pCommboxTW->AddItem(it->c_str());
 	}
 
 	if (m_rscfg.chroma1.size())
@@ -1074,6 +1082,12 @@ void CMainFrame::InitCombobox_port()
 		pCommbox2->SelectItem(m_rscfg.chroma2.c_str());
 	if (m_rscfg.tv_port.size())
 		pCommboxTV->SelectItem(m_rscfg.tv_port.c_str());
+	if (Global::g_Config.twPort)
+	{
+		TCHAR szCom[16] = {0};
+		_stprintf_s(szCom, _T("COM%d"), Global::g_Config.twPort);
+		pCommboxTW->SelectItem(szCom);
+	}
 
 }
 
@@ -1591,6 +1605,59 @@ void CMainFrame::OnUpdateCheckWatchtv(CCmdUI* pCmdUI)
 }
 
 
+void CMainFrame::OnCheckEnabletw()
+{
+	// TODO: 在此添加命令处理程序代码
+	CMFCRibbonBar* pRibbon = g_pMainFrame->GetRibbonBar();
+	ASSERT_VALID(pRibbon);
+	CMFCRibbonButton* pCheckEnableTW = DYNAMIC_DOWNCAST(CMFCRibbonButton, pRibbon->FindByID(ID_CHECK_ENABLETW));
+	Global::g_Config.enableTW = !pCheckEnableTW->IsChecked();
+	WritePrivateProfileString(_T("SATHelper"), _T("enableTW"), Global::g_Config.enableTW ? _T("1") : _T("0"), Global::g_szConfig);
+
+	if (Global::g_Config.enableTW)
+		TW::OpenDevice(Global::g_Config.twPort, 115200, 8, 0, 0);
+	else
+		TW::CloseDevice();
+}
+
+
+void CMainFrame::OnUpdateCheckEnabletw(CCmdUI* pCmdUI)
+{
+	// TODO: 在此添加命令更新用户界面处理程序代码
+	pCmdUI->SetCheck(Global::g_Config.enableTW);
+}
+
+
+void CMainFrame::OnComboTwport()
+{
+	// TODO: 在此添加命令处理程序代码
+	// TODO: 在此添加命令处理程序代码
+	CMFCRibbonBar* pRibbon = g_pMainFrame->GetRibbonBar();
+	ASSERT_VALID(pRibbon);
+	CMFCRibbonComboBox* pCombobxTW = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_COMBO_TWPORT));
+
+	// 保存到配置文件中;
+	int nCurSel = pCombobxTW->GetCurSel();
+	if (nCurSel != CB_ERR)
+	{
+		CString strTWPort = pCombobxTW->GetEditText();		
+		Global::g_Config.twPort = _ttol(strTWPort.Mid(3).GetString());
+		WritePrivateProfileString(_T("TestWizard"), _T("Com"), strTWPort.Mid(3).GetString(), Global::g_szConfig);
+
+		if (Global::g_Config.enableTW) {
+			TW::CloseDevice();
+			TW::OpenDevice(Global::g_Config.twPort, 115200, 8, 0, 0);
+		}			
+	}
+}
+
+
+void CMainFrame::OnUpdateComboTwport(CCmdUI* pCmdUI)
+{
+	// TODO: 在此添加命令更新用户界面处理程序代码
+}
+
+
 void CMainFrame::OnTraymenuLogin()
 {
 	// TODO: 在此添加命令处理程序代码

+ 4 - 0
SATHelper/SATHelper/MainFrm.h

@@ -292,6 +292,10 @@ public:
 	afx_msg void OnCheckWatchtv();
 	afx_msg void OnUpdateCheckWatchtv(CCmdUI* pCmdUI);
 	afx_msg void OnTraymenuLogin();
+	afx_msg void OnCheckEnabletw();
+	afx_msg void OnUpdateCheckEnabletw(CCmdUI* pCmdUI);
+	afx_msg void OnComboTwport();
+	afx_msg void OnUpdateComboTwport(CCmdUI* pCmdUI);
 };
 
 

+ 141 - 0
SATHelper/SATHelper/RedRatDLL.cpp

@@ -0,0 +1,141 @@
+#include "stdafx.h"
+#include "RedRatDLL.h"
+
+namespace RedRat {
+	HMODULE g_hdll = NULL;
+
+	irc_IsAppRunning g_IsAppRunning = NULL;
+	irc_StartIRApp g_StartIRApp = NULL;
+	irc_CloseApp g_CloseApp = NULL;
+	irc_Connect g_Connect = NULL;
+	irc_DisConnect g_DisConnect = NULL;
+	irc_loadSignalDataSet g_loadSignalDataSet = NULL;
+	irc_getDeviceNames g_getDeviceNames = NULL;
+	irc_getSignalsName g_getSignalsName = NULL;
+	irc_sendSignal g_sendSignal = NULL;
+	irc_sendSignals g_sendSignals = NULL;
+	irc_sendRepeatsSignal g_sendRepeatsSignal = NULL;
+	int g_nIRControl = 0;
+
+	BOOL LoadLibrary()
+	{
+		if (g_hdll == NULL)
+		{
+			g_hdll = (HMODULE)::LoadLibrary(_T("IRControl.dll"));
+			if (!g_hdll)
+				return FALSE;
+		}
+
+		g_sendRepeatsSignal = (irc_sendRepeatsSignal)GetProcAddress(g_hdll, "sendRepeatsSignal");
+		if (!g_sendRepeatsSignal)
+		{
+			UnloadLibrary();
+			return FALSE;
+		}
+
+		g_sendSignals = (irc_sendSignals)GetProcAddress(g_hdll, "sendSignals");
+		if (!g_sendSignals)
+		{
+			UnloadLibrary();
+			return FALSE;
+		}
+
+		g_sendSignal = (irc_sendSignal)GetProcAddress(g_hdll, "sendSignal");
+		if (!g_sendSignal)
+		{
+			UnloadLibrary();
+			return FALSE;
+		}
+
+		g_loadSignalDataSet = (irc_loadSignalDataSet)GetProcAddress(g_hdll, "loadSignalDataSet");
+		if (!g_loadSignalDataSet)
+		{
+			UnloadLibrary();
+			return FALSE;
+		}
+
+		g_IsAppRunning = (irc_IsAppRunning)GetProcAddress(g_hdll, "IsAppRunning");
+		if (!g_IsAppRunning)
+		{
+			UnloadLibrary();
+			return FALSE;
+		}
+
+		g_StartIRApp = (irc_StartIRApp)GetProcAddress(g_hdll, "StartIRApp");
+		if (!g_StartIRApp)
+		{
+			UnloadLibrary();
+			return FALSE;
+		}
+
+		g_CloseApp = (irc_CloseApp)GetProcAddress(g_hdll, "CloseApp");
+		if (!g_CloseApp)
+		{
+			UnloadLibrary();
+			return FALSE;
+		}
+
+		g_getDeviceNames = (irc_getDeviceNames)GetProcAddress(g_hdll, "getDeviceNames");
+		if (!g_getDeviceNames)
+		{
+			UnloadLibrary();
+			return FALSE;
+		}
+
+		g_Connect = (irc_Connect)GetProcAddress(g_hdll, "Connect");
+		if (!g_Connect)
+		{
+			UnloadLibrary();
+			return FALSE;
+		}
+
+		g_getSignalsName = (irc_getSignalsName)GetProcAddress(g_hdll, "getSignalsName");
+		if (!g_getSignalsName)
+		{
+			UnloadLibrary();
+			return FALSE;
+		}
+
+		g_DisConnect = (irc_DisConnect)GetProcAddress(g_hdll, "DisConnect");
+		if (!g_DisConnect)
+		{
+			UnloadLibrary();
+			return FALSE;
+		}
+
+		// µ¼³öÈ«¾Ö±äÁ¿;
+		g_nIRControl = *(int*)GetProcAddress(g_hdll, "nIRControl");
+		if (!g_CloseApp)
+		{
+			UnloadLibrary();
+			return FALSE;
+		}
+
+
+		return TRUE;
+	}
+
+	void UnloadLibrary()
+	{
+		if (g_hdll)
+		{
+			if (FreeLibrary(g_hdll))
+			{
+				g_hdll = NULL;
+				g_IsAppRunning = NULL;
+				g_StartIRApp = NULL;
+				g_CloseApp = NULL;
+				g_Connect = NULL;
+				g_getDeviceNames = NULL;
+				g_getSignalsName = NULL;
+				g_loadSignalDataSet = NULL;
+				g_sendSignal = NULL;
+				g_sendSignals = NULL;
+				g_sendRepeatsSignal = NULL;
+				g_DisConnect = NULL;
+			}
+		}
+	}
+
+	
+}

+ 39 - 0
SATHelper/SATHelper/RedRatDLL.h

@@ -0,0 +1,39 @@
+#ifndef __REDRAT_HEADER__
+#define __REDRAT_HEADER__
+
+namespace RedRat {
+	extern HMODULE g_hdll;
+	extern BOOL LoadLibrary();
+	extern void UnloadLibrary();
+
+	//////////////////////////////////////////////////////////////////////////
+	// 定义函数指针;
+	typedef DWORD(*irc_IsAppRunning)(LPCTSTR lpszAppDir);
+	typedef bool (*irc_StartIRApp)(LPCTSTR lpszAppDir, LPCTSTR lpSignalXml, DWORD dwPort);
+	typedef bool (*irc_CloseApp)();
+	typedef bool (*irc_Connect)(LPCTSTR lpServer, int port);
+	typedef void (*irc_DisConnect)();
+	typedef bool (*irc_loadSignalDataSet)(LPCTSTR lpDatasetXml);
+	typedef LPCTSTR(*irc_getDeviceNames)();
+	typedef LPCTSTR(*irc_getSignalsName)();
+	typedef bool (*irc_sendSignal)(LPCTSTR lpSignal, int send_times, int sleep_time);
+	typedef bool (*irc_sendSignals)(LPCTSTR lpSignals, int sleep_time);
+	typedef bool (*irc_sendRepeatsSignal)(LPCTSTR lpSignal, int repeat_time);
+
+
+	//////////////////////////////////////////////////////////////////////////
+	// 声明函数指针;
+	extern int g_nIRControl;
+	extern irc_IsAppRunning g_IsAppRunning;
+	extern irc_StartIRApp g_StartIRApp;
+	extern irc_CloseApp g_CloseApp;
+	extern irc_Connect g_Connect;
+	extern irc_DisConnect g_DisConnect;
+	extern irc_getDeviceNames g_getDeviceNames;
+	extern irc_getSignalsName g_getSignalsName;
+	extern irc_loadSignalDataSet g_loadSignalDataSet;
+	extern irc_sendSignal g_sendSignal;
+	extern irc_sendSignals g_sendSignals;
+	extern irc_sendRepeatsSignal g_sendRepeatsSignal;
+};
+#endif

+ 8 - 5
SATHelper/SATHelper/Resource.h

@@ -1,6 +1,6 @@
-//{{NO_DEPENDENCIES}}
-// Microsoft Visual C++ 生�的包�文件。
-// 供 SATHelper.rc 使用
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ Éú³ÉµÄ°üº¬Îļþ¡£
+// ¹© SATHelper.rc ʹÓÃ
 //
 #define IDD_ABOUTBOX                    100
 #define IDP_OLE_INIT_FAILED             100
@@ -169,6 +169,7 @@
 #define ID_COMBO2_22293                 32803
 #define ID_CHECK2_22293                 32804
 #define ID_COMBO_TVPORT                 32805
+#define ID_COMBO_TWPORT                 32811
 #define ID_COMBO1_22293                 32806
 #define ID_CHECK1_22293                 32807
 #define ID_CHECK_SHOT_SPEC              32818
@@ -176,15 +177,17 @@
 #define ID_CHECK_SHOT_SYSTEM            32820
 #define ID_CHECK_IR_SHOT                32823
 #define ID_CHECK2                       32824
-#define ID_CHECK_WATCHTV                32824
+#define ID_CHECK_WATCHTV                32809
+#define ID_CHECK_ENABLETW               32810
 #define ID_TRAYMENU_LOGIN               32825
+#define ID_BUTTON2                      32827
 
 // Next default values for new objects
 // 
 #ifdef APSTUDIO_INVOKED
 #ifndef APSTUDIO_READONLY_SYMBOLS
 #define _APS_NEXT_RESOURCE_VALUE        326
-#define _APS_NEXT_COMMAND_VALUE         32826
+#define _APS_NEXT_COMMAND_VALUE         32828
 #define _APS_NEXT_CONTROL_VALUE         1015
 #define _APS_NEXT_SYMED_VALUE           310
 #endif

+ 3 - 0
SATHelper/SATHelper/SATHelper.cpp

@@ -151,6 +151,9 @@ BOOL CSATHelperApp::InitInstance()
 	
 	Global::WriteTextLog("程序启动");
 
+	TW::LoadLibrary();
+	RedRat::LoadLibrary();
+
 	// 启动TCP客户端;
 	if (CSATClient::GetInstance()->Start())
 	{

+ 3 - 11
SATHelper/SATHelper/SATHelper.ini

@@ -5,18 +5,10 @@ enableTW=0
 [TestWizard]
 ;串口号
 Com=7
-;波特率
-BaudRate=115200
-;数据位
-ByteSize=8
-;校验位
-Parity=0
-;停止位
-StopBits=0
 ;信号集路径
 xmlpath=D:\SAT\resource\RCU
 ;使用的信号集;
-use-signal=G_NA_00BF_IR
+useSignal=G_NA_00BF_IR
 
 [ir-device]
 ;4.0路径
@@ -26,7 +18,7 @@ generics=0
 ;信号集路径
 signal=D:\SAT\resource\RCU
 ;使用的信号集;
-use-signal=G_AP_6122A_0722_BT
+use-signal=defualt
 
 [SATService]
 ;用户名
@@ -44,4 +36,4 @@ ServicePort=5699
 
 [UB530]
 AutoReconnect=0
-ReconnectCycle=180
+ReconnectCycle=180

File diff suppressed because it is too large
+ 0 - 3
SATHelper/SATHelper/SATHelper.rc


+ 4 - 0
SATHelper/SATHelper/SATHelper.vcxproj

@@ -232,6 +232,7 @@
     <ClInclude Include="MemoryDef.h" />
     <ClInclude Include="OutputWnd.h" />
     <ClInclude Include="QCAP.H" />
+    <ClInclude Include="RedRatDLL.h" />
     <ClInclude Include="SATClient.h" />
     <ClInclude Include="SATData.h" />
     <ClInclude Include="SATProtocol.h" />
@@ -246,6 +247,7 @@
     <ClInclude Include="stdint.h" />
     <ClInclude Include="SynSerial.h" />
     <ClInclude Include="targetver.h" />
+    <ClInclude Include="TestWizardDLL.h" />
     <ClInclude Include="tinyxml2.h" />
     <ClInclude Include="TrayIcon.h" />
     <ClInclude Include="UB530View.h" />
@@ -286,6 +288,7 @@
     <ClCompile Include="MemoryClient.cpp" />
     <ClCompile Include="MemoryComm.cpp" />
     <ClCompile Include="OutputWnd.cpp" />
+    <ClCompile Include="RedRatDLL.cpp" />
     <ClCompile Include="SATClient.cpp" />
     <ClCompile Include="SATData.cpp" />
     <ClCompile Include="SocketHandle.cpp" />
@@ -300,6 +303,7 @@
     <ClCompile Include="SATHelperDoc.cpp" />
     <ClCompile Include="SATHelperView.cpp" />
     <ClCompile Include="SynSerial.cpp" />
+    <ClCompile Include="TestWizardDLL.cpp" />
     <ClCompile Include="tinyxml2.cpp">
       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>

+ 12 - 0
SATHelper/SATHelper/SATHelper.vcxproj.filters

@@ -210,6 +210,12 @@
     <ClInclude Include="DlgService.h">
       <Filter>头文件</Filter>
     </ClInclude>
+    <ClInclude Include="TestWizardDLL.h">
+      <Filter>头文件</Filter>
+    </ClInclude>
+    <ClInclude Include="RedRatDLL.h">
+      <Filter>头文件</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="SATHelper.cpp">
@@ -344,6 +350,12 @@
     <ClCompile Include="DlgService.cpp">
       <Filter>源文件</Filter>
     </ClCompile>
+    <ClCompile Include="TestWizardDLL.cpp">
+      <Filter>源文件</Filter>
+    </ClCompile>
+    <ClCompile Include="RedRatDLL.cpp">
+      <Filter>源文件</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ResourceCompile Include="SATHelper.rc">

+ 109 - 0
SATHelper/SATHelper/TestWizardDLL.cpp

@@ -0,0 +1,109 @@
+#include "stdafx.h"
+#include "TestWizardDLL.h"
+
+namespace TW {
+	HMODULE g_hdll = NULL;
+
+	OPEN_XML OpenXml = NULL;
+	LOAD_XML LoadXml = NULL;
+	ADD_ITEM AddItem = NULL;
+	DEL_ITEM DelItem = NULL;
+	REMOVEALL_ITEM RemoveAllItem = NULL;
+	SAVE_XML Save2Xml = NULL;
+	OPEN_DEVICE OpenDevice = NULL;
+	CLOSE_DEVICE CloseDevice = NULL;
+	SEND_KEY SendKey = NULL;
+
+	BOOL LoadLibrary() 
+	{
+		if (g_hdll == NULL) {
+			g_hdll = (HMODULE)::LoadLibrary(_T("TestWizard.dll"));
+			if (!g_hdll)
+				return FALSE;
+		}
+
+		OpenXml = (OPEN_XML)GetProcAddress(g_hdll, "OpenXML");
+		if (!OpenXml)
+		{
+			UnloadLibrary();
+			return FALSE;
+		}
+
+		LoadXml = (LOAD_XML)GetProcAddress(g_hdll, "LoadXML");
+		if (!LoadXml)
+		{
+			UnloadLibrary();
+			return FALSE;
+		}
+
+		AddItem = (ADD_ITEM)GetProcAddress(g_hdll, "AddItem");
+		if (!AddItem)
+		{
+			UnloadLibrary();
+			return FALSE;
+		}
+
+		DelItem = (DEL_ITEM)GetProcAddress(g_hdll, "DelItem");
+		if (!DelItem)
+		{
+			UnloadLibrary();
+			return FALSE;
+		}
+
+		RemoveAllItem = (REMOVEALL_ITEM)GetProcAddress(g_hdll, "RemoveAllItem");
+		if (!RemoveAllItem)
+		{
+			UnloadLibrary();
+			return FALSE;
+		}
+
+		Save2Xml = (SAVE_XML)GetProcAddress(g_hdll, "Save2XML");
+		if (!Save2Xml)
+		{
+			UnloadLibrary();
+			return FALSE;
+		}
+
+		OpenDevice = (OPEN_DEVICE)GetProcAddress(g_hdll, "OpenDevice");
+		if (!OpenDevice)
+		{
+			UnloadLibrary();
+			return FALSE;
+		}
+
+		CloseDevice = (CLOSE_DEVICE)GetProcAddress(g_hdll, "CloseDevice");
+		if (!CloseDevice)
+		{
+			UnloadLibrary();
+			return FALSE;
+		}
+
+		SendKey = (SEND_KEY)GetProcAddress(g_hdll, "SendKey");
+		if (!SendKey)
+		{
+			UnloadLibrary();
+			return FALSE;
+		}
+
+		return TRUE;
+	}
+
+	void UnloadLibrary()
+	{
+		if (g_hdll) {
+			if (FreeLibrary(g_hdll)) {
+				g_hdll = NULL;
+
+				OpenXml = NULL;
+				LoadXml = NULL;
+				AddItem = NULL;
+				DelItem = NULL;
+				RemoveAllItem = NULL;
+				Save2Xml = NULL;
+				OpenDevice = NULL;
+				CloseDevice = NULL;
+				SendKey = NULL;
+			}
+		}
+	}
+}

+ 36 - 0
SATHelper/SATHelper/TestWizardDLL.h

@@ -0,0 +1,36 @@
+#ifndef __TW_HEADER__
+#define __TW_HEADER__
+
+namespace TW {
+	extern HMODULE g_hTWdll;
+	extern BOOL LoadLibrary();
+	extern void UnloadLibrary();
+
+	//////////////////////////////////////////////////////////////////////////
+	// 定义函数指针;
+	typedef int(WINAPI *OPEN_XML)(LPCTSTR lpXMLPath);
+	typedef int(*LOAD_XML)(LPCTSTR lpXMLPath);
+	typedef void(*ADD_ITEM)(LPCTSTR lpKeyName, LPCTSTR lpKeyDesc, LPCTSTR lpKeyType, LPCTSTR lpKeyCode);
+	typedef void(*DEL_ITEM)(LPCTSTR lpXMLPath);
+	typedef void(*REMOVEALL_ITEM)();
+	// FindItem可以不对外;
+	typedef void(*SAVE_XML)(LPCTSTR lpXMLPath);
+	typedef BOOL(*OPEN_DEVICE)(int nPort, DWORD dwBaudrate, BYTE ByteSize, BYTE Parity, BYTE StopBits);
+	typedef void(*CLOSE_DEVICE)();
+	typedef bool(*SEND_KEY)(LPCTSTR lpKeyName);
+
+	//////////////////////////////////////////////////////////////////////////
+	// 声明函数指针;
+	extern OPEN_XML OpenXml;
+	extern LOAD_XML LoadXml;
+	extern ADD_ITEM AddItem;
+	extern DEL_ITEM DelItem;
+	extern REMOVEALL_ITEM RemoveAllItem;
+	extern SAVE_XML Save2Xml;
+	extern OPEN_DEVICE OpenDevice;
+	extern CLOSE_DEVICE CloseDevice;
+	extern SEND_KEY SendKey;
+};
+
+
+#endif

+ 52 - 6
SATHelper/SATHelper/res/ribbon.mfcribbon-ms

@@ -47,7 +47,7 @@
                 </ID>
             </IMAGE_LARGE>
             <ELEMENTS>
-				<ELEMENT>
+                <ELEMENT>
                     <ELEMENT_NAME>Button</ELEMENT_NAME>
                     <ID>
                         <NAME>ID_TRAYMENU_LOGIN</NAME>
@@ -74,11 +74,11 @@
                     <INDEX_LARGE>8</INDEX_LARGE>
                     <DEFAULT_COMMAND>TRUE</DEFAULT_COMMAND>
                     <ALWAYS_DESCRIPTION>FALSE</ALWAYS_DESCRIPTION>
-                </ELEMENT>           
+                </ELEMENT>
                 <ELEMENT>
                     <ELEMENT_NAME>Separator</ELEMENT_NAME>
                     <HORIZ>TRUE</HORIZ>
-                </ELEMENT>              
+                </ELEMENT>
                 <ELEMENT>
                     <ELEMENT_NAME>Button_Main_Panel</ELEMENT_NAME>
                     <ID>
@@ -1010,7 +1010,7 @@
                     </PANEL>
                     <PANEL>
                         <ELEMENT_NAME>Panel</ELEMENT_NAME>
-                        <NAME>电视串口</NAME>
+                        <NAME>电视相关</NAME>
                         <INDEX>-1</INDEX>
                         <JUSTIFY_COLUMNS>TRUE</JUSTIFY_COLUMNS>
                         <CENTER_COLUMN_VERT>TRUE</CENTER_COLUMN_VERT>
@@ -1050,9 +1050,55 @@
                                         <ELEMENT_NAME>Button_Check</ELEMENT_NAME>
                                         <ID>
                                             <NAME>ID_CHECK_WATCHTV</NAME>
-                                            <VALUE>32824</VALUE>
+                                            <VALUE>32809</VALUE>
+                                        </ID>
+                                        <TEXT>TV宕机监听</TEXT>
+                                        <PALETTE_TOP>FALSE</PALETTE_TOP>
+                                        <ALWAYS_LARGE>FALSE</ALWAYS_LARGE>
+                                        <INDEX_SMALL>-1</INDEX_SMALL>
+                                        <INDEX_LARGE>-1</INDEX_LARGE>
+                                        <DEFAULT_COMMAND>TRUE</DEFAULT_COMMAND>
+                                    </ELEMENT>
+                                </ELEMENTS>
+                            </ELEMENT>
+                            <ELEMENT>
+                                <ELEMENT_NAME>Group</ELEMENT_NAME>
+                                <ELEMENTS>
+                                    <ELEMENT>
+                                        <ELEMENT_NAME>Label</ELEMENT_NAME>
+                                        <TEXT>测试精灵:</TEXT>
+                                        <PALETTE_TOP>FALSE</PALETTE_TOP>
+                                        <ALWAYS_LARGE>FALSE</ALWAYS_LARGE>
+                                        <INDEX_SMALL>-1</INDEX_SMALL>
+                                        <INDEX_LARGE>-1</INDEX_LARGE>
+                                        <DEFAULT_COMMAND>TRUE</DEFAULT_COMMAND>
+                                    </ELEMENT>
+                                    <ELEMENT>
+                                        <ELEMENT_NAME>ComboBox</ELEMENT_NAME>
+                                        <ID>
+                                            <NAME>ID_COMBO_TWPORT</NAME>
+                                            <VALUE>32811</VALUE>
+                                        </ID>
+                                        <TEXT>Combo1</TEXT>
+                                        <PALETTE_TOP>FALSE</PALETTE_TOP>
+                                        <ALWAYS_LARGE>FALSE</ALWAYS_LARGE>
+                                        <INDEX_SMALL>-1</INDEX_SMALL>
+                                        <INDEX_LARGE>-1</INDEX_LARGE>
+                                        <DEFAULT_COMMAND>TRUE</DEFAULT_COMMAND>
+                                        <WIDTH>50</WIDTH>
+                                        <WIDTH_FLOATY>50</WIDTH_FLOATY>
+                                        <SPIN_BUTTONS>FALSE</SPIN_BUTTONS>
+                                        <EDIT_BOX>FALSE</EDIT_BOX>
+                                        <DROPDOWN_LIST>TRUE</DROPDOWN_LIST>
+                                        <DROPDOWN_LIST_RESIZE>TRUE</DROPDOWN_LIST_RESIZE>
+                                    </ELEMENT>
+                                    <ELEMENT>
+                                        <ELEMENT_NAME>Button_Check</ELEMENT_NAME>
+                                        <ID>
+                                            <NAME>ID_CHECK_ENABLETW</NAME>
+                                            <VALUE>32810</VALUE>
                                         </ID>
-                                        <TEXT>监听</TEXT>
+                                        <TEXT>启用精灵</TEXT>
                                         <PALETTE_TOP>FALSE</PALETTE_TOP>
                                         <ALWAYS_LARGE>FALSE</ALWAYS_LARGE>
                                         <INDEX_SMALL>-1</INDEX_SMALL>

+ 8 - 5
SATHelper/SATHelper/resource.h

@@ -1,6 +1,6 @@
-//{{NO_DEPENDENCIES}}
-// Microsoft Visual C++ 生�的包�文件。
-// 供 SATHelper.rc 使用
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ Éú³ÉµÄ°üº¬Îļþ¡£
+// ¹© SATHelper.rc ʹÓÃ
 //
 #define IDD_ABOUTBOX                    100
 #define IDP_OLE_INIT_FAILED             100
@@ -169,6 +169,7 @@
 #define ID_COMBO2_22293                 32803
 #define ID_CHECK2_22293                 32804
 #define ID_COMBO_TVPORT                 32805
+#define ID_COMBO_TWPORT                 32811
 #define ID_COMBO1_22293                 32806
 #define ID_CHECK1_22293                 32807
 #define ID_CHECK_SHOT_SPEC              32818
@@ -176,15 +177,17 @@
 #define ID_CHECK_SHOT_SYSTEM            32820
 #define ID_CHECK_IR_SHOT                32823
 #define ID_CHECK2                       32824
-#define ID_CHECK_WATCHTV                32824
+#define ID_CHECK_WATCHTV                32809
+#define ID_CHECK_ENABLETW               32810
 #define ID_TRAYMENU_LOGIN               32825
+#define ID_BUTTON2                      32827
 
 // Next default values for new objects
 // 
 #ifdef APSTUDIO_INVOKED
 #ifndef APSTUDIO_READONLY_SYMBOLS
 #define _APS_NEXT_RESOURCE_VALUE        326
-#define _APS_NEXT_COMMAND_VALUE         32826
+#define _APS_NEXT_COMMAND_VALUE         32828
 #define _APS_NEXT_CONTROL_VALUE         1015
 #define _APS_NEXT_SYMED_VALUE           310
 #endif

+ 3 - 0
SATHelper/SATHelper/stdafx.h

@@ -85,4 +85,7 @@ typedef struct __CAPTURE_INFO__
 
 #include <Dbt.h>	// 设备头文件;
 
+#include "RedRatDLL.h"
+#include "TestWizardDLL.h"
+
 #endif //PCH_H

Some files were not shown because too many files changed in this diff