guitask.cpp 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591
  1. #include "SpBase.h"
  2. #include "guitask.h"
  3. struct callback_entry : public IReleasable
  4. {
  5. virtual ~callback_entry() {}
  6. CSimpleStringA EntityName;
  7. union {
  8. void* pRawData;
  9. int state;
  10. };
  11. int op;
  12. ErrorCodeEnum ErrorResult;
  13. };
  14. #define OP_START_ENTITY 1
  15. #define OP_STOP_ENTITY 0
  16. #define OP_PAUSE_ENTITY 2
  17. #define OP_TERMINATE_ENTITY 3
  18. #define OP_CONTINUE_ENTITY 4
  19. #define OP_FIRE_ENTITY_STATE 5
  20. GUITask::GUITask() : m_pEntity(NULL), m_hWndMainFrame(NULL), m_hThread(NULL)
  21. {
  22. m_hEventStartReady = ::CreateEventA(NULL, TRUE, FALSE, NULL);
  23. m_hEventStopReady = ::CreateEventA(NULL, TRUE, FALSE, NULL);
  24. }
  25. GUITask::~GUITask()
  26. {
  27. CloseHandle(m_hEventStopReady);
  28. CloseHandle(m_hEventStartReady);
  29. }
  30. GUITask g_task;
  31. namespace rpcFunc
  32. {
  33. bool StartEntity(rpc_conn conn, std::string entityName)
  34. {
  35. ErrorCodeEnum Error = g_task.AsyncStartEntity(entityName.c_str(), NULL, NULL);
  36. if (Error == Error_Succeed) {
  37. Dbg("startEntiy %s success!!", entityName.c_str());
  38. return true;
  39. }
  40. Dbg("start %s failed, error = 0x%08X\r\n", entityName.c_str(), Error);
  41. return false;
  42. }
  43. bool StopEntity(rpc_conn conn, std::string entityName)
  44. {
  45. ErrorCodeEnum Error = g_task.AsyncStopEntity(entityName.c_str(), NULL);
  46. if (Error == Error_Succeed) {
  47. Dbg("StopEntity %s success!!", entityName.c_str());
  48. return true;
  49. }
  50. Dbg("stop %s failed, error = 0x%08X\r\n", entityName.c_str(), Error);
  51. return false;
  52. }
  53. bool PauseEntity(rpc_conn conn, std::string entityName)
  54. {
  55. ErrorCodeEnum Error = g_task.AsyncPauseEntity(entityName.c_str(), NULL);
  56. if (Error == Error_Succeed) {
  57. Dbg("PauseEntity %s success!!", entityName.c_str());
  58. return true;
  59. }
  60. Dbg("pause %s failed, error = 0x%08X\r\n", entityName.c_str(), Error);
  61. return false;
  62. }
  63. bool ContinueEntity(rpc_conn conn, std::string entityName)
  64. {
  65. ErrorCodeEnum Error = g_task.AsyncContinueEntity(entityName.c_str(), NULL);
  66. if (Error == Error_Succeed) {
  67. Dbg("ContinueEntity %s success!!", entityName.c_str());
  68. return true;
  69. }
  70. Dbg("continue %s failed, error = 0x%08X\r\n", entityName.c_str(), Error);
  71. return false;
  72. }
  73. bool TerminateEntity(rpc_conn conn, std::string entityName)
  74. {
  75. ErrorCodeEnum Error = g_task.AsyncTerminateEntity(entityName.c_str(), NULL);
  76. if (Error == Error_Succeed) {
  77. Dbg("TerminateEntity %s success!!", entityName.c_str());
  78. return true;
  79. }
  80. Dbg("Terminate %s failed, error = 0x%08X\r\n", entityName.c_str(), Error);
  81. return false;
  82. }
  83. template <class T> std::vector<T> autoArryTovector(const CAutoArray<T>* p)
  84. {
  85. std::vector<T> dst;
  86. for (size_t i = 0; p != nullptr && i < p->GetCount(); i++)
  87. dst.push_back(*p[i]);
  88. return dst;
  89. }
  90. EntityEntryPlusVec GetAllEntity(rpc_conn conn)
  91. {
  92. CAutoArray<EntityEntry> Entities;
  93. ErrorCodeEnum Error = g_task.GetAllEntity(Entities);
  94. if (Error == Error_Succeed)
  95. Dbg("GetAllEntity success!!, entityNum:%d", Entities.GetCount());
  96. else
  97. Dbg("GetAllEntity failed, error = 0x%08X\r\n", Error);
  98. std::vector<EntityEntryPlus> dst;
  99. for (size_t i = 0; i < Entities.GetCount(); i++)
  100. dst.push_back({ Entities[i].Name.GetData(), Entities[i].ModuleName.GetData(), Entities[i].Type, Entities[i].State, Entities[i].Id, Entities[i].Pid, Entities[i].DevelopID, Entities[i].DebugLevel });
  101. EntityEntryPlusVec ret;
  102. ret.entityArr = dst;
  103. return ret;
  104. }
  105. }
  106. using namespace rpcFunc;
  107. bool GUITask::openrpcServer(int port)
  108. {
  109. std::thread thd([&] {
  110. m_server.reset(new rpc_server(port, std::thread::hardware_concurrency()));
  111. m_server->register_handler("StartEntity", StartEntity);
  112. m_server->register_handler("StopEntity", StopEntity);
  113. m_server->register_handler("PauseEntity", PauseEntity);
  114. m_server->register_handler("ContinueEntity", ContinueEntity);
  115. m_server->register_handler("TerminateEntity", TerminateEntity);
  116. m_server->register_handler("GetAllEntity", rpcFunc::GetAllEntity);
  117. m_server->register_handler("publish", [&](rpc_conn conn, std::string key, std::string token, std::string val) {
  118. m_server->publish(std::move(key), std::move(val));
  119. });
  120. m_server->run();
  121. });
  122. thd.detach();
  123. Dbg("rpc start, async run");
  124. return true;
  125. }
  126. void GUITask::publishMsg(outputMsg out)
  127. {
  128. m_server->publish("outMsg", out);
  129. }
  130. template<class TFirst, class... TOther>
  131. void outputMsgToGUI(const char* format, TFirst&& first, TOther&&... other)
  132. {
  133. auto msg = string_format(format, first, other);
  134. g_task.publishMsg({ "togui", 4 /*Debug*/, 1 /*Low*/, 0, 0, msg });
  135. }
  136. ErrorCodeEnum GUITask::RegistEntityStateEvent()
  137. {
  138. CSmartPointer<IEntityFunction> pFunc = m_pEntity->GetFunction();
  139. CSmartPointer<IEntityFunctionPrivilege> pFuncPrivilege = pFunc.ConvertCase<IEntityFunctionPrivilege>();
  140. if (pFuncPrivilege != NULL) {
  141. return pFuncPrivilege->RegistEntityStateEvent(NULL, this); // NULL to register for all
  142. } else {
  143. return Error_NoPrivilege;
  144. }
  145. }
  146. ErrorCodeEnum GUITask::UnregistEntityStateEvent()
  147. {
  148. CSmartPointer<IEntityFunction> pFunc = m_pEntity->GetFunction();
  149. CSmartPointer<IEntityFunctionPrivilege> pFuncPrivilege = pFunc.ConvertCase<IEntityFunctionPrivilege>();
  150. if (pFuncPrivilege != NULL)
  151. return pFuncPrivilege->UnregistEntityStateEvent(NULL);
  152. else
  153. return Error_NoPrivilege;
  154. }
  155. ErrorCodeEnum GUITask::ReqFrameworkQuit(bool bRebootOS)
  156. {
  157. CSmartPointer<IEntityFunction> pFunc = m_pEntity->GetFunction();
  158. CSmartPointer<IEntityFunctionPrivilege> pFuncPrivilege = pFunc.ConvertCase<IEntityFunctionPrivilege>();
  159. if (pFuncPrivilege != NULL)
  160. return pFuncPrivilege->Reboot(RebootTrigger_ManualLocal, bRebootOS ? RebootWay_OS : RebootWay_Framework );
  161. return Error_Unexpect;
  162. }
  163. ErrorCodeEnum GUITask::SubscribeLog()
  164. {
  165. return m_pEntity->GetFunction()->SubscribeLog(m_logSubID, this, Log_Ignore, Severity_None, Error_IgnoreAll, -2, NULL, false);
  166. }
  167. ErrorCodeEnum GUITask::UnSubscribeLog()
  168. {
  169. if ((__int64)m_logSubID != 0)
  170. {
  171. m_pEntity->GetFunction()->UnsubscribeLog(m_logSubID);
  172. m_logSubID = 0;
  173. }
  174. return Error_Succeed;
  175. }
  176. ErrorCodeEnum GUITask::SetDebugLevel(const char *pszEntity, int nLevel)
  177. {
  178. return m_pEntity->GetFunction()->GetPrivilegeFunction()->SetSysDebugLevel(pszEntity, (DebugLevelEnum)nLevel, true);
  179. }
  180. ErrorCodeEnum GUITask::GetShellDebugLevel(int &nLevel)
  181. {
  182. CSystemRunInfo info ={};
  183. auto rc = m_pEntity->GetFunction()->GetSystemRunInfo(info);
  184. if (rc == Error_Succeed)
  185. nLevel = info.eDebugLevel;
  186. return rc;
  187. }
  188. ErrorCodeEnum GUITask::BeginAccessAuth()
  189. {
  190. return Error_Succeed;
  191. }
  192. ErrorCodeEnum GUITask::BeginInitialize()
  193. {
  194. return Error_Succeed;
  195. }
  196. ErrorCodeEnum GUITask::DeleteKeySet()
  197. {
  198. return Error_Succeed;
  199. }
  200. ErrorCodeEnum GUITask::GetFrameworkInfo(CSimpleStringA &strInfo)
  201. {
  202. CSystemStaticInfo info;
  203. memset(&info, 0, sizeof(info));
  204. auto rc = m_pEntity->GetFunction()->GetSystemStaticInfo(info);
  205. if (rc == Error_Succeed)
  206. strInfo = CSimpleStringA::Format("[%s] [%s]", (const char*) info.strTerminalID, (const char*)info.InstallVersion.ToString());
  207. return rc;
  208. }
  209. void GUITask::Kickoff(CEntityBase* pEntity)
  210. {
  211. m_pEntity = pEntity;
  212. RegistEntityStateEvent();
  213. }
  214. ErrorCodeEnum GUITask::AsyncStartEntity(const char *entity_name, const char *cmdline, void *pData)
  215. {
  216. CSmartPointer<IEntityFunction> pFunc = m_pEntity->GetFunction();
  217. CSmartPointer<IEntityFunctionPrivilege> pFuncPrivilege = pFunc.ConvertCase<IEntityFunctionPrivilege>();
  218. if (pFuncPrivilege != NULL) {
  219. CSmartPointer<IAsynWaitSp> spWait;
  220. ErrorCodeEnum Error = pFuncPrivilege->StartEntity(entity_name, cmdline, spWait);
  221. if (Error == Error_Succeed) {
  222. callback_entry *entry = new callback_entry();
  223. entry->pRawData = pData;
  224. entry->EntityName = entity_name;
  225. entry->ErrorResult = Error_Unexpect;
  226. entry->op = OP_START_ENTITY;
  227. spWait->SetCallback(this, entry);
  228. }
  229. return Error;
  230. } else {
  231. return Error_NoPrivilege;
  232. }
  233. }
  234. ErrorCodeEnum GUITask::AsyncStopEntity(const char *entity_name, void *pData)
  235. {
  236. CSmartPointer<IEntityFunction> pFunc = m_pEntity->GetFunction();
  237. CSmartPointer<IEntityFunctionPrivilege> pFuncPrivilege = pFunc.ConvertCase<IEntityFunctionPrivilege>();
  238. if (pFuncPrivilege != NULL) {
  239. CSmartPointer<IAsynWaitSp> spWait;
  240. ErrorCodeEnum Error = pFuncPrivilege->StopEntity(entity_name, spWait);
  241. if (Error == Error_Succeed) {
  242. callback_entry *entry = new callback_entry();
  243. entry->pRawData = pData;
  244. entry->EntityName = entity_name;
  245. entry->ErrorResult = Error_Unexpect;
  246. entry->op = OP_STOP_ENTITY;
  247. spWait->SetCallback(this, entry);
  248. }
  249. return Error;
  250. } else {
  251. return Error_NoPrivilege;
  252. }
  253. }
  254. ErrorCodeEnum GUITask::AsyncPauseEntity(const char *entity_name, void *pData)
  255. {
  256. CSmartPointer<IEntityFunction> pFunc = m_pEntity->GetFunction();
  257. CSmartPointer<IEntityFunctionPrivilege> pFuncPrivilege = pFunc.ConvertCase<IEntityFunctionPrivilege>();
  258. if (pFuncPrivilege != NULL) {
  259. CSmartPointer<IAsynWaitSp> spWait;
  260. ErrorCodeEnum Error = pFuncPrivilege->PauseEntity(entity_name, spWait);
  261. if (Error == Error_Succeed) {
  262. callback_entry *entry = new callback_entry();
  263. entry->pRawData = pData;
  264. entry->EntityName = entity_name;
  265. entry->ErrorResult = Error_Unexpect;
  266. entry->op = OP_PAUSE_ENTITY;
  267. spWait->SetCallback(this, entry);
  268. }
  269. return Error;
  270. } else {
  271. return Error_NoPrivilege;
  272. }
  273. }
  274. ErrorCodeEnum GUITask::AsyncContinueEntity(const char *entity_name, void *pData)
  275. {
  276. CSmartPointer<IEntityFunction> pFunc = m_pEntity->GetFunction();
  277. CSmartPointer<IEntityFunctionPrivilege> pFuncPrivilege = pFunc.ConvertCase<IEntityFunctionPrivilege>();
  278. if (pFuncPrivilege != NULL) {
  279. CSmartPointer<IAsynWaitSp> spWait;
  280. ErrorCodeEnum Error = pFuncPrivilege->ContinueEntity(entity_name, spWait);
  281. if (Error == Error_Succeed) {
  282. callback_entry *entry = new callback_entry();
  283. entry->pRawData = pData;
  284. entry->EntityName = entity_name;
  285. entry->ErrorResult = Error_Unexpect;
  286. entry->op = OP_CONTINUE_ENTITY;
  287. spWait->SetCallback(this, entry);
  288. }
  289. return Error;
  290. } else {
  291. return Error_NoPrivilege;
  292. }
  293. }
  294. ErrorCodeEnum GUITask::AsyncTerminateEntity(const char *entity_name, void *pData)
  295. {
  296. CSmartPointer<IEntityFunction> pFunc = m_pEntity->GetFunction();
  297. CSmartPointer<IEntityFunctionPrivilege> pFuncPrivilege = pFunc.ConvertCase<IEntityFunctionPrivilege>();
  298. if (pFuncPrivilege != NULL) {
  299. CSmartPointer<IAsynWaitSp> spWait;
  300. ErrorCodeEnum Error = pFuncPrivilege->TerminateEntity(entity_name, spWait);
  301. if (Error == Error_Succeed) {
  302. callback_entry *entry = new callback_entry();
  303. entry->pRawData = pData;
  304. entry->EntityName = entity_name;
  305. entry->ErrorResult = Error_Unexpect;
  306. entry->op = OP_TERMINATE_ENTITY;
  307. spWait->SetCallback(this, entry);
  308. }
  309. return Error;
  310. } else {
  311. return Error_NoPrivilege;
  312. }
  313. }
  314. ErrorCodeEnum GUITask::GetAllEntity(CAutoArray<EntityEntry> &Entities)
  315. {
  316. CSmartPointer<IEntityFunction> spFunc = m_pEntity->GetFunction();
  317. CAutoArray<CSimpleStringA> strEntityNames;
  318. CAutoArray<WORD> wDevelopIDs;
  319. ErrorCodeEnum Error = spFunc->GetAllRegistedEntity(strEntityNames, wDevelopIDs);
  320. if (Error == Error_Succeed) {
  321. Entities.Init(strEntityNames.GetCount());
  322. for (int i = 0; i < strEntityNames.GetCount(); ++i)
  323. Error = GetEntity(strEntityNames[i], Entities[i]);
  324. }
  325. return Error;
  326. }
  327. ErrorCodeEnum GUITask::GetEntity(const char *entity_name, EntityEntry &e)
  328. {
  329. CSmartPointer<IEntityFunction> spFunc = m_pEntity->GetFunction();
  330. LOG_ASSERT(spFunc != NULL);
  331. CEntityStaticInfo StaticInfo;
  332. CEntityRunInfo RunInfo;
  333. ErrorCodeEnum Error = spFunc->GetEntityStaticInfo(entity_name, StaticInfo);
  334. if (Error == Error_Succeed) {
  335. Error = spFunc->GetEntityRunInfo(entity_name, RunInfo);
  336. if (Error == Error_Succeed) {
  337. e.Name = entity_name;
  338. e.Id = RunInfo.dwEntityInstanceID;
  339. e.ModuleName = _GetFileName(StaticInfo.strSpFileName);
  340. e.State = RunInfo.eState;
  341. e.Type = StaticInfo.bStartedByShell ? 0 : 1;
  342. e.Pid = (int)RunInfo.dwProcessID;
  343. e.DevelopID = (int)StaticInfo.wEntityDevelopID;
  344. e.DebugLevel = RunInfo.eDebugLevel;
  345. }
  346. }
  347. return Error;
  348. }
  349. ErrorCodeEnum GUITask::GetCustomizeStartMenuList(CAutoArray<StartMenuEntry> &StartItems)
  350. {
  351. CSmartPointer<IEntityFunction> spFunc = m_pEntity->GetFunction();
  352. CSmartPointer<IConfigInfo> spConfig;
  353. LOG_ASSERT(spFunc != NULL);
  354. int cnt = 0;
  355. ErrorCodeEnum Error = spFunc->OpenConfig(Config_Software, spConfig);
  356. if (Error != Error_Succeed)
  357. return Error;
  358. Error = spConfig->ReadConfigValueInt("StartMenu", "Number", cnt);
  359. if (Error != Error_Succeed)
  360. return Error;
  361. StartItems.Init(cnt);
  362. for (int i = 0; i < cnt; ++i) {
  363. char tmp[128];
  364. CSimpleStringA strValue;
  365. _itoa(i+1, tmp, 10);
  366. Error = spConfig->ReadConfigValue("StartMenu", tmp, strValue);
  367. const char *p = strValue;
  368. if (Error != Error_Succeed || p == NULL || strValue.GetLength() == 0)
  369. break;
  370. int kk = 0;
  371. while (*p && *p != ' ') {
  372. tmp[kk++] = *p;
  373. p++;
  374. }
  375. tmp[kk] = 0;
  376. StartItems[i].strEntity = tmp;
  377. while (*p && *p == ' ')
  378. p++;
  379. if (*p) {
  380. StartItems[i].strCmdLine = p;
  381. } else {
  382. StartItems[i].strCmdLine = "";
  383. }
  384. }
  385. return Error;
  386. }
  387. void GUITask::OnAnswer(CSmartPointer<IAsynWaitSp> pAsynWaitSp)
  388. {
  389. }
  390. ErrorCodeEnum GUITask::OutputMsg(const char *pMsg)
  391. {
  392. return Error_Succeed;
  393. }
  394. void GUITask::OnEntityStateHook(const char *pszEntityName,const char *pszTriggerEntity,EntityStateEnum eState,EntityStateEnum eLastState)
  395. {
  396. CEntityRunInfo Info;
  397. CSmartPointer<IEntityFunction> pFunc = m_pEntity->GetFunction();
  398. pFunc->GetEntityRunInfo(pszEntityName, Info);
  399. entityStateChange cur = { pszEntityName , eState , Info.dwProcessID };
  400. m_server->publish("EntityStateChange", cur);
  401. }
  402. void GUITask::OnLog(const CAutoArray<CUUID> &SubIDs, const CUUID nLogID,const LogTypeEnum eLogType, const SeverityLevelEnum eLevel,
  403. const DWORD dwSysError,const DWORD dwUserCode,const DWORD dwEntityInstanceID, const WORD wEntityDevelID,
  404. const CAutoArray<DWORD> &Param, const char *pszEntityName, const char *pszModuleName,const char *pszMessage)
  405. {
  406. // 忽略GPIO事件
  407. if (dwUserCode == 0x2090000A || dwUserCode == 0x20900009)
  408. return;
  409. if (pszMessage!=NULL && strlen(pszMessage)>2)
  410. {
  411. CSimpleStringA str = pszMessage;
  412. if (str[str.GetLength()-2] == '\r' && str[str.GetLength()-1]=='\n')
  413. str[str.GetLength()-2] = 0;
  414. if (eLogType == Log_Error)
  415. m_lastErrorMsg = str = CSimpleStringA::Format("[%s] Error:{%s}(sc:0x%X, uc:0x%X)\r\n", pszEntityName, (const char*)str, dwSysError, dwUserCode);
  416. else if(eLogType == Log_Warning)
  417. str = CSimpleStringA::Format("[%s] Warn:{%s}(sc:0x%X, uc:0x%X)\r\n", pszEntityName, (const char*)str, dwSysError, dwUserCode);
  418. else if(eLogType == Log_Event)
  419. str = CSimpleStringA::Format("[%s] Event:{%s}(uc:0x%X)\r\n", pszEntityName, (const char*)str, dwUserCode);
  420. else if (eLogType == Log_Debug)
  421. str = CSimpleStringA::Format("[%s] Debug:{%s}\r\n", pszEntityName, (const char*)str);
  422. publishMsg({ "togui" , 4 /*Debug*/, 1 /*Low*/, 0, 0 , str.GetData() });
  423. }
  424. }
  425. CEntityBase* GUITask::GetEntity()
  426. {
  427. return m_pEntity;
  428. }
  429. ErrorCodeEnum GUITask::ShowMaintainView(bool bShow, bool bHighLevel)
  430. {
  431. return Error_Succeed;
  432. }
  433. ErrorCodeEnum GUITask::SetWindowPosition(bool bTop)
  434. {
  435. CSystemStaticInfo info;
  436. memset(&info, 0, sizeof(info));
  437. auto rc = m_pEntity->GetFunction()->GetSystemStaticInfo(info);
  438. if (stricmp(info.strMachineType, "RVC.IL") == 0)
  439. return Error_Succeed;
  440. if (m_hWndMainFrame)
  441. {
  442. if (bTop)
  443. {
  444. ShowWindow(m_hWndMainFrame, SW_NORMAL);
  445. SetWindowPos(m_hWndMainFrame, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
  446. // 启动软键盘
  447. // WinExec("osk.exe", SW_NORMAL);
  448. //ShellExecuteA(NULL, "open", "osk.exe", NULL, NULL, SW_SHOW);
  449. }
  450. else
  451. {
  452. SetWindowPos(m_hWndMainFrame, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
  453. ShowWindow(m_hWndMainFrame, SW_MINIMIZE);
  454. // 关闭软键盘
  455. //CloseSoftKeyboard();
  456. }
  457. return Error_Succeed;
  458. }
  459. else
  460. return Error_NotExist;
  461. }
  462. ErrorCodeEnum GUITask::ShowBeginInit(bool bShow)
  463. {
  464. return Error_Succeed;
  465. }
  466. void GUITask::CloseSoftKeyboard()
  467. {
  468. HANDLE hProcessHandle;
  469. ULONG nProcessID;
  470. HWND kbWindow;
  471. kbWindow = ::FindWindow(NULL, _T("屏幕键盘"));
  472. if (NULL != kbWindow)
  473. {
  474. ::GetWindowThreadProcessId(kbWindow, &nProcessID);
  475. hProcessHandle = ::OpenProcess(PROCESS_TERMINATE, FALSE, nProcessID);
  476. ::TerminateProcess(hProcessHandle, 4);
  477. }
  478. }
  479. ErrorCodeEnum GUITask::ShowBlueScreen()
  480. {
  481. auto pEntityFunc = m_pEntity->GetFunction();
  482. auto pPrevFunc = pEntityFunc->GetPrivilegeFunction();
  483. const char *pMsg = "System Failure!System Failure!System Failure!System Failure!System Failure!System Failure!System Failure!System Failure!\r\n系统启动失败,请联系总行开发人员解决!";
  484. pPrevFunc->DisplayBlueScreen(pMsg);
  485. return Error_Succeed;
  486. }
  487. ErrorCodeEnum GUITask::ShowFatalError()
  488. {
  489. auto pEntityFunc = m_pEntity->GetFunction();
  490. const char *pMsg = "开放系统管理员初级培训及认证报名通知.开放系统管理员初级培训及认证报名通知.开放系统管理员初级培训及认证报名通知.开放系统管理员初级培训及认证报名通知.开放系统管理员初级培训及认证报名通知.";
  491. pEntityFunc->ShowFatalError(pMsg);
  492. return Error_Succeed;
  493. }
  494. ErrorCodeEnum GUITask::HideBlueScreen()
  495. {
  496. auto pEntityFunc = m_pEntity->GetFunction();
  497. auto pPrevFunc = pEntityFunc->GetPrivilegeFunction();
  498. return pPrevFunc->UndisplayBlueScreen();
  499. }
  500. ErrorCodeEnum GUITask::ShowOutputConsole()
  501. {
  502. auto pFunc = m_pEntity->GetFunction()->GetPrivilegeFunction();
  503. return pFunc->ShowOuputConsole();
  504. }
  505. ErrorCodeEnum GUITask::CloseOutputConsole()
  506. {
  507. auto pFunc = m_pEntity->GetFunction()->GetPrivilegeFunction();
  508. return pFunc->CloseOuputConsole();
  509. }