guitask.cpp 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650
  1. #include "stdafx2.h"
  2. #include "SpBase.h"
  3. #include "guitask.h"
  4. #include "mainfrm.h"
  5. #include "..\mod_accessauth\AccessAuthorization_client_g.h"
  6. using namespace AccessAuthorization;
  7. #include "..\mod_Initializer\Initializer_client_g.h"
  8. using namespace Initializer;
  9. #include "MobileDial_client_g.h"
  10. //using namespace MobileDial;
  11. GUITask::GUITask() : m_pEntity(NULL), m_hWndMainFrame(NULL), m_hThread(NULL)
  12. {
  13. m_hEventStartReady = ::CreateEventA(NULL, TRUE, FALSE, NULL);
  14. m_hEventStopReady = ::CreateEventA(NULL, TRUE, FALSE, NULL);
  15. }
  16. GUITask::~GUITask()
  17. {
  18. CloseHandle(m_hEventStopReady);
  19. CloseHandle(m_hEventStartReady);
  20. }
  21. ErrorCodeEnum GUITask::Kickoff(CEntityBase *pEntity)
  22. {
  23. if (m_hThread) {
  24. return Error_Duplication;
  25. }
  26. m_pEntity = pEntity;
  27. m_hThread = (HANDLE)_beginthreadex(0, 0, &__Process, this, 0, 0);
  28. if (!m_hThread) {
  29. return Error_Resource;
  30. }
  31. WaitForSingleObject(m_hEventStartReady, INFINITE);
  32. //SubscribeLog();
  33. return RegistEntityStateEvent();
  34. }
  35. ErrorCodeEnum GUITask::Close()
  36. {
  37. if (!m_hThread) {
  38. return Error_NotInit;
  39. }
  40. UnSubscribeLog();
  41. UnregistEntityStateEvent();
  42. if (m_hWndMainFrame)
  43. {
  44. PostMessageA(m_hWndMainFrame, WM_CLOSE, -1, -1);
  45. WaitForSingleObject(m_hEventStopReady, INFINITE);
  46. }
  47. WaitForSingleObject(m_hThread, INFINITE);
  48. CloseHandle(m_hThread);
  49. m_hThread = 0;
  50. return Error_Succeed;
  51. }
  52. CAppModule _Module;
  53. void GUITask::Process()
  54. {
  55. ResetEvent(m_hEventStartReady);
  56. m_pEntity->GetFunction()->InitLogCurrentThread();
  57. HRESULT hRes = ::CoInitialize(NULL);
  58. // If you are running on NT 4.0 or higher you can use the following call instead to
  59. // make the EXE free threaded. This means that calls come in on a random RPC thread.
  60. // HRESULT hRes = ::CoInitializeEx(NULL, COINIT_MULTITHREADED);
  61. ATLASSERT(SUCCEEDED(hRes));
  62. // this resolves ATL window thunking problem when Microsoft Layer for Unicode (MSLU) is used
  63. ::DefWindowProc(NULL, 0, 0, 0L);
  64. AtlInitCommonControls(ICC_COOL_CLASSES | ICC_BAR_CLASSES); // add flags to support other controls
  65. hRes = _Module.Init(NULL, ModuleBase::GetModuleBase()->GetInstance());
  66. ATLASSERT(SUCCEEDED(hRes));
  67. ATL::AtlAxWinInit();
  68. CMessageLoop theLoop;
  69. _Module.AddMessageLoop(&theLoop);
  70. CMainFrame wndMain(this);
  71. if(wndMain.CreateEx() == NULL)
  72. {
  73. ATLTRACE(_T("Main window creation failed!\n"));
  74. return;
  75. }
  76. m_hWndMainFrame = wndMain.m_hWnd;
  77. SetEvent(m_hEventStartReady);
  78. wndMain.ShowWindow(SW_SHOW);
  79. int nRet = theLoop.Run();
  80. _Module.RemoveMessageLoop();
  81. _Module.Term();
  82. ::CoUninitialize();
  83. SetEvent(m_hEventStopReady);
  84. m_hWndMainFrame = NULL;
  85. }
  86. ErrorCodeEnum GUITask::RegistEntityStateEvent()
  87. {
  88. CSmartPointer<IEntityFunction> pFunc = m_pEntity->GetFunction();
  89. CSmartPointer<IEntityFunctionPrivilege> pFuncPrivilege = pFunc.ConvertCase<IEntityFunctionPrivilege>();
  90. if (pFuncPrivilege != NULL) {
  91. return pFuncPrivilege->RegistEntityStateEvent(NULL, this); // NULL to register for all
  92. } else {
  93. return Error_NoPrivilege;
  94. }
  95. }
  96. ErrorCodeEnum GUITask::UnregistEntityStateEvent()
  97. {
  98. CSmartPointer<IEntityFunction> pFunc = m_pEntity->GetFunction();
  99. CSmartPointer<IEntityFunctionPrivilege> pFuncPrivilege = pFunc.ConvertCase<IEntityFunctionPrivilege>();
  100. if (pFuncPrivilege != NULL) {
  101. return pFuncPrivilege->UnregistEntityStateEvent(NULL);
  102. } else {
  103. return Error_NoPrivilege;
  104. }
  105. }
  106. ErrorCodeEnum GUITask::ReqFrameworkQuit(bool bRebootOS)
  107. {
  108. CSmartPointer<IEntityFunction> pFunc = m_pEntity->GetFunction();
  109. CSmartPointer<IEntityFunctionPrivilege> pFuncPrivilege = pFunc.ConvertCase<IEntityFunctionPrivilege>();
  110. if (pFuncPrivilege != NULL)
  111. {
  112. return pFuncPrivilege->Reboot(RebootTrigger_ManualLocal, bRebootOS ? RebootWay_OS : RebootWay_Framework );
  113. }
  114. return Error_Unexpect;
  115. }
  116. ErrorCodeEnum GUITask::SubscribeLog()
  117. {
  118. return m_pEntity->GetFunction()->SubscribeLog(m_logSubID, this, Log_Ignore, Severity_None, Error_IgnoreAll, -1, NULL, false);
  119. }
  120. ErrorCodeEnum GUITask::UnSubscribeLog()
  121. {
  122. if ((__int64)m_logSubID != 0)
  123. {
  124. m_pEntity->GetFunction()->UnsubscribeLog(m_logSubID);
  125. m_logSubID = 0;
  126. }
  127. return Error_Succeed;
  128. }
  129. ErrorCodeEnum GUITask::SetDebugLevel(const char *pszEntity, int nLevel)
  130. {
  131. return m_pEntity->GetFunction()->GetPrivilegeFunction()->SetSysDebugLevel(pszEntity, (DebugLevelEnum)nLevel, true);
  132. }
  133. ErrorCodeEnum GUITask::GetShellDebugLevel(int &nLevel)
  134. {
  135. CSystemRunInfo info ={};
  136. auto rc = m_pEntity->GetFunction()->GetSystemRunInfo(info);
  137. if (rc == Error_Succeed)
  138. nLevel = info.eDebugLevel;
  139. return rc;
  140. }
  141. ErrorCodeEnum GUITask::BeginAccessAuth()
  142. {
  143. AccessAuthService_ClientBase *pClient = new AccessAuthService_ClientBase(m_pEntity);
  144. auto rc = pClient->Connect();
  145. if (rc == Error_Succeed)
  146. {
  147. Dbg("connect to entity [AccessAuthorization] succeed, start access auth now");
  148. rc = pClient->Regist();
  149. pClient->GetFunction()->CloseSession();
  150. }
  151. else
  152. {
  153. LogError(Severity_Low, rc, 0, "connect to entity [AccessAuthorization] fail");
  154. }
  155. pClient->SafeDelete();
  156. return rc;
  157. }
  158. ErrorCodeEnum GUITask::BeginInitialize()
  159. {
  160. InitializerService_ClientBase *pClient = new InitializerService_ClientBase(m_pEntity);
  161. auto rc = pClient->Connect();
  162. if (rc == Error_Succeed)
  163. {
  164. //Dbg("connect to entity [Initializer] succeed, start initialize now");
  165. InitializerService_Initialize_Info info = {};
  166. rc = pClient->Initialize(info);
  167. pClient->GetFunction()->CloseSession();
  168. }
  169. else
  170. {
  171. LogError(Severity_Low, rc, 0, "connect to entity [Initializer] fail");
  172. }
  173. pClient->SafeDelete();
  174. return rc;
  175. }
  176. ErrorCodeEnum GUITask::ShowMobileDialog()
  177. {
  178. MobileDial::MobileDialService_ClientBase *pClient = new MobileDial::MobileDialService_ClientBase(m_pEntity);
  179. auto rc = pClient->Connect();
  180. if (rc == Error_Succeed)
  181. {
  182. MobileDial::MobileDialService_ShowDialog_Info info = {};
  183. rc = pClient->ShowDialog(info);
  184. if(rc != 0) {
  185. LogError(Severity_Low, rc, 0, CSimpleStringA::Format("Invoke show mobile dialog failed, rc = 0x%X", rc));
  186. }
  187. pClient->GetFunction()->CloseSession();
  188. }
  189. else
  190. {
  191. LogError(Severity_Low, rc, 0, "connect to entity [MobileDial] fail");
  192. }
  193. pClient->SafeDelete();
  194. pClient = NULL;
  195. return rc;
  196. }
  197. #include "mod_GuiConsole.h"
  198. ErrorCodeEnum GUITask::DeleteKeySet()
  199. {
  200. HCRYPTPROV hProv(0);
  201. if (!CryptAcquireContext(&hProv, "RVC", MS_ENHANCED_PROV, PROV_RSA_FULL, CRYPT_MACHINE_KEYSET | CRYPT_DELETEKEYSET))
  202. {
  203. Dbg("delete keyset fail: %d", GetLastError());
  204. return Error_Unexpect;
  205. }
  206. else
  207. {
  208. Dbg("delete keyset succ");
  209. return Error_Succeed;
  210. }
  211. //auto pEntity = (CGUIConsoleEntity*)m_pEntity;
  212. //return pEntity->RegistSwallowedCard("6225887550008888", "4014", "20151014", "141755");
  213. }
  214. ErrorCodeEnum GUITask::GetFrameworkInfo(CSimpleStringA &strInfo)
  215. {
  216. CSystemStaticInfo info;
  217. memset(&info, 0, sizeof(info));
  218. auto rc = m_pEntity->GetFunction()->GetSystemStaticInfo(info);
  219. if (rc == Error_Succeed)
  220. strInfo = CSimpleStringA::Format("[%s] [%s]", (const char*) info.strTerminalID, (const char*)info.InstallVersion.ToString());
  221. return rc;
  222. }
  223. ErrorCodeEnum GUITask::AsyncStartEntity(const char *entity_name, const char *cmdline, void *pData)
  224. {
  225. CSmartPointer<IEntityFunction> pFunc = m_pEntity->GetFunction();
  226. CSmartPointer<IEntityFunctionPrivilege> pFuncPrivilege = pFunc.ConvertCase<IEntityFunctionPrivilege>();
  227. if (pFuncPrivilege != NULL) {
  228. CSmartPointer<IAsynWaitSp> spWait;
  229. ErrorCodeEnum Error = pFuncPrivilege->StartEntity(entity_name, cmdline, spWait);
  230. if (Error == Error_Succeed) {
  231. callback_entry *entry = new callback_entry();
  232. entry->pRawData = pData;
  233. entry->EntityName = entity_name;
  234. entry->ErrorResult = Error_Unexpect;
  235. entry->op = OP_START_ENTITY;
  236. spWait->SetCallback(this, entry);
  237. }
  238. return Error;
  239. } else {
  240. return Error_NoPrivilege;
  241. }
  242. }
  243. ErrorCodeEnum GUITask::AsyncStopEntity(const char *entity_name, void *pData)
  244. {
  245. CSmartPointer<IEntityFunction> pFunc = m_pEntity->GetFunction();
  246. CSmartPointer<IEntityFunctionPrivilege> pFuncPrivilege = pFunc.ConvertCase<IEntityFunctionPrivilege>();
  247. if (pFuncPrivilege != NULL) {
  248. CSmartPointer<IAsynWaitSp> spWait;
  249. ErrorCodeEnum Error = pFuncPrivilege->StopEntity(entity_name, spWait);
  250. if (Error == Error_Succeed) {
  251. callback_entry *entry = new callback_entry();
  252. entry->pRawData = pData;
  253. entry->EntityName = entity_name;
  254. entry->ErrorResult = Error_Unexpect;
  255. entry->op = OP_STOP_ENTITY;
  256. spWait->SetCallback(this, entry);
  257. }
  258. return Error;
  259. } else {
  260. return Error_NoPrivilege;
  261. }
  262. }
  263. ErrorCodeEnum GUITask::AsyncPauseEntity(const char *entity_name, void *pData)
  264. {
  265. CSmartPointer<IEntityFunction> pFunc = m_pEntity->GetFunction();
  266. CSmartPointer<IEntityFunctionPrivilege> pFuncPrivilege = pFunc.ConvertCase<IEntityFunctionPrivilege>();
  267. if (pFuncPrivilege != NULL) {
  268. CSmartPointer<IAsynWaitSp> spWait;
  269. ErrorCodeEnum Error = pFuncPrivilege->PauseEntity(entity_name, spWait);
  270. if (Error == Error_Succeed) {
  271. callback_entry *entry = new callback_entry();
  272. entry->pRawData = pData;
  273. entry->EntityName = entity_name;
  274. entry->ErrorResult = Error_Unexpect;
  275. entry->op = OP_PAUSE_ENTITY;
  276. spWait->SetCallback(this, entry);
  277. }
  278. return Error;
  279. } else {
  280. return Error_NoPrivilege;
  281. }
  282. }
  283. ErrorCodeEnum GUITask::AsyncContinueEntity(const char *entity_name, void *pData)
  284. {
  285. CSmartPointer<IEntityFunction> pFunc = m_pEntity->GetFunction();
  286. CSmartPointer<IEntityFunctionPrivilege> pFuncPrivilege = pFunc.ConvertCase<IEntityFunctionPrivilege>();
  287. if (pFuncPrivilege != NULL) {
  288. CSmartPointer<IAsynWaitSp> spWait;
  289. ErrorCodeEnum Error = pFuncPrivilege->ContinueEntity(entity_name, spWait);
  290. if (Error == Error_Succeed) {
  291. callback_entry *entry = new callback_entry();
  292. entry->pRawData = pData;
  293. entry->EntityName = entity_name;
  294. entry->ErrorResult = Error_Unexpect;
  295. entry->op = OP_CONTINUE_ENTITY;
  296. spWait->SetCallback(this, entry);
  297. }
  298. return Error;
  299. } else {
  300. return Error_NoPrivilege;
  301. }
  302. }
  303. ErrorCodeEnum GUITask::AsyncTerminateEntity(const char *entity_name, void *pData)
  304. {
  305. CSmartPointer<IEntityFunction> pFunc = m_pEntity->GetFunction();
  306. CSmartPointer<IEntityFunctionPrivilege> pFuncPrivilege = pFunc.ConvertCase<IEntityFunctionPrivilege>();
  307. if (pFuncPrivilege != NULL) {
  308. CSmartPointer<IAsynWaitSp> spWait;
  309. ErrorCodeEnum Error = pFuncPrivilege->TerminateEntity(entity_name, spWait);
  310. if (Error == Error_Succeed) {
  311. callback_entry *entry = new callback_entry();
  312. entry->pRawData = pData;
  313. entry->EntityName = entity_name;
  314. entry->ErrorResult = Error_Unexpect;
  315. entry->op = OP_TERMINATE_ENTITY;
  316. spWait->SetCallback(this, entry);
  317. }
  318. return Error;
  319. } else {
  320. return Error_NoPrivilege;
  321. }
  322. }
  323. ErrorCodeEnum GUITask::GetAllEntity(CAutoArray<EntityEntry> &Entities)
  324. {
  325. CSmartPointer<IEntityFunction> spFunc = m_pEntity->GetFunction();
  326. CAutoArray<CSimpleStringA> strEntityNames;
  327. CAutoArray<WORD> wDevelopIDs;
  328. ErrorCodeEnum Error = spFunc->GetAllRegistedEntity(strEntityNames, wDevelopIDs);
  329. if (Error == Error_Succeed) {
  330. Entities.Init(strEntityNames.GetCount());
  331. for (int i = 0; i < strEntityNames.GetCount(); ++i) {
  332. Error = GetEntity(strEntityNames[i], Entities[i]);
  333. }
  334. }
  335. return Error;
  336. }
  337. ErrorCodeEnum GUITask::GetEntity(const char *entity_name, EntityEntry &e)
  338. {
  339. CSmartPointer<IEntityFunction> spFunc = m_pEntity->GetFunction();
  340. LOG_ASSERT(spFunc != NULL);
  341. CEntityStaticInfo StaticInfo;
  342. CEntityRunInfo RunInfo;
  343. ErrorCodeEnum Error = spFunc->GetEntityStaticInfo(entity_name, StaticInfo);
  344. if (Error == Error_Succeed) {
  345. Error = spFunc->GetEntityRunInfo(entity_name, RunInfo);
  346. if (Error == Error_Succeed) {
  347. e.Name = entity_name;
  348. e.Id = RunInfo.dwEntityInstanceID;
  349. e.ModuleName = _GetFileName(StaticInfo.strSpFileName);
  350. e.State = RunInfo.eState;
  351. e.Type = StaticInfo.bStartedByShell ? 0 : 1;
  352. e.Pid = (int)RunInfo.dwProcessID;
  353. e.DevelopID = (int)StaticInfo.wEntityDevelopID;
  354. e.DebugLevel = RunInfo.eDebugLevel;
  355. }
  356. }
  357. return Error;
  358. }
  359. ErrorCodeEnum GUITask::GetCustomizeStartMenuList(CAutoArray<StartMenuEntry> &StartItems)
  360. {
  361. CSmartPointer<IEntityFunction> spFunc = m_pEntity->GetFunction();
  362. CSmartPointer<IConfigInfo> spConfig;
  363. LOG_ASSERT(spFunc != NULL);
  364. int cnt = 0;
  365. ErrorCodeEnum Error = spFunc->OpenConfig(Config_Software, spConfig);
  366. if (Error != Error_Succeed)
  367. return Error;
  368. Error = spConfig->ReadConfigValueInt("StartMenu", "Number", cnt);
  369. if (Error != Error_Succeed)
  370. return Error;
  371. StartItems.Init(cnt);
  372. for (int i = 0; i < cnt; ++i) {
  373. char tmp[128];
  374. CSimpleStringA strValue;
  375. _itoa(i+1, tmp, 10);
  376. Error = spConfig->ReadConfigValue("StartMenu", tmp, strValue);
  377. const char *p = strValue;
  378. if (Error != Error_Succeed || p == NULL || strValue.GetLength() == 0)
  379. break;
  380. int kk = 0;
  381. while (*p && *p != ' ') {
  382. tmp[kk++] = *p;
  383. p++;
  384. }
  385. tmp[kk] = 0;
  386. StartItems[i].strEntity = tmp;
  387. while (*p && *p == ' ')
  388. p++;
  389. if (*p) {
  390. StartItems[i].strCmdLine = p;
  391. } else {
  392. StartItems[i].strCmdLine = "";
  393. }
  394. }
  395. return Error;
  396. }
  397. void GUITask::OnAnswer(CSmartPointer<IAsynWaitSp> pAsynWaitSp)
  398. {
  399. if (m_hWndMainFrame) {
  400. CSmartPointer<ICallbackListener> spCallback;
  401. CSmartPointer<IReleasable> pData;
  402. pAsynWaitSp->GetCallback(spCallback, pData);
  403. LOG_ASSERT(pData.GetRawPointer() != NULL);
  404. callback_entry *entry = static_cast<callback_entry*>((IReleasable*)pData.GetRawPointer());
  405. entry->ErrorResult = pAsynWaitSp->AsyncGetAnswer();
  406. callback_entry *new_entry = new callback_entry();
  407. new_entry->EntityName = entry->EntityName;
  408. new_entry->ErrorResult = entry->ErrorResult;
  409. new_entry->op = entry->op;
  410. new_entry->state = entry->state;
  411. PostMessage(m_hWndMainFrame, WM_GUICONSOLE, 0, (LPARAM)new_entry);
  412. }
  413. }
  414. ErrorCodeEnum GUITask::OutputMsg(const char *pMsg)
  415. {
  416. if (m_hWndMainFrame) {
  417. PostMessage(m_hWndMainFrame, WM_SHOW_MSG, 0, (LPARAM)strdup(pMsg));
  418. return Error_Succeed;
  419. }
  420. else
  421. return Error_NotExist;
  422. }
  423. void GUITask::OnEntityStateHook(const char *pszEntityName,const char *pszTriggerEntity,EntityStateEnum eState,EntityStateEnum eLastState)
  424. {
  425. if (m_hWndMainFrame) {
  426. callback_entry *entry = new callback_entry();
  427. entry->EntityName = pszEntityName;
  428. entry->ErrorResult = Error_Succeed;
  429. entry->op = OP_FIRE_ENTITY_STATE;
  430. entry->state = eState;
  431. DWORD dwProcessID = 0;
  432. //if (entry->state != EntityState_Close) // 关闭状态进程号清0置后
  433. {
  434. CEntityRunInfo Info;
  435. CSmartPointer<IEntityFunction> pFunc = m_pEntity->GetFunction();
  436. pFunc->GetEntityRunInfo(entry->EntityName, Info);
  437. dwProcessID = Info.dwProcessID;
  438. }
  439. PostMessage(m_hWndMainFrame, WM_GUICONSOLE, dwProcessID, (LPARAM)entry);
  440. }
  441. }
  442. void GUITask::OnLog(const CAutoArray<CUUID> &SubIDs, const CUUID nLogID,const LogTypeEnum eLogType, const SeverityLevelEnum eLevel,
  443. const DWORD dwSysError,const DWORD dwUserCode,const DWORD dwEntityInstanceID, const WORD wEntityDevelID,
  444. const CAutoArray<DWORD> &Param, const char *pszEntityName, const char *pszModuleName,const char *pszMessage)
  445. {
  446. //// 过滤非调试实体信息
  447. //if (pszEntityName !=NULL)
  448. //{
  449. // CEntityRunInfo info = {};
  450. // auto rc = m_pEntity->GetFunction()->GetEntityRunInfo(pszEntityName, info);
  451. // if (rc == Error_Succeed && info.eDebugLevel == 0)
  452. // return;
  453. //}
  454. // 忽略GPIO事件
  455. if (dwUserCode == 0x2090000A || dwUserCode == 0x20900009)
  456. return;
  457. if (pszMessage!=NULL && strlen(pszMessage)>2)
  458. {
  459. CSimpleStringA str = pszMessage;
  460. if (str[str.GetLength()-2] == '\r' && str[str.GetLength()-1]=='\n')
  461. str[str.GetLength()-2] = 0;
  462. if (eLogType == Log_Error)
  463. str = CSimpleStringA::Format("[%s] Error:{%s}(sc:0x%X, uc:0x%X)\r\n", pszEntityName, (const char*)str, dwSysError, dwUserCode);
  464. else if(eLogType == Log_Warning)
  465. str = CSimpleStringA::Format("[%s] Warn:{%s}(sc:0x%X, uc:0x%X)\r\n", pszEntityName, (const char*)str, dwSysError, dwUserCode);
  466. else if(eLogType == Log_Event)
  467. str = CSimpleStringA::Format("[%s] Event:{%s}(uc:0x%X)\r\n", pszEntityName, (const char*)str, dwUserCode);
  468. else if (eLogType == Log_Debug)
  469. str = CSimpleStringA::Format("[%s] Debug:{%s}\r\n", pszEntityName, (const char*)str);
  470. OutputMsg(str);
  471. }
  472. }
  473. CEntityBase* GUITask::GetEntity()
  474. {
  475. return m_pEntity;
  476. }
  477. ErrorCodeEnum GUITask::ShowMaintainView(bool bShow, bool bHighLevel)
  478. {
  479. if (m_hWndMainFrame) {
  480. PostMessage(m_hWndMainFrame, WM_SHOW_MAINTAIN_VIEW, bShow?1:0, bHighLevel?1:0);
  481. return Error_Succeed;
  482. }
  483. else
  484. return Error_NotExist;
  485. }
  486. ErrorCodeEnum GUITask::SetWindowPosition(bool bTop)
  487. {
  488. if (m_hWndMainFrame)
  489. {
  490. if (bTop)
  491. {
  492. ShowWindow(m_hWndMainFrame, SW_NORMAL);
  493. SetWindowPos(m_hWndMainFrame, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
  494. SetWindowPos(m_hWndMainFrame, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
  495. // 启动软键盘
  496. // WinExec("osk.exe", SW_NORMAL);
  497. //ShellExecuteA(NULL, "open", "osk.exe", NULL, NULL, SW_SHOW);
  498. }
  499. else
  500. {
  501. SetWindowPos(m_hWndMainFrame, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
  502. SetWindowPos(m_hWndMainFrame, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
  503. ShowWindow(m_hWndMainFrame, SW_MINIMIZE);
  504. // 关闭软键盘
  505. //CloseSoftKeyboard();
  506. }
  507. return Error_Succeed;
  508. }
  509. else
  510. return Error_NotExist;
  511. }
  512. ErrorCodeEnum GUITask::ShowBeginInit(bool bShow)
  513. {
  514. if (m_hWndMainFrame) {
  515. PostMessage(m_hWndMainFrame, WM_SHOW_BEGININIT_VIEW, bShow?1:0, -1);
  516. return Error_Succeed;
  517. }
  518. else
  519. return Error_NotExist;
  520. }
  521. ErrorCodeEnum GUITask::EnableMobileDialMenu(bool bEnable)
  522. {
  523. if (m_hWndMainFrame) {
  524. PostMessage(m_hWndMainFrame, WM_SHOW_MOBILEDIAL_VIEW, bEnable ? 1 : 0, -1);
  525. return Error_Succeed;
  526. }
  527. else {
  528. return Error_NotExist;
  529. }
  530. }
  531. void GUITask::CloseSoftKeyboard()
  532. {
  533. HANDLE hProcessHandle;
  534. ULONG nProcessID;
  535. HWND kbWindow;
  536. kbWindow = ::FindWindow(NULL, _T("屏幕键盘"));
  537. if (NULL != kbWindow)
  538. {
  539. ::GetWindowThreadProcessId(kbWindow, &nProcessID);
  540. hProcessHandle = ::OpenProcess(PROCESS_TERMINATE, FALSE, nProcessID);
  541. ::TerminateProcess(hProcessHandle, 4);
  542. }
  543. }
  544. ErrorCodeEnum GUITask::ShowBlueScreen()
  545. {
  546. auto pEntityFunc = m_pEntity->GetFunction();
  547. auto pPrevFunc = pEntityFunc->GetPrivilegeFunction();
  548. const char *pMsg = "System Failure!System Failure!System Failure!System Failure!System Failure!System Failure!System Failure!System Failure!\r\n系统启动失败,请联系总行开发人员解决!";
  549. pPrevFunc->DisplayBlueScreen(pMsg);
  550. return Error_Succeed;
  551. }
  552. ErrorCodeEnum GUITask::ShowFatalError()
  553. {
  554. auto pEntityFunc = m_pEntity->GetFunction();
  555. const char *pMsg = "开放系统管理员初级培训及认证报名通知.开放系统管理员初级培训及认证报名通知.开放系统管理员初级培训及认证报名通知.开放系统管理员初级培训及认证报名通知.开放系统管理员初级培训及认证报名通知.";
  556. pEntityFunc->ShowFatalError(pMsg);
  557. return Error_Succeed;
  558. }
  559. ErrorCodeEnum GUITask::HideBlueScreen()
  560. {
  561. auto pEntityFunc = m_pEntity->GetFunction();
  562. auto pPrevFunc = pEntityFunc->GetPrivilegeFunction();
  563. return pPrevFunc->UndisplayBlueScreen();
  564. }
  565. ErrorCodeEnum GUITask::ShowOutputConsole()
  566. {
  567. auto pFunc = m_pEntity->GetFunction()->GetPrivilegeFunction();
  568. return pFunc->ShowOuputConsole();
  569. }
  570. ErrorCodeEnum GUITask::CloseOutputConsole()
  571. {
  572. auto pFunc = m_pEntity->GetFunction()->GetPrivilegeFunction();
  573. return pFunc->CloseOuputConsole();
  574. }