TCL Copy Tool.cpp 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. 
  2. // TCL Tools.cpp: 定义应用程序的类行为。
  3. //
  4. #include "pch.h"
  5. #include "framework.h"
  6. #include "TCL Copy Tool.h"
  7. #include "TCL Copy ToolDlg.h"
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #endif
  11. // CTCLToolsApp
  12. BEGIN_MESSAGE_MAP(CTCLToolsApp, CWinApp)
  13. ON_COMMAND(ID_HELP, &CWinApp::OnHelp)
  14. END_MESSAGE_MAP()
  15. // CTCLToolsApp 构造
  16. CTCLToolsApp::CTCLToolsApp()
  17. {
  18. // 支持重新启动管理器
  19. m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART;
  20. // TODO: 在此处添加构造代码,
  21. // 将所有重要的初始化放置在 InitInstance 中
  22. }
  23. // 唯一的 CTCLToolsApp 对象
  24. CTCLToolsApp theApp;
  25. // CTCLToolsApp 初始化
  26. BOOL CTCLToolsApp::InitInstance()
  27. {
  28. // TODO: 调用 AfxInitRichEdit2() 以初始化 richedit2 库。\n" // 如果一个运行在 Windows XP 上的应用程序清单指定要
  29. // 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式,
  30. //则需要 InitCommonControlsEx()。 否则,将无法创建窗口。
  31. INITCOMMONCONTROLSEX InitCtrls;
  32. InitCtrls.dwSize = sizeof(InitCtrls);
  33. // 将它设置为包括所有要在应用程序中使用的
  34. // 公共控件类。
  35. InitCtrls.dwICC = ICC_WIN95_CLASSES;
  36. InitCommonControlsEx(&InitCtrls);
  37. AfxInitRichEdit2();
  38. CWinApp::InitInstance();
  39. #if 1
  40. // 获取模块的目录;
  41. TCHAR szDrive[MAX_PATH] = { 0 };
  42. TCHAR szDir[MAX_PATH] = { 0 };
  43. TCHAR szExt[MAX_PATH] = { 0 };
  44. ::GetModuleFileName(NULL, Global::g_szCurModulePath, sizeof(Global::g_szCurModulePath) / sizeof(TCHAR));
  45. _tsplitpath_s(Global::g_szCurModulePath, szDrive, szDir, Global::g_szFna, szExt);
  46. _tcscpy_s(Global::g_szCurModuleDir, szDrive);
  47. _tcscat_s(Global::g_szCurModuleDir, szDir);
  48. // config文件路径;
  49. _stprintf_s(Global::g_szConfig, _T("%sconfig.ini"), Global::g_szCurModuleDir);
  50. // 日志模板;
  51. char szFileName[MAX_PATH];
  52. sprintf_s(szFileName, "%s\\log4crc.xml", Global::g_szCurModuleDir);
  53. ///设置日志配置文件名
  54. LOG4C_PARAM_CFG_FILE_NAME(szFileName);
  55. ///设置日志级别
  56. LOG4C_PARAM_LOG_LEVEL("unknown");
  57. ///设置日志文件大小
  58. LOG4C_PARAM_LOG_FILE_SIZE(1024*1024*10);
  59. ///设置生成日志文件个数,达到最大个数将自动覆盖最旧的日志
  60. LOG4C_PARAM_LOG_FILE_NUM(100);
  61. ///设置每次记录日志都重新读取日志配置文件
  62. LOG4C_PARAM_REREAD_LOG_CFG_FILE(1);
  63. ///带参数日志模块初始化,以上所有设置了的参数都将生效,没有设置的采用缺省值
  64. LOG4C_INIT_WITH_PARAM();
  65. #if 0 // 等级示例;
  66. LOG4C((LOG_FATAL, "LOG_FATAL!"));
  67. LOG4C((LOG_ALERT, "LOG_ALERT!"));
  68. LOG4C((LOG_CRIT, "LOG_CRIT!"));
  69. LOG4C((LOG_ERROR, "LOG_ERROR!"));
  70. LOG4C((LOG_WARN, "LOG_WARN!"));
  71. LOG4C((LOG_NOTICE, "LOG_NOTICE!"));
  72. LOG4C((LOG_INFO, "LOG_INFO!"));
  73. LOG4C((LOG_DEBUG, "LOG_DEBUG!"));
  74. LOG4C((LOG_TRACE, "LOG_TRACE!"));
  75. LOG4C((LOG_NOTSET, "LOG_NOTSET!"));
  76. LOG4C((LOG_UNKNOWN, "LOG_UNKNOWN!"));
  77. #endif
  78. LOG4C((LOG_NOTICE, "程序开始运行!"));
  79. #endif
  80. Global::GetConfig();
  81. Global::GetMacAddress();
  82. AfxEnableControlContainer();
  83. if (g_db.Open())
  84. g_db.RemoveReportInfo();
  85. // 启动线程上报;
  86. std::thread t([]() {
  87. std::string xml;
  88. std::vector<STReport> vt;
  89. while (true)
  90. {
  91. vt.clear();
  92. g_db.QueryUnReportInfo(vt);
  93. for (auto it: vt)
  94. {
  95. if ( g_ota.GetKeyInfo(it.url, it.content, "", "", xml) )
  96. {
  97. // 上报成功;
  98. g_db.UpdateKeyReportStatus(it);
  99. }
  100. std::this_thread::sleep_for(std::chrono::microseconds(500));
  101. }
  102. std::this_thread::sleep_for(std::chrono::seconds(10));
  103. }
  104. });
  105. t.detach();
  106. //std::string vcode;
  107. //g_ota.GetVCode("CC-A1-2B-03-09-13", vcode);
  108. // 创建 shell 管理器,以防对话框包含
  109. // 任何 shell 树视图控件或 shell 列表视图控件。
  110. CShellManager *pShellManager = new CShellManager;
  111. // 激活“Windows Native”视觉管理器,以便在 MFC 控件中启用主题
  112. CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));
  113. // 标准初始化
  114. // 如果未使用这些功能并希望减小
  115. // 最终可执行文件的大小,则应移除下列
  116. // 不需要的特定初始化例程
  117. // 更改用于存储设置的注册表项
  118. // TODO: 应适当修改该字符串,
  119. // 例如修改为公司或组织名
  120. SetRegistryKey(_T("应用程序向导生成的本地应用程序"));
  121. CTCLCopyToolDlg dlg;
  122. m_pMainWnd = &dlg;
  123. INT_PTR nResponse = dlg.DoModal();
  124. if (nResponse == IDOK)
  125. {
  126. // TODO: 在此放置处理何时用
  127. // “确定”来关闭对话框的代码
  128. }
  129. else if (nResponse == IDCANCEL)
  130. {
  131. // TODO: 在此放置处理何时用
  132. // “取消”来关闭对话框的代码
  133. }
  134. else if (nResponse == -1)
  135. {
  136. TRACE(traceAppMsg, 0, "警告: 对话框创建失败,应用程序将意外终止。\n");
  137. TRACE(traceAppMsg, 0, "警告: 如果您在对话框上使用 MFC 控件,则无法 #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS。\n");
  138. }
  139. // 删除上面创建的 shell 管理器。
  140. if (pShellManager != nullptr)
  141. {
  142. delete pShellManager;
  143. }
  144. #if !defined(_AFXDLL) && !defined(_AFX_NO_MFC_CONTROLS_IN_DIALOGS)
  145. ControlBarCleanUp();
  146. #endif
  147. // 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序,
  148. // 而不是启动应用程序的消息泵。
  149. return FALSE;
  150. }
  151. int CTCLToolsApp::ExitInstance()
  152. {
  153. // TODO: 在此添加专用代码和/或调用基类
  154. g_db.Close();
  155. g_siacp.CloseComm();
  156. return CWinApp::ExitInstance();
  157. }