mainfrm.cpp 107 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820
  1. #include "stdafx2.h"
  2. #include "mainfrm.h"
  3. #include "guitask.h"
  4. #include "fileutil.h"
  5. #include "array.h"
  6. #include "iniutil.h"
  7. #include "GUIConsole_UserCode.h"
  8. #include "import_libSysInit.h"
  9. #include "EventCode.h"
  10. #include "AccessAuthorization_client_g.h"
  11. using namespace AccessAuthorization;
  12. #include "UpgradeManager_client_g.h"
  13. using namespace UpgradeManager;
  14. #include "CardIssuer_client_g.h"
  15. using namespace CardIssuer;
  16. #include "MaterialMgrCnn.h"
  17. #include "mod_GuiConsole.h"
  18. LRESULT CAboutDlg::OnClose(UINT uMsg, WPARAM wParam, LPARAM lParam)
  19. {
  20. EndDialog(0);
  21. return 0;
  22. }
  23. void CAboutDlg::OnOK(UINT uNotifyCode, int nID, CWindow wndCtl)
  24. {
  25. char szY2KTime[64] = {};
  26. GetDlgItem(IDC_EDIT1).GetWindowTextA(szY2KTime, sizeof(szY2KTime));
  27. int nLen = strlen(szY2KTime);
  28. if (nLen == 0)
  29. return;
  30. DWORD nY2KTime(0);
  31. int nRet= sscanf_s(szY2KTime, "%X", &nY2KTime);
  32. if (nRet == 0)
  33. {
  34. MessageBox("invalid y2k time");
  35. return;
  36. }
  37. CSmallDateTime dtSysTime(nY2KTime);
  38. GetDlgItem(IDC_EDIT2).SetWindowTextA(dtSysTime.ToTimeString());
  39. }
  40. void CAboutDlg::OnOK2(UINT uNotifyCode, int nID, CWindow wndCtl)
  41. {
  42. GetDlgItem(IDC_EDIT3).SetWindowTextA("");
  43. CDateTimePickerCtrl dt1;
  44. dt1.Attach(GetDlgItem(IDC_DATETIMEPICKER1));
  45. SYSTEMTIME st1 = {};
  46. dt1.GetSystemTime(&st1);
  47. CDateTimePickerCtrl dt2;
  48. dt2.Attach(GetDlgItem(IDC_DATETIMEPICKER2));
  49. SYSTEMTIME st2 = {};
  50. dt2.GetSystemTime(&st2);
  51. st1.wHour = st2.wHour;
  52. st1.wMinute = st2.wMinute;
  53. st1.wSecond = st2.wSecond;
  54. st1.wMilliseconds = st2.wMilliseconds;
  55. auto pEntity = m_pGUITask->GetEntity();
  56. CSmallDateTime dtQueryTime;
  57. dtQueryTime.FromSystemTime(st1);
  58. CBootInfo info = {};
  59. pEntity->GetFunction()->GetRebootInfo(dtQueryTime, info);
  60. CSimpleStringA str = CSimpleStringA::Format("start: %s, reboot: %s, ver: %s, reason: %d, reason count: %d, way: %d, way count: %d",
  61. (const char*)info.tmStart.ToTimeString(), (const char*)info.tmReboot.ToTimeString(), (const char*)info.InstallVersion.ToString(),
  62. info.eTriggerReason, info.wSameReasonTime, info.eWay, info.wSameWayTime);
  63. GetDlgItem(IDC_EDIT3).SetWindowTextA(str);
  64. }
  65. void CAboutDlg::OnOK3(UINT uNotifyCode, int nID, CWindow wndCtl)
  66. {
  67. char szFile[256] = {};
  68. GetDlgItem(IDC_EDIT4).GetWindowTextA(szFile, sizeof(szFile));
  69. if (strlen(szFile) == 0)
  70. {
  71. MessageBoxA("请输入要验证签名的文件路径!");
  72. return;
  73. }
  74. auto pEntity = m_pGUITask->GetEntity();
  75. CSimpleStringA strErrMsg;
  76. auto rc = pEntity->GetFunction()->VerifySignature(szFile, strErrMsg);
  77. if (rc == Error_Succeed)
  78. MessageBoxA("签名验证通过!");
  79. else
  80. MessageBoxA(CSimpleStringA::Format("签名验证不通过:%s", (const char*)strErrMsg));
  81. }
  82. void CAboutDlg::OnOK4(UINT uNotifyCode, int nID, CWindow wndCtl)
  83. {
  84. auto pEntity = m_pGUITask->GetEntity();
  85. CSystemStaticInfo info;
  86. auto rc = pEntity->GetFunction()->GetSystemStaticInfo(info);
  87. if (rc != Error_Succeed)
  88. {
  89. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("GetSystemStaticInfo fail: %d", rc);
  90. return;
  91. }
  92. CSimpleStringA str = CSimpleStringA::Format("terminalno: %s, type: %s, site: %s, version: %s",
  93. (const char*)info.strTerminalID, (const char*)info.strMachineType,
  94. (const char*)info.strSite, (const char*)info.InstallVersion.ToString());
  95. GetDlgItem(IDC_EDIT3).SetWindowTextA(str);
  96. }
  97. LRESULT CAboutDlg::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam)
  98. {
  99. CenterWindow();
  100. return 0;
  101. }
  102. LRESULT CLoginDlg::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam)
  103. {
  104. CenterWindow();
  105. GetDlgItem(IDC_EditUser).SetFocus();
  106. return 0;
  107. }
  108. void CLoginDlg::OnOK(UINT uNotifyCode, int nID, CWindow wndCtl)
  109. {
  110. char szUserID[32] = {};
  111. GetDlgItem(IDC_EditUser).GetWindowTextA(szUserID, sizeof(szUserID));
  112. char szPassword[32] = {};
  113. GetDlgItem(IDC_EditPassword).GetWindowTextA(szPassword, sizeof(szPassword));
  114. EndDialog(nID);
  115. m_strUserID = szUserID;
  116. if (m_strUserID.Compare("admin") != 0)
  117. {
  118. if (m_strUserID.GetLength() == 8) // SAP用户
  119. m_strUserID = "SP" + m_strUserID;
  120. else
  121. m_strUserID = "SZ" + m_strUserID;
  122. }
  123. m_strPassword = szPassword;
  124. }
  125. void CLoginDlg::OnCancel(UINT uNotifyCode, int nID, CWindow wndCtl)
  126. {
  127. EndDialog(nID);
  128. m_strUserID = "";
  129. m_strPassword = "";
  130. }
  131. LRESULT CSysInfoView::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam)
  132. {
  133. m_listView1 = GetDlgItem(IDC_VIEWLIST1);
  134. m_listView1.AddColumn("Item1", 0);
  135. m_listView1.AddColumn("Item2", 1);
  136. RECT rc = {};
  137. m_listView1.GetClientRect(&rc);
  138. m_listView1.SetColumnWidth(0, (rc.right-rc.left)*1/2);
  139. m_listView1.SetColumnWidth(1, LVSCW_AUTOSIZE_USEHEADER);
  140. return 0;
  141. }
  142. void CSysInfoView::OutputMsg(const char *pMsg)
  143. {
  144. ::PostMessage(GetTopLevelParent().m_hWnd, WM_SHOW_MSG, 0, (LPARAM) strdup(pMsg));
  145. }
  146. DWORD64 CSysInfoView::GetFolderSize(LPCTSTR szPath, DWORD *dwFiles, DWORD *dwFolders)
  147. {
  148. TCHAR szFileFilter[512];
  149. TCHAR szFilePath[512];
  150. HANDLE hFind = NULL;
  151. WIN32_FIND_DATA fileinfo;
  152. DWORD64 dwSize = 0;
  153. strcpy(szFilePath,szPath);
  154. strcat(szFilePath,"\\");
  155. strcpy(szFileFilter,szFilePath);
  156. strcat(szFileFilter,"*.*");
  157. hFind = FindFirstFile(szFileFilter,&fileinfo);
  158. if (hFind == INVALID_HANDLE_VALUE)
  159. return 0;
  160. do
  161. {
  162. if(fileinfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
  163. {
  164. if (!strcmp(fileinfo.cFileName,".") || !strcmp(fileinfo.cFileName,".."))
  165. {
  166. //Do nothing for "." and ".." folders
  167. }
  168. else
  169. {
  170. TCHAR sztmp[512];
  171. strcpy(sztmp,szFilePath);
  172. strcat(sztmp,fileinfo.cFileName);
  173. dwSize = dwSize + GetFolderSize(sztmp, dwFiles, dwFolders);
  174. if(dwFolders != NULL)
  175. {
  176. ++(*dwFolders);
  177. }
  178. }
  179. }
  180. else if(dwFiles != NULL)
  181. {
  182. ++(*dwFiles);
  183. }
  184. dwSize += fileinfo.nFileSizeLow;
  185. }
  186. while(FindNextFile(hFind,&fileinfo));
  187. FindClose(hFind);
  188. return dwSize;
  189. }
  190. // 查看操作系统信息
  191. void CSysInfoView::OnViewOSInfo(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wnd*/)
  192. {
  193. // 查询操作系统信息
  194. CSimpleStringA strResult = "操作系统信息:\r\n";
  195. // OS版本
  196. OSVERSIONINFO osvi;
  197. ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
  198. osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
  199. GetVersionEx(&osvi);
  200. strResult = strResult + CSimpleStringA::Format(" 操作系统版本: %d.%d.%d\r\n", osvi.dwMajorVersion, osvi.dwMinorVersion, osvi.dwBuildNumber);
  201. // OS盘符
  202. _ULARGE_INTEGER lpFreeBytesAvailableToCaller = {}, lpTotalNumberOfBytes = {}, lpTotalNumberOfFreeBytes = {};
  203. char szRoot[4];
  204. DWORD dwAllDrives = GetLogicalDrives();
  205. if (dwAllDrives == 0)
  206. {
  207. LOG_TRACE("GetLogicalDrives() return 0");
  208. return ;
  209. }
  210. for(int i=0; i<26 && dwAllDrives > 0; i++)
  211. {
  212. bool bHasDrive = dwAllDrives & 0x1;
  213. dwAllDrives = dwAllDrives >> 1;
  214. if (!bHasDrive)
  215. continue;
  216. sprintf((char*)szRoot,"%c:\\", i+'A');
  217. if(GetDriveType(szRoot) == DRIVE_FIXED)
  218. {
  219. GetDiskFreeSpaceEx(szRoot, &lpFreeBytesAvailableToCaller, &lpTotalNumberOfBytes, &lpTotalNumberOfFreeBytes);
  220. strResult += CSimpleStringA::Format(" %s 总容量:%8d MB,可用容量:%8d MB\r\n", (const char*)szRoot,
  221. (DWORD)(lpTotalNumberOfBytes.QuadPart / (1024 *1024)), (DWORD)(lpTotalNumberOfFreeBytes.QuadPart / (1024 *1024)));
  222. }
  223. }
  224. // 查询相关目录占用空间
  225. auto pEntity = m_pGUITask->GetEntity();
  226. CSimpleStringA strRootPath;
  227. pEntity->GetFunction()->GetPath("Root", strRootPath);
  228. DWORD nFileCount(0), nFolderCount(0);
  229. auto nTotalSize = GetFolderSize(strRootPath, &nFileCount, &nFolderCount);
  230. if (nTotalSize >0)
  231. {
  232. strResult += CSimpleStringA::Format(" 框架安装目录:{%s}, 共有 %d个文件,%d个子目录,占用磁盘空间:%.1f MB\r\n\r\n",
  233. (const char*)strRootPath, nFileCount, nFolderCount, (nTotalSize/(1024*1024.0)));
  234. }
  235. // 输出
  236. OutputMsg(strResult);
  237. }
  238. // 查看框架信息
  239. void CSysInfoView::OnViewFWInfo(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wnd*/)
  240. {
  241. CSimpleStringA strResult = "终端基本信息:\r\n";
  242. auto pFunc = m_pGUITask->GetEntity()->GetFunction();
  243. CSystemStaticInfo staticInfo;
  244. auto rc = pFunc->GetSystemStaticInfo(staticInfo);
  245. if (rc == Error_Succeed)
  246. {
  247. CSimpleStringA strLightPacks ="";
  248. for(int i=0; i<staticInfo.LightPackInfos.GetCount(); i++)
  249. {
  250. if (i >0)
  251. strLightPacks += "、";
  252. strLightPacks += staticInfo.LightPackInfos[i].strPackName;
  253. }
  254. strResult += CSimpleStringA::Format(
  255. " 终端号码:{%s}\r\n"
  256. " 设备型号:{%s}\r\n"
  257. " 硬件版本:{%s}\r\n"
  258. " 登记地址:{%s}\r\n"
  259. " 定位信息:{%f, %f}\r\n"
  260. " 软件版本:{%s}\r\n"
  261. " 安装包名:{%s}\r\n"
  262. " 安装时间:{%s}\r\n"
  263. " 切换时间:{%s}\r\n"
  264. " 上次启动:{%s}\r\n"
  265. " 前一版本:{%s}\r\n"
  266. " 后一版本:{%s}\r\n"
  267. " 轻量安装:{%s}\r\n"
  268. " 运行次数:{%d}\r\n"
  269. " 当天次数:{%d}\r\n",
  270. (const char*)staticInfo.strTerminalID,
  271. (const char*)staticInfo.strMachineType,
  272. (const char*)staticInfo.MachineVersion.ToString(),
  273. (const char*)staticInfo.strEnrolAddr,
  274. staticInfo.EnrolGPS.GetLatitude(), staticInfo.EnrolGPS.GetLongitude(),
  275. (const char*)staticInfo.InstallVersion.ToString(),
  276. (const char*)staticInfo.InstallPack,
  277. (const char*)staticInfo.tmCreateDate.ToTimeString(),
  278. (const char*)staticInfo.tmSwithOverDate.ToTimeString(),
  279. (const char*)staticInfo.tmCurrentTime.ToTimeString(),
  280. (const char*)staticInfo.PreviousInstallVersion.ToString(),
  281. (const char*)staticInfo.LatterInstallVersion.ToString(),
  282. (const char*)strLightPacks,
  283. staticInfo.nTotalRunCount,
  284. staticInfo.nTodayRunCount);
  285. }
  286. CSystemRunInfo runInfo;
  287. rc = pFunc->GetSystemRunInfo(runInfo);
  288. if (rc == Error_Succeed)
  289. {
  290. CSimpleStringA strEntityList = "";
  291. for(int i=0; i<runInfo.strRunningEntityNames.GetCount(); i++)
  292. {
  293. if (i>0)
  294. strEntityList += "、";
  295. strEntityList += runInfo.strRunningEntityNames[i];
  296. }
  297. strResult += CSimpleStringA::Format(
  298. " 调试级别:{%d}\r\n"
  299. " 运行实体:{%s}\r\n",
  300. (int)runInfo.eDebugLevel,
  301. (const char*)strEntityList);
  302. }
  303. // 输出
  304. OutputMsg(strResult);
  305. }
  306. void CSysInfoView::ResetListAndButtons(const char *pszOpName, char *pszColName1, char *pszColName2,
  307. char *pszBtnName1, char *pszBtnName2, char *pszBtnName3, char *pszBtnName4)
  308. {
  309. m_strOpName = pszOpName;
  310. m_listView1.EnableWindow((pszColName1 != NULL || pszColName2 != NULL) ? TRUE : FALSE);
  311. m_listView1.DeleteAllItems();
  312. m_listView1.DeleteColumn(1);
  313. m_listView1.DeleteColumn(0);
  314. int nColCount = 0;
  315. if (pszColName1 != NULL)
  316. m_listView1.AddColumn(pszColName1, nColCount++);
  317. if (pszColName2 != NULL)
  318. m_listView1.AddColumn(pszColName2, nColCount++);
  319. if (nColCount >0)
  320. {
  321. RECT rc = {};
  322. m_listView1.GetClientRect(&rc);
  323. m_listView1.SetColumnWidth(0, (rc.right-rc.left-20)*1/nColCount);
  324. m_listView1.SetColumnWidth(1, (rc.right-rc.left-20)*1/nColCount);
  325. }
  326. CWindow button = GetDlgItem(IDC_VARBUTTON1);
  327. if (pszBtnName1 == NULL)
  328. {
  329. button.EnableWindow(FALSE);
  330. button.SetWindowTextA("动作1");
  331. }
  332. else
  333. {
  334. button.EnableWindow(TRUE);
  335. button.SetWindowTextA(pszBtnName1);
  336. }
  337. button = GetDlgItem(IDC_VARBUTTON2);
  338. if (pszBtnName2 == NULL)
  339. {
  340. button.EnableWindow(FALSE);
  341. button.SetWindowTextA("动作2");
  342. }
  343. else
  344. {
  345. button.EnableWindow(TRUE);
  346. button.SetWindowTextA(pszBtnName2);
  347. }
  348. button = GetDlgItem(IDC_VARBUTTON3);
  349. if (pszBtnName3 == NULL)
  350. {
  351. button.EnableWindow(FALSE);
  352. button.SetWindowTextA("动作3");
  353. }
  354. else
  355. {
  356. button.EnableWindow(TRUE);
  357. button.SetWindowTextA(pszBtnName3);
  358. }
  359. button = GetDlgItem(IDC_VARBUTTON4);
  360. if (pszBtnName4 == NULL)
  361. {
  362. button.EnableWindow(FALSE);
  363. button.SetWindowTextA("动作4");
  364. }
  365. else
  366. {
  367. button.EnableWindow(TRUE);
  368. button.SetWindowTextA(pszBtnName4);
  369. }
  370. }
  371. // 查看本地日志
  372. void CSysInfoView::OnViewSysLog(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wnd*/)
  373. {
  374. ResetListAndButtons("ViewLog", "日志文件", "文件路径", "日志列表", "查看日志", NULL, NULL);
  375. auto pFunc = m_pGUITask->GetEntity()->GetFunction();
  376. CSimpleStringA strSysLogPath;
  377. pFunc->GetPath("SysLog", strSysLogPath);
  378. int nItemCount = 0;
  379. m_listView1.InsertItem( nItemCount, "SysLog\\");
  380. m_listView1.SetItemText(nItemCount, 1, strSysLogPath);
  381. nItemCount++;
  382. CSimpleStringA strDbgPath;
  383. pFunc->GetPath("Dbg", strDbgPath);
  384. auto pDbgDirList = fileutil_get_sub_dirs2_a(strDbgPath, 50);
  385. for (int i = 0; i < pDbgDirList->nelts; ++i)
  386. {
  387. char *pszDirName = ARRAY_IDX(pDbgDirList, i, char*);
  388. char *p = strrchr(pszDirName, '\\');
  389. if (p == NULL)
  390. p = pszDirName;
  391. else
  392. p++;
  393. char szName[128];
  394. sprintf(szName, "%s\\", p);
  395. m_listView1.InsertItem( nItemCount, szName);
  396. m_listView1.SetItemText(nItemCount, 1, pszDirName);
  397. nItemCount++;
  398. }
  399. toolkit_array_free2(pDbgDirList);
  400. }
  401. // 日志查看处理
  402. void CSysInfoView::OnViewLogSubCmd(int nID)
  403. {
  404. int nSelectedIndex = m_listView1.GetSelectedIndex();
  405. if (nSelectedIndex <0 || nSelectedIndex >= m_listView1.GetItemCount())
  406. return;
  407. if (nID == IDC_VARBUTTON1)
  408. {
  409. char szName[128] = {};
  410. m_listView1.GetItemText(nSelectedIndex, 0, szName, sizeof(szName));
  411. if (strncmp(szName, " |--", 5) == 0)
  412. {
  413. // 文件层
  414. OutputMsg("当前项非文件目录!\r\n");
  415. return;
  416. }
  417. //MessageBox(CSimpleStringA::Format("日志列表:%s", szName));
  418. // 判断文件夹文件是否已经显示
  419. char szNextName[128] = {};
  420. if (nSelectedIndex < m_listView1.GetItemCount()-1
  421. && m_listView1.GetItemText(nSelectedIndex+1, 0, szNextName, sizeof(szNextName)) >0
  422. && strncmp(szNextName, " |--", 5) == 0)
  423. {
  424. OutputMsg("目录文件已加载!\r\n");
  425. return;
  426. }
  427. char szFullPath[128] = {};
  428. m_listView1.GetItemText(nSelectedIndex, 1, szFullPath, sizeof(szFullPath));
  429. int nInsertIndex = nSelectedIndex + 1;
  430. auto pLogList = fileutil_get_sub_files2_a(szFullPath, 50);
  431. for (int i = 0; i < pLogList->nelts; ++i)
  432. {
  433. char *pszLogPath = ARRAY_IDX(pLogList, i, char*);
  434. char *p = strrchr(pszLogPath, '\\');
  435. if (p == NULL)
  436. p = pszLogPath;
  437. else
  438. p++;
  439. char szLogName[128];
  440. sprintf(szLogName, " |--%s", p);
  441. m_listView1.InsertItem( nInsertIndex, szLogName);
  442. m_listView1.SetItemText(nInsertIndex, 1, pszLogPath);
  443. nInsertIndex++;
  444. }
  445. toolkit_array_free2(pLogList);
  446. OutputMsg(CSimpleStringA::Format("目录[%s]共有%d个日志文件\r\n", szName, nInsertIndex - nSelectedIndex -1));
  447. }
  448. else
  449. {
  450. char szName[128] = {};
  451. m_listView1.GetItemText(nSelectedIndex, 0, szName, sizeof(szName));
  452. if (strncmp(szName, " |--", 5) != 0)
  453. {
  454. OutputMsg("当前非文件项!\r\n");
  455. return;
  456. }
  457. char szLogPath[128] = {};
  458. m_listView1.GetItemText(nSelectedIndex, 1, szLogPath, sizeof(szLogPath));
  459. OutputMsg(CSimpleStringA::Format("查看日志: %s\r\n", szLogPath));
  460. //system(CSimpleStringA::Format("notepad %s", szLogPath));
  461. ShellExecute(NULL,"open","NOTEPAD.EXE",szLogPath,NULL,SW_SHOWNORMAL);
  462. }
  463. }
  464. // 查看实体配置
  465. void CSysInfoView::OnViewEntityConfig(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wnd*/)
  466. {
  467. ResetListAndButtons("ViewConfig", "实体名称", "配置类型", "查看配置", NULL, NULL, NULL);
  468. auto pFunc = m_pGUITask->GetEntity()->GetFunction();
  469. CAutoArray<CSimpleStringA> strEntityNames;
  470. CAutoArray<WORD> wEntityIDs;
  471. pFunc->GetAllRegistedEntity(strEntityNames, wEntityIDs);
  472. m_listView1.InsertItem(0, "Root");
  473. m_listView1.SetItemText(0, 1, "硬件配置");
  474. m_listView1.InsertItem(1, "Shell");
  475. m_listView1.SetItemText(1, 1, "软件配置");
  476. for(int i=0; i<strEntityNames.GetCount(); i++)
  477. {
  478. CSimpleStringA strEntityName = strEntityNames[i];
  479. for(int j=0; j<m_listView1.GetItemCount(); j++)
  480. {
  481. char szText[128] = {};
  482. m_listView1.GetItemText(j, 0, szText, sizeof(szText));
  483. if (stricmp(szText, strEntityName) >0)
  484. {
  485. m_listView1.InsertItem(j, strEntityName);
  486. m_listView1.SetItemText(j, 1, strEntityName=="CenterSetting"? "集中配置":"实体配置");
  487. break;
  488. }
  489. }
  490. }
  491. }
  492. // 实体配置查看处理
  493. void CSysInfoView::OnViewConfigSubCmd(int nID)
  494. {
  495. int nSelectedIndex = m_listView1.GetSelectedIndex();
  496. if (nSelectedIndex <0 || nSelectedIndex >= m_listView1.GetItemCount())
  497. return;
  498. char szEntityName[64];
  499. m_listView1.GetItemText(nSelectedIndex, 0, szEntityName, sizeof(szEntityName));
  500. CSimpleStringA strCfgPath;
  501. auto pFunc = m_pGUITask->GetEntity()->GetFunction();
  502. if (strcmp(szEntityName, "Root") == 0)
  503. {
  504. pFunc->GetPath("HardwareCfg", strCfgPath);
  505. }
  506. else
  507. {
  508. pFunc->GetPath("Cfg", strCfgPath);
  509. }
  510. strCfgPath += CSimpleStringA::Format("\\%s.ini", szEntityName);
  511. if (!ExistsFileA(strCfgPath))
  512. {
  513. OutputMsg(CSimpleStringA::Format("没有找到配置文件%s.ini\r\n", szEntityName));
  514. return;
  515. }
  516. OutputMsg(CSimpleStringA::Format("查看配置%s.ini\r\n", szEntityName));
  517. ShellExecute(NULL,"open","NOTEPAD.EXE",strCfgPath,NULL,SW_SHOWNORMAL);
  518. }
  519. // 查看升级日志
  520. void CSysInfoView::OnViewUpgradeConfig(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wnd*/)
  521. {
  522. ResetListAndButtons("ViewUpgradeLog", "升级日志", "日志路径", "查看日志", NULL, NULL, NULL);
  523. auto pFunc = m_pGUITask->GetEntity()->GetFunction();
  524. CSimpleStringA strPath;
  525. pFunc->GetPath("RunInfo", strPath);
  526. strPath += "\\InstallLog";
  527. int nInsertIndex = 0;
  528. auto pLogList = fileutil_get_sub_files2_a(strPath, 50);
  529. for (int i = 0; i < pLogList->nelts; ++i)
  530. {
  531. char *pszLogPath = ARRAY_IDX(pLogList, i, char*);
  532. char *p = strrchr(pszLogPath, '\\');
  533. if (p == NULL)
  534. p = pszLogPath;
  535. else
  536. p++;
  537. m_listView1.InsertItem( nInsertIndex, p);
  538. m_listView1.SetItemText(nInsertIndex, 1, pszLogPath);
  539. nInsertIndex++;
  540. }
  541. toolkit_array_free2(pLogList);
  542. OutputMsg(CSimpleStringA::Format("共有%d个升级文件\r\n", nInsertIndex));
  543. }
  544. // 查看升级日志处理
  545. void CSysInfoView::OnViewUpgradeLogSubCmd(int nID)
  546. {
  547. int nSelectedIndex = m_listView1.GetSelectedIndex();
  548. if (nSelectedIndex <0 || nSelectedIndex >= m_listView1.GetItemCount())
  549. return;
  550. char szLogName[64];
  551. m_listView1.GetItemText(nSelectedIndex, 0, szLogName, sizeof(szLogName));
  552. char szLogPath[128];
  553. m_listView1.GetItemText(nSelectedIndex, 1, szLogPath, sizeof(szLogPath));
  554. OutputMsg(CSimpleStringA::Format("查看日志文件%s\r\n", szLogName));
  555. ShellExecute(NULL,"open","NOTEPAD.EXE",szLogPath,NULL,SW_SHOWNORMAL);
  556. }
  557. // 查看安装目录
  558. void CSysInfoView::OnViewInstallDir(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wnd*/)
  559. {
  560. ResetListAndButtons("ViewInstallDir", "目录/文件", "文件属性", "返回上层", "查看目录", NULL, NULL);
  561. GetDlgItem(IDC_VARBUTTON1).EnableWindow(FALSE);
  562. auto pFunc = m_pGUITask->GetEntity()->GetFunction();
  563. CSimpleStringA strPath;
  564. pFunc->GetPath("RootVer", strPath);
  565. m_strCurViewDir = strPath;
  566. OnViewInstallDirSubCmd(IDC_VARBUTTON2);
  567. }
  568. // 查看升级日志处理
  569. void CSysInfoView::OnViewInstallDirSubCmd(int nID)
  570. {
  571. if (nID == IDC_VARBUTTON1)
  572. {
  573. auto pFunc = m_pGUITask->GetEntity()->GetFunction();
  574. CSimpleStringA strPath;
  575. pFunc->GetPath("RootVer", strPath);
  576. if (strPath == m_strCurViewDir)
  577. {
  578. OutputMsg("当前目录为根目录\r\n");
  579. return;
  580. }
  581. // 返回上层
  582. char szTmp[256] = {};
  583. strcpy(szTmp, m_strCurViewDir);
  584. char *p = strrchr(szTmp, '\\');
  585. if (p == NULL)
  586. return;
  587. *p = 0;
  588. m_strCurViewDir = szTmp;
  589. if (strPath == m_strCurViewDir)
  590. GetDlgItem(IDC_VARBUTTON1).EnableWindow(FALSE);
  591. }
  592. else if (nID = IDC_VARBUTTON2)
  593. {
  594. // 查看目录
  595. int nSelectedIndex = m_listView1.GetSelectedIndex();
  596. if (nSelectedIndex <0 && m_listView1.GetItemCount() >0)
  597. return;
  598. if (nSelectedIndex>=0)
  599. {
  600. char szDirName[64];
  601. m_listView1.GetItemText(nSelectedIndex, 0, szDirName, sizeof(szDirName));
  602. if (strncmp(szDirName, "[D]", 3) != 0)
  603. {
  604. OutputMsg(CSimpleStringA::Format("当前项不是目录: %sr\n", szDirName));
  605. return;
  606. }
  607. char *p = szDirName + 3;
  608. m_strCurViewDir += CSimpleStringA::Format("\\%s", p);
  609. GetDlgItem(IDC_VARBUTTON1).EnableWindow(TRUE);
  610. }
  611. }
  612. else
  613. {
  614. return;
  615. }
  616. // 显示当前目录项
  617. m_listView1.DeleteAllItems();
  618. int nIndex = 0;
  619. WIN32_FIND_DATAA fd = {};
  620. CSimpleStringA strFindDir = m_strCurViewDir + "\\*";
  621. HANDLE hFind = FindFirstFileA(strFindDir, &fd);
  622. if (hFind != INVALID_HANDLE_VALUE)
  623. {
  624. do
  625. {
  626. if (strcmp(fd.cFileName, ".") == 0 || strcmp(fd.cFileName, "..") == 0)
  627. continue;
  628. if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
  629. {
  630. // 目录
  631. int j =0;
  632. for(; j<nIndex; j++)
  633. {
  634. char szTmp[64];
  635. m_listView1.GetItemText(j, 0, szTmp, sizeof(szTmp));
  636. if(strncmp(szTmp, "[D]", 3) != 0)
  637. break;
  638. }
  639. m_listView1.InsertItem(j, CSimpleStringA::Format("[D]%s", fd.cFileName));
  640. nIndex++;
  641. }
  642. else
  643. {
  644. // 文件
  645. m_listView1.InsertItem(nIndex, fd.cFileName);
  646. SYSTEMTIME st = {};
  647. FILETIME ft = {};
  648. FileTimeToLocalFileTime(&fd.ftLastWriteTime, &ft);
  649. FileTimeToSystemTime(&ft, &st);
  650. DWORD dwSize = fd.nFileSizeLow;
  651. CSimpleStringA strTemp = CSimpleStringA::Format("%.4d-%.2d-%.2d %.2d:%.2d:%.2d修改, %d字节",
  652. st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, dwSize);
  653. m_listView1.SetItemText(nIndex, 1, strTemp);
  654. nIndex++;
  655. }
  656. }
  657. while (FindNextFileA(hFind, &fd));
  658. FindClose(hFind);
  659. }
  660. else
  661. {
  662. OutputMsg("当前目录为空r\n");
  663. }
  664. }
  665. // 监控变量
  666. void CSysInfoView::OnViewSysVar(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wnd*/)
  667. {
  668. ResetListAndButtons("ViewSysVar", "变量名称", "当前值", "手动刷新", "监控变量", "取消监控", NULL);
  669. auto pFunc = m_pGUITask->GetEntity()->GetFunction();
  670. CSimpleStringA strPath;
  671. pFunc->GetPath("Cfg", strPath);
  672. strPath += "\\shell.ini";
  673. auto arr = inifile_read_section_key_all(strPath, "SysEvent");
  674. for (int i = 0; i < arr->nelts; ++i)
  675. {
  676. char *pszVarName = ARRAY_IDX(arr, i, char*);
  677. m_listView1.InsertItem(i, pszVarName);
  678. CSimpleStringA strSysVar;
  679. pFunc->GetSysVar(pszVarName, strSysVar);
  680. m_listView1.SetItemText(i, 1, strSysVar);
  681. }
  682. toolkit_array_free2(arr);
  683. OutputMsg(CSimpleStringA::Format("共%d个系统变量\r\n", m_listView1.GetItemCount()));
  684. }
  685. void CSysInfoView::OnSysVarEvent(const char *pszKey, const char *pszValue,const char *pszOldValue,const char *pszEntityName)
  686. {
  687. for(int i=0; i<m_listView1.GetItemCount(); i++)
  688. {
  689. char szVarName[64];
  690. m_listView1.GetItemText(i, 0, szVarName, sizeof(szVarName));
  691. if (strcmp(pszKey, szVarName) ==0)
  692. {
  693. m_listView1.SetItemText(i, 1, pszValue);
  694. break;
  695. }
  696. }
  697. OutputMsg(CSimpleStringA::Format("[OnSysVarEvent] var: {%s}, old value: {%s}, new value: {%s}\r\n", pszKey, pszOldValue, pszValue));
  698. }
  699. // 查看变量处理
  700. void CSysInfoView::OnViewSysVarSubCmd(int nID)
  701. {
  702. auto pFunc = m_pGUITask->GetEntity()->GetFunction();
  703. if (nID == IDC_VARBUTTON1) // 手工刷新
  704. {
  705. for(int i=0; i<m_listView1.GetItemCount(); i++)
  706. {
  707. char szVarName[64] = {};
  708. m_listView1.GetItemText(i, 0, szVarName, sizeof(szVarName));
  709. CSimpleStringA strSysVar;
  710. pFunc->GetSysVar(szVarName, strSysVar);
  711. m_listView1.SetItemText(i, 1, strSysVar);
  712. }
  713. }
  714. else if(nID == IDC_VARBUTTON2) // 订阅当前变量
  715. {
  716. int nSelectedIndex = m_listView1.GetSelectedIndex();
  717. if (nSelectedIndex <0 || nSelectedIndex >= m_listView1.GetItemCount())
  718. return;
  719. char szVarName[64];
  720. m_listView1.GetItemText(nSelectedIndex, 0, szVarName, sizeof(szVarName));
  721. auto rc = pFunc->RegistSysVarEvent(szVarName, this);
  722. if (rc == Error_Succeed)
  723. {
  724. OutputMsg(CSimpleStringA::Format("监控系统变量(%s)成功\r\n", szVarName));
  725. }
  726. else
  727. {
  728. OutputMsg(CSimpleStringA::Format("监控系统变量(%s)失败: 0x%X\r\n", szVarName, rc));
  729. }
  730. }
  731. else if(nID == IDC_VARBUTTON3) // 取消订阅
  732. {
  733. int nSelectedIndex = m_listView1.GetSelectedIndex();
  734. if (nSelectedIndex <0 || nSelectedIndex >= m_listView1.GetItemCount())
  735. return;
  736. char szVarName[64];
  737. m_listView1.GetItemText(nSelectedIndex, 0, szVarName, sizeof(szVarName));
  738. auto rc = pFunc->UnregistSysVarEvent(szVarName);
  739. if (rc == Error_Succeed)
  740. {
  741. OutputMsg(CSimpleStringA::Format("取消监控系统变量(%s)成功\r\n", szVarName));
  742. }
  743. else
  744. {
  745. OutputMsg(CSimpleStringA::Format("取消监控系统变量(%s)失败: 0x%X\r\n", szVarName, rc));
  746. }
  747. }
  748. }
  749. // 监控实体日志
  750. void CSysInfoView::OnMonitorSysLog(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wnd*/)
  751. {
  752. ResetListAndButtons("MonitorLog", "实体名称", "是否监控", "开始监控输出", "停止监控输出", "开始监控实体", "停止监控实体");
  753. if(m_pGUITask->HasSubscibeLog())
  754. {
  755. GetDlgItem(IDC_VARBUTTON1).EnableWindow(FALSE);
  756. GetDlgItem(IDC_VARBUTTON2).EnableWindow(TRUE);
  757. }
  758. else
  759. {
  760. GetDlgItem(IDC_VARBUTTON1).EnableWindow(TRUE);
  761. GetDlgItem(IDC_VARBUTTON2).EnableWindow(FALSE);
  762. }
  763. auto pFunc = m_pGUITask->GetEntity()->GetFunction();
  764. CAutoArray<CSimpleStringA> strEntityNames;
  765. CAutoArray<WORD> wEntityIDs;
  766. auto rc = pFunc->GetAllRegistedEntity(strEntityNames, wEntityIDs);
  767. int i=0;
  768. for(; i<strEntityNames.GetCount(); i++)
  769. {
  770. int j=0;
  771. for(; j<i; j++)
  772. {
  773. char szName[64] = {};
  774. m_listView1.GetItemText(j, 0, szName, sizeof(szName));
  775. if (stricmp(strEntityNames[i], szName) <0)
  776. break;
  777. }
  778. m_listView1.InsertItem(j, strEntityNames[i]);
  779. CEntityRunInfo info = {};
  780. pFunc->GetEntityRunInfo(strEntityNames[i], info);
  781. m_listView1.SetItemText(j, 1, info.eDebugLevel > 0 ? "Y" : "N");
  782. }
  783. OutputMsg(CSimpleStringA::Format("共%d个实体\r\n", i));
  784. }
  785. LRESULT CSysInfoView::OnListItemchanged(NMHDR* phdr)
  786. {
  787. NMLISTVIEW* pNMListView = (NMLISTVIEW*) phdr;
  788. if((pNMListView->uChanged==LVIF_STATE) && (pNMListView->uNewState & LVIS_SELECTED))
  789. {
  790. // 选中某项
  791. int nIndex = pNMListView->iItem;
  792. char szName[64] = {};
  793. m_listView1.GetItemText(nIndex, 0, szName, sizeof(szName));
  794. if (m_strOpName == "ViewLog") // 显示日志
  795. {
  796. if (strncmp(szName, " |--", 5) == 0)
  797. {
  798. GetDlgItem(IDC_VARBUTTON1).EnableWindow(FALSE);
  799. GetDlgItem(IDC_VARBUTTON2).EnableWindow(TRUE);
  800. }
  801. else
  802. {
  803. GetDlgItem(IDC_VARBUTTON1).EnableWindow(TRUE);
  804. GetDlgItem(IDC_VARBUTTON2).EnableWindow(FALSE);
  805. }
  806. }
  807. else if (m_strOpName == "ViewInstallDir") // 显示安装目录
  808. {
  809. if (strncmp(szName, "[D]", 3) == 0)
  810. GetDlgItem(IDC_VARBUTTON2).EnableWindow(TRUE);
  811. else
  812. GetDlgItem(IDC_VARBUTTON2).EnableWindow(FALSE);
  813. }
  814. else if (m_strOpName == "MonitorLog") // 监控日志
  815. {
  816. CEntityRunInfo info = {};
  817. auto pFunc = m_pGUITask->GetEntity()->GetFunction();
  818. pFunc->GetEntityRunInfo(szName, info);
  819. if (info.eDebugLevel >0)
  820. {
  821. GetDlgItem(IDC_VARBUTTON3).EnableWindow(FALSE);
  822. GetDlgItem(IDC_VARBUTTON4).EnableWindow(TRUE);
  823. }
  824. else
  825. {
  826. GetDlgItem(IDC_VARBUTTON3).EnableWindow(TRUE);
  827. GetDlgItem(IDC_VARBUTTON4).EnableWindow(FALSE);
  828. }
  829. }
  830. }
  831. return 0;
  832. }
  833. // 监控日志处理
  834. void CSysInfoView::OnMonitorLogSubCmd(int nID)
  835. {
  836. if (nID == IDC_VARBUTTON1) // 开始监控
  837. {
  838. auto rc = m_pGUITask->SubscribeLog();
  839. if (rc == Error_Succeed)
  840. {
  841. GetDlgItem(IDC_VARBUTTON1).EnableWindow(FALSE);
  842. GetDlgItem(IDC_VARBUTTON2).EnableWindow(TRUE);
  843. OutputMsg("开始监控日志成功\r\n");
  844. }
  845. else
  846. {
  847. OutputMsg(CSimpleStringA::Format("开始监控日志失败: 0x%X\r\n", rc));
  848. }
  849. }
  850. else if (nID == IDC_VARBUTTON2) // 停止监控
  851. {
  852. auto rc = m_pGUITask->UnSubscribeLog();
  853. if (rc == Error_Succeed)
  854. {
  855. GetDlgItem(IDC_VARBUTTON1).EnableWindow(TRUE);
  856. GetDlgItem(IDC_VARBUTTON2).EnableWindow(FALSE);
  857. OutputMsg("结束监控日志成功\r\n");
  858. }
  859. else
  860. {
  861. OutputMsg(CSimpleStringA::Format("结束监控日志失败: 0x%X\r\n", rc));
  862. }
  863. }
  864. else if (nID == IDC_VARBUTTON3) // 监控实体
  865. {
  866. int nSelected = m_listView1.GetSelectedIndex();
  867. if (nSelected <0)
  868. return;
  869. char szName[64] = {};
  870. m_listView1.GetItemText(nSelected, 0, szName, sizeof(szName));
  871. auto rc = m_pGUITask->SetDebugLevel(szName, 1);
  872. if (rc == Error_Succeed)
  873. {
  874. CEntityRunInfo info = {};
  875. auto pFunc = m_pGUITask->GetEntity()->GetFunction();
  876. pFunc->GetEntityRunInfo(szName, info);
  877. assert(info.eDebugLevel >0);
  878. m_listView1.SetItemText(nSelected, 1, "Y");
  879. GetDlgItem(IDC_VARBUTTON3).EnableWindow(FALSE);
  880. GetDlgItem(IDC_VARBUTTON4).EnableWindow(TRUE);
  881. OutputMsg(CSimpleStringA::Format("监控实体{%s}日志成功\r\n", szName));
  882. }
  883. else
  884. {
  885. OutputMsg(CSimpleStringA::Format("监控实体{%s}日志失败: 0x%X\r\n", szName, rc));
  886. }
  887. }
  888. else if (nID == IDC_VARBUTTON4) // 停止监控实体
  889. {
  890. int nSelected = m_listView1.GetSelectedIndex();
  891. if (nSelected <0)
  892. return;
  893. char szName[64] = {};
  894. m_listView1.GetItemText(nSelected, 0, szName, sizeof(szName));
  895. auto rc = m_pGUITask->SetDebugLevel(szName, 0);
  896. if (rc == Error_Succeed)
  897. {
  898. CEntityRunInfo info = {};
  899. auto pFunc = m_pGUITask->GetEntity()->GetFunction();
  900. pFunc->GetEntityRunInfo(szName, info);
  901. assert(info.eDebugLevel ==0);
  902. m_listView1.SetItemText(nSelected, 1, "N");
  903. GetDlgItem(IDC_VARBUTTON3).EnableWindow(TRUE);
  904. GetDlgItem(IDC_VARBUTTON4).EnableWindow(FALSE);
  905. OutputMsg(CSimpleStringA::Format("取消监控实体{%s}日志成功\r\n", szName));
  906. }
  907. else
  908. {
  909. OutputMsg(CSimpleStringA::Format("取消监控实体{%s}日志失败: 0x%X\r\n", szName, rc));
  910. }
  911. }
  912. }
  913. // 查看已下载文件
  914. void CSysInfoView::OnViewDownloadFile(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wnd*/)
  915. {
  916. ResetListAndButtons("ViewDownload", "已下载文件", NULL, NULL, NULL, NULL, NULL);
  917. auto pFunc = m_pGUITask->GetEntity()->GetFunction();
  918. CSimpleStringA strPath;
  919. pFunc->GetPath("Downloads", strPath);
  920. auto pFileList = fileutil_get_sub_files2_a(strPath, 50);
  921. for (int i = 0; i < pFileList->nelts; ++i)
  922. {
  923. char *pszFileName = ARRAY_IDX(pFileList, i, char*);
  924. char *p = strrchr(pszFileName, '\\');
  925. if (p == NULL)
  926. p = pszFileName;
  927. else
  928. p++;
  929. m_listView1.InsertItem( i, p);
  930. }
  931. toolkit_array_free2(pFileList);
  932. }
  933. void CSysInfoView::OnVarButton(UINT /*uNotifyCode*/, int nID, CWindow /*wnd*/)
  934. {
  935. if (m_strOpName == "ViewLog")
  936. {
  937. OnViewLogSubCmd(nID);
  938. }
  939. else if (m_strOpName == "ViewConfig")
  940. {
  941. OnViewConfigSubCmd(nID);
  942. }
  943. else if (m_strOpName == "ViewUpgradeLog")
  944. {
  945. OnViewUpgradeLogSubCmd(nID);
  946. }
  947. else if (m_strOpName == "ViewInstallDir")
  948. {
  949. OnViewInstallDirSubCmd(nID);
  950. }
  951. else if (m_strOpName == "ViewSysVar")
  952. {
  953. OnViewSysVarSubCmd(nID);
  954. }
  955. else if (m_strOpName == "MonitorLog")
  956. {
  957. OnMonitorLogSubCmd(nID);
  958. }
  959. }
  960. LRESULT CSysInitView::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam)
  961. {
  962. DoDataExchange(FALSE);
  963. InitMessage();
  964. changeMessageFilter(TRUE);
  965. InitRect();
  966. InitWidget();
  967. InitDll();
  968. CheckSystemInit();
  969. return 0;
  970. }
  971. void CSysInitView::InitRect()
  972. {
  973. CRect tempRect;
  974. GetClientRect(tempRect);
  975. m_systemInitBtnRect = CRect(tempRect.Width() / 3 - 55, tempRect.top + 25, tempRect.Width() / 3 + 55, tempRect.top + 40);
  976. m_systemRetoreBtnRect = CRect(tempRect.Width() / 6 * 5 - 55, tempRect.top + 25, tempRect.Width() / 6 * 5 + 55, tempRect.top + 40);
  977. m_accountConfigCheckRect = CRect(m_systemInitBtnRect.left - 165, m_systemInitBtnRect.bottom + 10
  978. , m_systemInitBtnRect.left - 55, m_systemInitBtnRect.bottom + 30);
  979. m_voiceConfigCheckRect = CRect(m_accountConfigCheckRect.right, m_systemInitBtnRect.bottom + 10
  980. , m_accountConfigCheckRect.right + 110, m_systemInitBtnRect.bottom + 30);
  981. m_closeWifiCheckRect = CRect(m_voiceConfigCheckRect.right, m_systemInitBtnRect.bottom + 10
  982. , m_voiceConfigCheckRect.right + 110, m_systemInitBtnRect.bottom + 30);
  983. m_closeAutoRotationCheckRect = CRect(m_closeWifiCheckRect.right, m_systemInitBtnRect.bottom + 10, m_closeWifiCheckRect.right + 110, m_systemInitBtnRect.bottom + 30);
  984. m_defaultDixCheckRect = CRect(m_accountConfigCheckRect.left, m_accountConfigCheckRect.bottom + 5
  985. , m_accountConfigCheckRect.right, m_accountConfigCheckRect.bottom + 25);
  986. m_minDPICheckRect = CRect(m_voiceConfigCheckRect.left, m_voiceConfigCheckRect.bottom + 5
  987. , m_voiceConfigCheckRect.right, m_voiceConfigCheckRect.bottom + 25);
  988. m_systemMainIntiCheckRect = CRect(m_closeWifiCheckRect.left, m_closeWifiCheckRect.bottom + 5, m_closeWifiCheckRect.right, m_closeWifiCheckRect.bottom + 25);
  989. m_systemMainRestoreCheckRect = CRect(m_systemRetoreBtnRect.left, m_systemRetoreBtnRect.bottom + 5, m_systemRetoreBtnRect.left + 110, m_systemRetoreBtnRect.bottom + 25);
  990. m_initStaticRect = CRect(m_accountConfigCheckRect.left - 5, m_systemInitBtnRect.top - 17,
  991. m_closeAutoRotationCheckRect.right + 5, m_systemMainIntiCheckRect.bottom + 5);
  992. m_restoreStaticRect = CRect(m_systemRetoreBtnRect.left - 5, m_systemRetoreBtnRect.top - 17,
  993. m_systemRetoreBtnRect.right + 5, m_systemMainRestoreCheckRect.bottom + 5);
  994. m_msgListRect = CRect(10, m_systemMainIntiCheckRect.bottom + 10, tempRect.right - 10, tempRect.bottom - 10);
  995. }
  996. void CSysInitView::InitWidget()
  997. {
  998. m_systemInitBtn.MoveWindow(m_systemInitBtnRect);
  999. m_systemRetoreBtn.MoveWindow(m_systemRetoreBtnRect);
  1000. m_accountConfigCheck.MoveWindow(&m_accountConfigCheckRect);
  1001. m_voiceConfigCheck.MoveWindow(&m_voiceConfigCheckRect);
  1002. m_closeWifiCheck.MoveWindow(&m_closeWifiCheckRect);
  1003. m_closeAutoRotationCheck.MoveWindow(&m_closeAutoRotationCheckRect);
  1004. m_systemMainIntiCheck.MoveWindow(&m_systemMainIntiCheckRect);
  1005. m_defaultDixCheck.MoveWindow(&m_defaultDixCheckRect);
  1006. m_minDPICheck.MoveWindow(&m_minDPICheckRect);
  1007. m_systemMainRestoreCheck.MoveWindow(&m_systemMainRestoreCheckRect);
  1008. m_msgList.MoveWindow(&m_msgListRect);
  1009. m_initStatic.MoveWindow(&m_initStaticRect);
  1010. m_restoreStatic.MoveWindow(&m_restoreStaticRect);
  1011. m_systemInitBtn.SetCheck(1);
  1012. m_systemMainRestoreCheck.SetCheck(1);
  1013. CRect m_rect;
  1014. GetClientRect(&m_rect); //获取对话框的大小
  1015. m_msgList.AddColumn(_T("初始化步骤"), 0);
  1016. m_msgList.AddColumn(_T("结果"), 1);
  1017. RECT rc = {};
  1018. m_msgList.GetClientRect(&rc);
  1019. m_msgList.SetColumnWidth(0, (rc.right-rc.left)* 15 / 20);
  1020. m_msgList.SetColumnWidth(1, LVSCW_AUTOSIZE_USEHEADER);
  1021. ListView_SetExtendedListViewStyle(m_msgList.m_hWnd, m_msgList.GetStyle() | LVS_EX_GRIDLINES);
  1022. }
  1023. void CSysInitView::InitDll()
  1024. {
  1025. CString dllPath =CString(_T("libSysInit.dll"));
  1026. m_dllWrc = LoadLibrary(dllPath);
  1027. RVCInit_SetLogPath = (RVCINIT_SETLOGPATH)GetProcAddress(m_dllWrc, RVCINITSETLOGPATH);
  1028. RVCInit_sysInitBegin = (RVCINIT_SYSINITBEGIN)GetProcAddress(m_dllWrc, RVCINITSYSINITBEGIN);
  1029. RVCInit_isSystemx64 = (RVCINIT_ISSYSTEMX64)GetProcAddress(m_dllWrc, RVCINITISSYSTEMX64);
  1030. RVCInit_sysTypeCheck = (RVCINIT_SYSTYPECHECK)GetProcAddress(m_dllWrc, RVCINITSYSTYPECHECK);
  1031. RVCInit_EnableAdmin = (RVCINIT_ENABLEADMIN)GetProcAddress(m_dllWrc, RVCINITENABLEADMIN);
  1032. RVCInit_RemoveOtherAccouts = (RVCINIT_REMOVEOTHERACCOUTS)GetProcAddress(m_dllWrc, RVCINITREMOVEOTHERACCOUTS);
  1033. RVCInit_AddCmbUser = (RVCINIT_ADDCMBUSER)GetProcAddress(m_dllWrc, RVCINITADDCMBUSER);
  1034. RVCInit_checkAccounts = (RVCINIT_CHECKACCOUNTS)GetProcAddress(m_dllWrc, RVCINITCHECKACCOUNTS);
  1035. RVCInit_VoiceConfigDefault = (RVCINIT_VOICECONFIGDEFAULT)GetProcAddress(m_dllWrc, RVCINITVOICECONFIGDEFAULT);
  1036. RVCInit_CheckVoiceDefault = (RVCINIT_CHECKVOICEDEFAULT)GetProcAddress(m_dllWrc, RVCINITCHECKVOICEDEFAULT);
  1037. RVCInit_CloseWifi = (RVCINIT_CLOSEWIFI)GetProcAddress(m_dllWrc, RVCINITCLOSEWIFI);
  1038. RVCInit_CheckWifi = (RVCINIT_CHECKWIFI)GetProcAddress(m_dllWrc, RVCINITCHECKWIFI);
  1039. RVCInit_CheckWifiExist = (RVCINIT_CHECKWIFIEXIST)GetProcAddress(m_dllWrc, RVCINITCHECKWIFIEXIST);
  1040. RVCInit_CloseAutoRotation = (RVCINIT_CLOSEAUTOROTATION)GetProcAddress(m_dllWrc, RVCINITCLOSEAUTOROTATION);
  1041. RVCInit_checkAutoRotation = (RVCINIT_CHECKAUTOROTATION)GetProcAddress(m_dllWrc, RVCINITCHECKAUTOROTATION);
  1042. RVCInit_setScreen = (RVCINIT_SETSCREEN)GetProcAddress(m_dllWrc, RVCINITSETSCREEN);
  1043. RVCInit_checkScreen = (RVCINIT_CHECKSCREEN)GetProcAddress(m_dllWrc, RVCINITCHECKSCREEN);
  1044. RVCInit_SetMinDPI = (RVCINIT_SETMINDPI)GetProcAddress(m_dllWrc, RVCINITSETMINDPI);
  1045. RVCInit_checkMinDPI = (RVCINIT_CHECKMINDPI)GetProcAddress(m_dllWrc, RVCINITCHECKMINDPI);
  1046. RVCInit_InitAdmin = (RVCINIT_INITADMIN)GetProcAddress(m_dllWrc, RVCINITINITADMIN);
  1047. RVCInit_InitCmbUser = (RVCINIT_INITCMBUSER)GetProcAddress(m_dllWrc, RVCINITINITCMBUSER);
  1048. RVCInit_checkMainInit = (RVCINIT_CHECKMAININIT)GetProcAddress(m_dllWrc, RVCINITCHECKMAININIT);
  1049. RVCInit_mainInit = (RVCINIT_MAININIT)GetProcAddress(m_dllWrc, RVCINITMAININIT);
  1050. RVCInit_endInit = (RVCINIT_ENDINIT)GetProcAddress(m_dllWrc, RVCINITENDINIT);
  1051. RVCInit_InitRestore = (RVCINIT_INITRESTORE)GetProcAddress(m_dllWrc, RVCINITINITRESTORE);
  1052. if (NULL == m_dllWrc || NULL == RVCInit_SetLogPath || NULL == RVCInit_sysInitBegin || NULL == RVCInit_EnableAdmin || NULL == RVCInit_RemoveOtherAccouts
  1053. || NULL == RVCInit_AddCmbUser || NULL == RVCInit_checkAccounts || NULL == RVCInit_VoiceConfigDefault || NULL == RVCInit_CheckVoiceDefault
  1054. || NULL == RVCInit_CloseWifi || NULL == RVCInit_CloseAutoRotation || NULL == RVCInit_checkAutoRotation || NULL == RVCInit_setScreen
  1055. || NULL == RVCInit_checkScreen || NULL == RVCInit_SetMinDPI || NULL == RVCInit_checkMinDPI || NULL == RVCInit_mainInit
  1056. || NULL == RVCInit_endInit || NULL == RVCInit_InitRestore || NULL == RVCInit_InitAdmin || NULL == RVCInit_InitCmbUser
  1057. || NULL == RVCInit_isSystemx64 || NULL == RVCInit_sysTypeCheck || NULL == RVCInit_checkMainInit || NULL == RVCInit_CheckWifi
  1058. || NULL == RVCInit_CheckWifiExist)
  1059. {
  1060. MessageBox(_T("加载libSysInit.dll失败,请检查文件"));
  1061. }
  1062. CSimpleStringA strDbgPath;
  1063. auto pFunc = m_pGUITask->GetEntity()->GetFunction();
  1064. pFunc->GetPath("Dbg", strDbgPath);
  1065. char logPath[300] = "";
  1066. sprintf(logPath, "%s\\SysInit", strDbgPath.GetData());
  1067. RVCInit_SetLogPath(logPath);
  1068. }
  1069. void CSysInitView::OutputMsg(const char *pMsg)
  1070. {
  1071. ::PostMessage(GetTopLevelParent().m_hWnd, WM_SHOW_MSG, 0, (LPARAM) strdup(pMsg));
  1072. }
  1073. void CSysInitView::AddMsgToListView(CString item, CString result)
  1074. {
  1075. m_msgList.InsertItem(nItemCount, item);
  1076. m_msgList.SetItemText(nItemCount, 1, result);
  1077. nItemCount++;
  1078. }
  1079. void CSysInitView::EasyAddMsgToListView(CString item, BOOL isSuccess)
  1080. {
  1081. AddMsgToListView(item, isSuccess ? _T("成功") : _T("失败"));
  1082. }
  1083. void CSysInitView::CleanListView()
  1084. {
  1085. m_msgList.DeleteAllItems();//清空上一次显示内容
  1086. nItemCount = 0;
  1087. }
  1088. void CSysInitView::CheckSystemInit()
  1089. {
  1090. auto pFunc = m_pGUITask->GetEntity()->GetFunction();
  1091. CSmartPointer<IConfigInfo> spConfig;
  1092. auto rc = pFunc->OpenConfig(Config_CenterSetting, spConfig);
  1093. if (rc != Error_Succeed)
  1094. return;
  1095. int checkSysInit = 0;
  1096. rc = spConfig->ReadConfigValueInt(m_pGUITask->GetEntity()->GetEntityName(), "CheckSysInit", checkSysInit);
  1097. if (rc != Error_Succeed)
  1098. return;
  1099. CSystemStaticInfo stStaticinfo;
  1100. pFunc->GetSystemStaticInfo(stStaticinfo);
  1101. if (1 == checkSysInit)
  1102. CloseHandle((HANDLE)_beginthreadex(NULL, 0, (unsigned int(__stdcall *)(void *))SysInitCheck, this, 0, NULL));
  1103. }
  1104. void CSysInitView::modifyCheckStatus(DWORD status)
  1105. {
  1106. m_accountConfigCheck.SetCheck(1);
  1107. /*默认必须设置账户
  1108. if (ENABLE_ACCOUNT_CONFIG == (status & ENABLE_ACCOUNT_CONFIG))
  1109. m_accountConfigCheck.SetCheck(1);
  1110. else
  1111. m_accountConfigCheck.SetCheck(0);
  1112. */
  1113. if (ENABLE_VOICE_CONFIG == (status & ENABLE_VOICE_CONFIG))
  1114. m_voiceConfigCheck.SetCheck(1);
  1115. else
  1116. m_voiceConfigCheck.SetCheck(0);
  1117. if (ENABLE_CLOSE_WIFI == (status & ENABLE_CLOSE_WIFI))
  1118. m_closeWifiCheck.SetCheck(1);
  1119. else
  1120. m_closeWifiCheck.SetCheck(0);
  1121. if (ENABLE_CLOSE_ROTATION == (status & ENABLE_CLOSE_ROTATION))
  1122. m_closeAutoRotationCheck.SetCheck(1);
  1123. else
  1124. m_closeAutoRotationCheck.SetCheck(0);
  1125. if (ENABLE_DEFAULT_DIX == (status & ENABLE_DEFAULT_DIX))
  1126. m_defaultDixCheck.SetCheck(1);
  1127. else
  1128. m_defaultDixCheck.SetCheck(0);
  1129. if(ENABLE_MIN_DPI == (status & ENABLE_MIN_DPI))
  1130. m_minDPICheck.SetCheck(1);
  1131. else
  1132. m_minDPICheck.SetCheck(0);
  1133. if(ENABLE_MAIN_INIT == (status & ENABLE_MAIN_INIT))
  1134. m_systemMainIntiCheck.SetCheck(1);
  1135. else
  1136. m_systemMainIntiCheck.SetCheck(0);
  1137. }
  1138. DWORD SysInitCheck(LPVOID lpv)
  1139. {
  1140. CSysInitView *sysInit = (CSysInitView *)lpv;
  1141. DWORD result = 0;
  1142. if (RVCInit_checkAccounts())
  1143. sysInit->AddMsgToListView(_T("操作系统定制:检查账户状态"), _T("已定制"));
  1144. else
  1145. {
  1146. result |= ENABLE_ACCOUNT_CONFIG;
  1147. sysInit->AddMsgToListView(_T("操作系统定制:检查账户状态"), _T("未定制"));
  1148. }
  1149. if (RVCInit_CheckVoiceDefault())
  1150. sysInit->AddMsgToListView(_T("操作系统定制:检查声音配置"), _T("已定制"));
  1151. else
  1152. {
  1153. result |= ENABLE_VOICE_CONFIG;
  1154. sysInit->AddMsgToListView(_T("操作系统定制:检查声音配置"), _T("未定制"));
  1155. }
  1156. if (RVCInit_CheckWifiExist())
  1157. {
  1158. if (RVCInit_CheckWifi())
  1159. {
  1160. result |= ENABLE_CLOSE_WIFI;
  1161. sysInit->AddMsgToListView(_T("操作系统定制:检查是否关闭无线网卡"), _T("未定制"));
  1162. }
  1163. else
  1164. sysInit->AddMsgToListView(_T("操作系统定制:检查是否关闭无线网卡"), _T("已定制"));
  1165. }
  1166. else
  1167. sysInit->AddMsgToListView(_T("操作系统定制:未检测到无线网卡!!"), _T(""));
  1168. if (RVCInit_checkAutoRotation())
  1169. {
  1170. result |= ENABLE_CLOSE_ROTATION;
  1171. sysInit->AddMsgToListView(_T("操作系统定制:检查是否关闭自动旋转"), _T("未定制"));
  1172. }
  1173. else
  1174. sysInit->AddMsgToListView(_T("操作系统定制:检查是否关闭自动旋转"), _T("已定制"));
  1175. if (RVCInit_checkScreen(1920, 1080))
  1176. sysInit->AddMsgToListView(_T("操作系统定制:检查屏幕分辨率设置为1920*1080"), _T("已定制"));
  1177. else
  1178. {
  1179. result |= ENABLE_DEFAULT_DIX;
  1180. sysInit->AddMsgToListView(_T("操作系统定制:检查屏幕分辨率设置为1920*1080"), _T("未定制"));
  1181. }
  1182. TCHAR userName[256];
  1183. DWORD nameLen = 256;
  1184. if (!GetUserName(userName, &nameLen))
  1185. return FALSE;
  1186. CString showMsg;
  1187. showMsg.Format(_T("操作系统定制:检查当前账户%s设置为最小项目"), userName);
  1188. if (RVCInit_checkMinDPI(NULL, userName))
  1189. sysInit->AddMsgToListView(showMsg, _T("已定制"));
  1190. else
  1191. {
  1192. result |= ENABLE_MIN_DPI;
  1193. sysInit->AddMsgToListView(showMsg, _T("未定制"));
  1194. }
  1195. TCHAR errMsg[1024] = _T("");
  1196. if (RVCInit_checkMainInit(errMsg))
  1197. sysInit->AddMsgToListView(_T("操作系统定制:框架初始化"), _T("已定制"));
  1198. else
  1199. {
  1200. result |= ENABLE_MAIN_INIT;
  1201. sysInit->AddMsgToListView(errMsg, _T("未定制"));
  1202. }
  1203. sysInit->modifyCheckStatus(result);
  1204. if (ENABLE_NONE_CONFIG != result)
  1205. {
  1206. //检查失败,需要进行定制
  1207. ::PostMessage(sysInit->GetParent(), WM_CHECK_SYSINIT_FAIL, NULL, NULL);
  1208. sysInit->OutputMsg("检测到未完成系统定制,请先进行系统定制");
  1209. }
  1210. else
  1211. ::PostMessageA(sysInit->GetParent(), WM_CHECK_SYSINIT_SUCCESS, NULL, NULL);
  1212. return result;
  1213. }
  1214. BOOL CSysInitView::CheckThreadRunning()
  1215. {
  1216. DWORD initCode = 0, restoreCode = 0;
  1217. if (NULL == m_initThread && NULL == m_restoreThread)
  1218. return TRUE;
  1219. if (NULL != m_initThread) ::GetExitCodeThread(m_initThread, &initCode);
  1220. if (NULL != m_restoreThread) ::GetExitCodeThread(m_restoreThread, &restoreCode);
  1221. if (STILL_ACTIVE == initCode)
  1222. {
  1223. MessageBox(_T("正在进行系统定制,请不要重复点击"));
  1224. return FALSE;
  1225. }
  1226. else if (STILL_ACTIVE == restoreCode)
  1227. {
  1228. MessageBox(_T("正在进行系统定制还原,请不要重复点击"));
  1229. return FALSE;
  1230. }
  1231. return TRUE;
  1232. }
  1233. void CSysInitView::TestHighLevelDbg(BOOL isShow, BOOL isHighLevel)
  1234. {
  1235. ::PostMessage(this->GetParent(), WM_SHOW_MAINTAIN_VIEW, isShow ? 1 : 0, isHighLevel ? 1 : 0);
  1236. }
  1237. DWORD SysInitBegin(LPVOID lpv)
  1238. {
  1239. CSysInitView *initDlg = (CSysInitView *)lpv;
  1240. initDlg->CleanListView();
  1241. CString showMsg;
  1242. TCHAR errMsg[1024] = _T("");
  1243. char rvcInitDir[1024] = "";
  1244. if (!getRvcInitDir(rvcInitDir))
  1245. return 0;
  1246. initDlg->AddMsgToListView(_T("正在进行文件拷贝..."), _T(""));
  1247. if (!RVCInit_sysInitBegin(rvcInitDir, errMsg))
  1248. {
  1249. initDlg->EasyAddMsgToListView(_T("操作系统定制初始化"), FALSE);
  1250. return 0;
  1251. }
  1252. else
  1253. {
  1254. initDlg->EasyAddMsgToListView(_T("Dll文件拷贝"), TRUE);
  1255. showMsg.Format(_T("当前操作系统版本为%d位"), RVCInit_isSystemx64() ? 64 : 32);
  1256. initDlg->AddMsgToListView(showMsg, _T(""));
  1257. }
  1258. if (1 == initDlg->m_accountConfigCheck.GetCheck())
  1259. {
  1260. showMsg.Format(_T("开启管理员账号"));
  1261. if (!RVCInit_EnableAdmin())
  1262. {
  1263. initDlg->EasyAddMsgToListView(showMsg, FALSE);
  1264. return 0;
  1265. }
  1266. else
  1267. initDlg->EasyAddMsgToListView(showMsg, TRUE);
  1268. showMsg.Format(_T("删除其他账户"));
  1269. if (!RVCInit_RemoveOtherAccouts())
  1270. {
  1271. initDlg->EasyAddMsgToListView(showMsg, FALSE);
  1272. return 0;
  1273. }
  1274. else
  1275. initDlg->EasyAddMsgToListView(showMsg, TRUE);
  1276. showMsg.Format(_T("创建CmbUser"));
  1277. if (!RVCInit_AddCmbUser())
  1278. {
  1279. initDlg->EasyAddMsgToListView(showMsg, FALSE);
  1280. return 0;
  1281. }
  1282. else
  1283. initDlg->EasyAddMsgToListView(showMsg, TRUE);
  1284. }
  1285. if (1 == initDlg->m_voiceConfigCheck.GetCheck())
  1286. {
  1287. showMsg.Format(_T("声音配置"));
  1288. if (!RVCInit_VoiceConfigDefault())
  1289. {
  1290. initDlg->EasyAddMsgToListView(showMsg, FALSE);
  1291. return 0;
  1292. }
  1293. else
  1294. initDlg->EasyAddMsgToListView(showMsg, TRUE);
  1295. }
  1296. if (1 == initDlg->m_closeWifiCheck.GetCheck())
  1297. {
  1298. if (RVCInit_CheckWifiExist())
  1299. {
  1300. if (!RVCInit_CloseWifi())
  1301. {
  1302. showMsg.Format(_T("未能禁用wifi,请检查是否存在无线网卡"));
  1303. initDlg->EasyAddMsgToListView(showMsg, FALSE);
  1304. return 0;
  1305. }
  1306. else
  1307. {
  1308. showMsg.Format(_T("禁用wifi"));
  1309. initDlg->EasyAddMsgToListView(showMsg, TRUE);
  1310. }
  1311. }
  1312. else
  1313. initDlg->AddMsgToListView(_T("未检测到无线网卡,未进行相关设置"), _T(""));
  1314. }
  1315. if (1 == initDlg->m_closeAutoRotationCheck.GetCheck())
  1316. {
  1317. showMsg.Format(_T("禁用自动旋转"));
  1318. if (PAD_LIB == RVCInit_sysTypeCheck() || PAD_FLB == RVCInit_sysTypeCheck())
  1319. {
  1320. if (!RVCInit_CloseAutoRotation())
  1321. {
  1322. initDlg->EasyAddMsgToListView(showMsg, FALSE);
  1323. return 0;
  1324. }
  1325. else
  1326. initDlg->EasyAddMsgToListView(showMsg, TRUE);
  1327. }
  1328. else
  1329. initDlg->AddMsgToListView(_T("检测到当前设备不是PAD,未能禁用自动旋转功能!"), _T(""));
  1330. }
  1331. if (1 == initDlg->m_defaultDixCheck.GetCheck())
  1332. {
  1333. showMsg.Format(_T("设置分辨率为1920*1080"));
  1334. if (!RVCInit_setScreen(1920, 1080))
  1335. {
  1336. initDlg->EasyAddMsgToListView(showMsg, FALSE);
  1337. return 0;
  1338. }
  1339. else
  1340. initDlg->EasyAddMsgToListView(showMsg, TRUE);
  1341. }
  1342. if (!RVCInit_checkAccounts())
  1343. {
  1344. initDlg->EasyAddMsgToListView(_T("检查到账户信息不正确,请先进行账户配置"), FALSE);
  1345. return 0;
  1346. }
  1347. if (!RVCInit_InitAdmin())
  1348. {
  1349. initDlg->EasyAddMsgToListView(_T("初始化Administrator用户"), FALSE);
  1350. return 0;
  1351. }
  1352. //等待explorer.exe初始化
  1353. Sleep(10 * 1000);
  1354. initDlg->EasyAddMsgToListView(_T("初始化Administrator用户"), TRUE);
  1355. if (1 == initDlg->m_minDPICheck.GetCheck())
  1356. {
  1357. showMsg.Format(_T("为Administrator设置为最小项目"));
  1358. if (!RVCInit_SetMinDPI(NULL, _T("Administrator")))
  1359. {
  1360. initDlg->EasyAddMsgToListView(showMsg, FALSE);
  1361. return 0;
  1362. }
  1363. else
  1364. initDlg->EasyAddMsgToListView(showMsg, TRUE);
  1365. }
  1366. if (!RVCInit_InitCmbUser())
  1367. {
  1368. initDlg->EasyAddMsgToListView(_T("初始化CmbUser用户"), FALSE);
  1369. return 0;
  1370. }
  1371. //等待explorer.exe初始化
  1372. Sleep(10 * 1000);
  1373. initDlg->EasyAddMsgToListView(_T("初始化CmbUser用户"), TRUE);
  1374. if (1 == initDlg->m_minDPICheck.GetCheck())
  1375. {
  1376. showMsg.Format(_T("为CmbUser设置为最小项目"));
  1377. if (!RVCInit_SetMinDPI(NULL, _T("CmbUser")))
  1378. {
  1379. initDlg->EasyAddMsgToListView(showMsg, FALSE);
  1380. return 0;
  1381. }
  1382. else
  1383. initDlg->EasyAddMsgToListView(showMsg, TRUE);
  1384. }
  1385. if (1 == initDlg->m_systemMainIntiCheck.GetCheck())
  1386. {
  1387. if (!RVCInit_mainInit(errMsg))
  1388. initDlg->EasyAddMsgToListView(errMsg, FALSE);
  1389. else
  1390. initDlg->EasyAddMsgToListView(_T("框架初始化"), TRUE);
  1391. }
  1392. if (!RVCInit_endInit())
  1393. initDlg->EasyAddMsgToListView(_T("释放资源"), FALSE);
  1394. initDlg->EasyAddMsgToListView(_T("系统定制初始化"), TRUE);
  1395. if (IDOK == MessageBox(NULL, _T("系统定制初始化完成,重启后功能生效(由于账户变化,若不重启可能会影响系统使用)。点击确认重启系统。"), _T("是否重启"), MB_OKCANCEL))
  1396. system("shutdown -f -r -t 00");
  1397. return 0;
  1398. }
  1399. DWORD SysRestoreBegin(LPVOID lpv)
  1400. {
  1401. CSysInitView *initDlg = (CSysInitView *)lpv;
  1402. initDlg->CleanListView();
  1403. CString showMsg;
  1404. showMsg.Format(_T("取消系统定制功能初始化"));
  1405. if (1 == initDlg->m_systemMainRestoreCheck.GetCheck())
  1406. {
  1407. if (!RVCInit_InitRestore(true))
  1408. initDlg->EasyAddMsgToListView(showMsg, FALSE);
  1409. else
  1410. {
  1411. initDlg->EasyAddMsgToListView(showMsg, TRUE);
  1412. if (IDOK == MessageBox(NULL, _T("已取消系统定制,点击确认重启系统。"), _T("是否重启"), MB_OKCANCEL))
  1413. system("shutdown -f -r -t 00");
  1414. }
  1415. }
  1416. return 0;
  1417. }
  1418. BOOL getRvcInitDir(char *dirPath)
  1419. {
  1420. char pathbuf[1024] = "";
  1421. int pathlen = ::GetModuleFileNameA(NULL, pathbuf, 1024);//获得GuiConsole路径
  1422. // 替换掉单杠
  1423. while (pathlen > 0)
  1424. {
  1425. if (pathbuf[pathlen--] == '\\')
  1426. break;
  1427. }
  1428. pathbuf[++pathlen] = '\0';
  1429. memcpy(dirPath, pathbuf, (pathlen + 1 > 1024 ? 1024 : pathlen + 1));
  1430. return pathlen;
  1431. }
  1432. LRESULT CSysInitView::OnBnClickedSystemInit(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wnd*/)
  1433. {
  1434. if (0 == m_accountConfigCheck.GetCheck() && 0 == m_voiceConfigCheck.GetCheck() && 0 == m_closeWifiCheck.GetCheck() && 0 == m_closeAutoRotationCheck.GetCheck()
  1435. && 0 == m_defaultDixCheck.GetCheck() && 0 == m_systemMainIntiCheck.GetCheck() && 0 == m_minDPICheck.GetCheck())
  1436. {
  1437. AddMsgToListView(_T("请选择需要初始化的部分"), _T(""));
  1438. return 0;
  1439. }
  1440. if (CheckThreadRunning())
  1441. m_initThread = (HANDLE)_beginthreadex(NULL, 0, (unsigned int (__stdcall *)(void *))SysInitBegin, this, 0, NULL);
  1442. return 0;
  1443. }
  1444. LRESULT CSysInitView::OnBnClickedSystemRestore(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wnd*/)
  1445. {
  1446. if (CheckThreadRunning())
  1447. if (IDOK == MessageBox("注意:只有框架初始化功能还原,其他功能不会还原。点击确认开始还原初始化。", "警告", MB_OKCANCEL))
  1448. m_restoreThread = (HANDLE)_beginthreadex(NULL, 0, (unsigned int (__stdcall *)(void *))SysRestoreBegin, this, 0, NULL);
  1449. return 0;
  1450. }
  1451. LRESULT CControlView::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam)
  1452. {
  1453. CComboBox cbBox =(CComboBox) GetDlgItem(IDC_COMBO1);
  1454. cbBox.AddString("请选择物料类型");
  1455. cbBox.AddString("[DebitCard] 普通借记卡");
  1456. cbBox.AddString("[RetainCard] 吞卡登记");
  1457. //cbBox.AddString("[UKey] 专业版证书");
  1458. //cbBox.AddString("[Receipt] 回单打印卷纸");
  1459. //cbBox.AddString("[Paper] 文件打印纸");
  1460. //cbBox.AddString("[RFIDCard] 小额钱包卡");
  1461. cbBox.SetCurSel(0);
  1462. return 0;
  1463. }
  1464. // 通过健康实体重启Shell
  1465. void CControlView::OnRestartShell(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wnd*/)
  1466. {
  1467. LogEvent(Severity_Middle, EVENT_CONSOLE_REQ_RESTART_SHELL, "请求框架重启");
  1468. }
  1469. // 通过健康实体重启电源
  1470. void CControlView::OnRestartPower(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wnd*/)
  1471. {
  1472. LogEvent(Severity_Middle, EVENT_CONSOLE_REQ_RESTART_POWER, "请求电源重启");
  1473. }
  1474. // 通过健康实体关闭Shell
  1475. void CControlView::OnShutdownShell(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wnd*/)
  1476. {
  1477. LogEvent(Severity_Middle, EVENT_CONSOLE_REQ_SHUTDOWN_SHELL, "请求框架退出");
  1478. }
  1479. // 退出准入
  1480. void CControlView::OnExitAccessAuth(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wnd*/)
  1481. {
  1482. auto pEntity = m_pGUITask->GetEntity();
  1483. AccessAuthService_ClientBase *pClient = new AccessAuthService_ClientBase(pEntity);
  1484. auto rc = pClient->Connect();
  1485. if (rc == Error_Succeed)
  1486. {
  1487. AccessAuthService_Unregist_Info info = {};
  1488. info.nReason = 4;
  1489. info.nWay = 0;
  1490. rc = pClient->Unregist(info);
  1491. if (rc == Error_Succeed)
  1492. OutputMsg("请求退出准入成功\r\n");
  1493. else
  1494. OutputMsg(CSimpleStringA::Format("请求退出准入失败: 0x%X\r\n", rc));
  1495. pClient->GetFunction()->CloseSession();
  1496. }
  1497. else
  1498. {
  1499. OutputMsg(CSimpleStringA::Format("连接准入实体失败: 0x%X\r\n", rc));
  1500. pClient->SafeDelete();
  1501. }
  1502. }
  1503. // 重新准入
  1504. void CControlView::OnRestartAuth(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wnd*/)
  1505. {
  1506. auto pEntity = m_pGUITask->GetEntity();
  1507. AccessAuthService_ClientBase *pClient = new AccessAuthService_ClientBase(pEntity);
  1508. auto rc = pClient->Connect();
  1509. if (rc == Error_Succeed)
  1510. {
  1511. rc = pClient->Regist();
  1512. if (rc == Error_Succeed)
  1513. OutputMsg("请求重新准入成功\r\n");
  1514. else
  1515. OutputMsg(CSimpleStringA::Format("请求重新准入失败: 0x%X\r\n", rc));
  1516. pClient->GetFunction()->CloseSession();
  1517. }
  1518. else
  1519. {
  1520. OutputMsg(CSimpleStringA::Format("连接准入实体失败: 0x%X\r\n", rc));
  1521. pClient->SafeDelete();
  1522. }
  1523. }
  1524. // 物料维护
  1525. void CControlView::OnMaterialManager(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wnd*/)
  1526. {
  1527. GetDlgItem(IDC_STATIC1).ShowWindow(SW_SHOW);
  1528. GetDlgItem(IDC_STATIC2).ShowWindow(SW_SHOW);
  1529. GetDlgItem(IDC_COMBO1).ShowWindow(SW_SHOW);
  1530. }
  1531. void CControlView::OnSelectChanged(UINT uNotifyCode, int nID, CWindow wndCtl)
  1532. {
  1533. CComboBox cbBox =(CComboBox) GetDlgItem(IDC_COMBO1);
  1534. int nIndex = cbBox.GetCurSel();
  1535. if (nIndex == 0)
  1536. return;
  1537. // 显示相关控件
  1538. GetDlgItem(IDC_STATIC3).ShowWindow(SW_SHOW);
  1539. GetDlgItem(IDC_STATIC4).ShowWindow(SW_SHOW);
  1540. GetDlgItem(IDC_STATIC5).ShowWindow(SW_SHOW);
  1541. GetDlgItem(IDC_STATIC6).ShowWindow(SW_SHOW);
  1542. GetDlgItem(IDC_STATIC7).ShowWindow(SW_SHOW);
  1543. GetDlgItem(IDC_STATIC8).ShowWindow(SW_SHOW);
  1544. GetDlgItem(IDC_STATIC9).ShowWindow(SW_SHOW);
  1545. GetDlgItem(IDC_EDIT2).ShowWindow(SW_SHOW);
  1546. GetDlgItem(IDC_EDIT3).ShowWindow(SW_SHOW);
  1547. GetDlgItem(IDC_EDIT4).ShowWindow(SW_SHOW);
  1548. GetDlgItem(IDC_EDIT5).ShowWindow(SW_SHOW);
  1549. GetDlgItem(IDC_EDIT6).ShowWindow(SW_SHOW);
  1550. GetDlgItem(IDC_EDIT7).ShowWindow(SW_SHOW);
  1551. GetDlgItem(IDC_EDIT8).ShowWindow(SW_SHOW);
  1552. GetDlgItem(IDC_COMMITRESULT).ShowWindow(SW_SHOW);
  1553. GetDlgItem(IDC_CANCELCHECK).ShowWindow(SW_SHOW);
  1554. auto pEntity =(CGUIConsoleEntity*) m_pGUITask->GetEntity();
  1555. char szText[128] = {};
  1556. cbBox.GetLBText(nIndex, szText);
  1557. char *p = strchr(szText, ']');
  1558. if (p == NULL)
  1559. {
  1560. OutputMsg(CSimpleStringA::Format("无效设备名:%s\r\n", szText));
  1561. return;
  1562. };
  1563. *p = 0;
  1564. unsigned int nCapacity = 0;
  1565. unsigned int nBackEndCount = 0;
  1566. unsigned int nTerminalCount = 0;
  1567. unsigned int nRemainCount = 0;
  1568. CSimpleStringA strDevCode = &szText[1];
  1569. if (strDevCode == "DebitCard" || strDevCode == "RetainCard")
  1570. {
  1571. // 查询发卡器发卡计数\吞卡计数
  1572. GetDlgItem(IDC_EDIT4).SetWindowTextA("0");
  1573. CardIssuerService_ClientBase *pClient = new CardIssuerService_ClientBase(pEntity);
  1574. auto rc = pClient->Connect();
  1575. if (rc == Error_Succeed)
  1576. {
  1577. CardIssuerService_GetMaterialCount_Req req = {};
  1578. CardIssuerService_GetMaterialCount_Ans ret = {};
  1579. rc = pClient->GetMaterialCount(req, ret, 10000);
  1580. if (rc == Error_Succeed)
  1581. {
  1582. if (strDevCode == "DebitCard")
  1583. {
  1584. nTerminalCount = ret.issued;
  1585. nRemainCount = ret.remains;
  1586. GetDlgItem(IDC_EDIT4).SetWindowTextA(CSimpleStringA::Format("%d", nTerminalCount));
  1587. GetDlgItem(IDC_EDIT8).SetWindowTextA(CSimpleStringA::Format("%d", nRemainCount));
  1588. }
  1589. else if (strDevCode == "RetainCard")
  1590. {
  1591. nTerminalCount = ret.captured;
  1592. nRemainCount = ret.captured;
  1593. GetDlgItem(IDC_EDIT4).SetWindowTextA(CSimpleStringA::Format("%d", nRemainCount));
  1594. GetDlgItem(IDC_EDIT8).SetWindowTextA(CSimpleStringA::Format("%d", nRemainCount));
  1595. }
  1596. }
  1597. else
  1598. {
  1599. OutputMsg(CSimpleStringA::Format("调用发卡器实体失败:0x%X\r\n", rc));
  1600. }
  1601. pClient->GetFunction()->CloseSession();
  1602. }
  1603. else
  1604. {
  1605. OutputMsg(CSimpleStringA::Format("连接发卡器实体失败:0x%X\r\n", rc));
  1606. pClient->SafeDelete();
  1607. }
  1608. }
  1609. else
  1610. {
  1611. OutputMsg(CSimpleStringA::Format("暂不支持此设备:%s\r\n", (const char*)strDevCode));
  1612. return;
  1613. }
  1614. // 通讯取后台计数
  1615. GetDlgItem(IDC_EDIT2).SetWindowTextA("0"); // 放置数量
  1616. GetDlgItem(IDC_EDIT3).SetWindowTextA("0"); // 使用数量
  1617. CSystemStaticInfo staticInfo;
  1618. pEntity->GetFunction()->GetSystemStaticInfo(staticInfo);
  1619. CMaterialMgrCnn *pCnn = new CMaterialMgrCnn(pEntity);
  1620. if (pCnn->ConnectFromCentralSetting() && pCnn->IsConnectionOK())
  1621. {
  1622. auto rc = pCnn->GetMaterialCounter(strDevCode, staticInfo.strTerminalID, "", nCapacity, nBackEndCount);
  1623. if (rc == Error_Succeed)
  1624. {
  1625. GetDlgItem(IDC_EDIT2).SetWindowTextA(CSimpleStringA::Format("%d", nCapacity)); // 放置数量
  1626. GetDlgItem(IDC_EDIT3).SetWindowTextA(CSimpleStringA::Format("%d", nBackEndCount)); // 后台数量
  1627. }
  1628. else
  1629. OutputMsg(CSimpleStringA::Format("获取后台物料计数失败: 0x%X\r\n", rc));
  1630. pCnn->Close();
  1631. }
  1632. else
  1633. OutputMsg("连接物料管理服务失败\r\n");
  1634. pCnn->DecRefCount();
  1635. pCnn = NULL;
  1636. }
  1637. // 提交复核结果
  1638. void CControlView::OnCommitResult(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wnd*/)
  1639. {
  1640. auto pEntity =(CGUIConsoleEntity*) m_pGUITask->GetEntity();
  1641. CSystemStaticInfo staticInfo;
  1642. auto pFunc = pEntity->GetFunction();
  1643. pFunc->GetSystemStaticInfo(staticInfo);
  1644. CComboBox cbBox =(CComboBox) GetDlgItem(IDC_COMBO1);
  1645. char szText[32] = {};
  1646. cbBox.GetWindowTextA(szText, sizeof(szText));
  1647. char *p = strchr(szText, ']');
  1648. if (p == NULL)
  1649. {
  1650. MessageBox(CSimpleStringA::Format("无效设备名:%s\r\n", szText));
  1651. return;
  1652. };
  1653. *p = 0;
  1654. CSimpleStringA strMaterialCode = &szText[1];
  1655. CSimpleStringA strTerminalNo = staticInfo.strTerminalID;
  1656. // 判断计数是否不符
  1657. // 实际剩余
  1658. memset(szText, 0, sizeof(szText));
  1659. GetDlgItem(IDC_EDIT5).GetWindowTextA(szText, sizeof(szText));
  1660. if (strlen(szText) == 0)
  1661. {
  1662. MessageBoxA("请输入实际剩余数量");
  1663. return;
  1664. }
  1665. int nActRemainCount = atoi(szText);
  1666. // 终端剩余计数
  1667. memset(szText, 0, sizeof(szText));
  1668. GetDlgItem(IDC_EDIT8).GetWindowTextA(szText, sizeof(szText));
  1669. int nDevRemainCount = atoi(szText);
  1670. // 终端使用计数
  1671. memset(szText, 0, sizeof(szText));
  1672. GetDlgItem(IDC_EDIT4).GetWindowTextA(szText, sizeof(szText));
  1673. int nUsedCounter = atoi(szText);
  1674. // 重置数量
  1675. memset(szText, 0, sizeof(szText));
  1676. GetDlgItem(IDC_EDIT6).GetWindowTextA(szText, sizeof(szText));
  1677. if (strlen(szText) == 0)
  1678. {
  1679. MessageBoxA("请输入重置数量");
  1680. return;
  1681. }
  1682. int nResetCapacity = atoi(szText);
  1683. // 核对意见
  1684. char szComment[256] = {};
  1685. GetDlgItem(IDC_EDIT7).GetWindowTextA(szComment, sizeof(szComment));
  1686. if (nActRemainCount != nDevRemainCount && strlen(szComment)==0)
  1687. {
  1688. MessageBoxA("剩余计数不符,请输入不符原因");
  1689. return;
  1690. }
  1691. // 重置硬件计数
  1692. ErrorCodeEnum rc = Error_Succeed;
  1693. if (strMaterialCode == "DebitCard" || strMaterialCode == "RetainCard")
  1694. {
  1695. CardIssuerService_ClientBase *pClient = new CardIssuerService_ClientBase(pEntity);
  1696. rc = pClient->Connect();
  1697. if (rc == Error_Succeed)
  1698. {
  1699. CardIssuerService_SetMaterialCount_Req req = {};
  1700. if (strMaterialCode == "DebitCard")
  1701. {
  1702. req.bRemains = true;
  1703. req.remains = nResetCapacity;
  1704. req.bIssued = true;
  1705. req.issued = 0;
  1706. req.bMixed = true;
  1707. req.mixed = 0;
  1708. req.bCaptured = false;
  1709. }
  1710. else if (strMaterialCode == "RetainCard")
  1711. {
  1712. req.bCaptured = true;
  1713. req.captured = 0;
  1714. req.bRemains = false;
  1715. req.bIssued = false;
  1716. req.bMixed = false;
  1717. }
  1718. CardIssuerService_SetMaterialCount_Ans ret = {};
  1719. rc = pClient->SetMaterialCount(req, ret, 10000);
  1720. pClient->GetFunction()->CloseSession();
  1721. }
  1722. else
  1723. {
  1724. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("连接CardIssuer实体失败");
  1725. pClient->SafeDelete();
  1726. }
  1727. }
  1728. else
  1729. {
  1730. rc = Error_Unexpect;
  1731. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("未知物料: {%s}", (const char*)strMaterialCode);
  1732. }
  1733. if (rc != Error_Succeed)
  1734. {
  1735. MessageBoxA(CSimpleStringA::Format("重置终端计数失败(0x%X)", rc));
  1736. LogWarn(Severity_Middle, rc, 0, CSimpleStringA::Format("重置终端计数失败(0x%X)", rc));
  1737. return;
  1738. }
  1739. // 重置后台计数
  1740. CMaterialMgrCnn *pCnn = new CMaterialMgrCnn(pEntity);
  1741. if (pCnn->ConnectFromCentralSetting() && pCnn->IsConnectionOK())
  1742. {
  1743. auto rc = pCnn->ResetMaterialCounter(strMaterialCode, strTerminalNo, pEntity->GetCurMaintainer(), nResetCapacity, nUsedCounter, nActRemainCount, szComment);
  1744. pCnn->Close();
  1745. }
  1746. pCnn->DecRefCount();
  1747. pCnn = NULL;
  1748. if (rc == Error_Succeed)
  1749. {
  1750. ClearAndHideMaterialEditView();
  1751. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("重置物料{%s}计数成功", (const char*)strMaterialCode);
  1752. MessageBoxA("重置物料计数成功");
  1753. }
  1754. else
  1755. {
  1756. MessageBoxA(CSimpleStringA::Format("重置后端计数失败(0x%X)", rc));
  1757. LogWarn(Severity_Middle, rc, 0, CSimpleStringA::Format("重置后端计数失败(0x%X)", rc));
  1758. }
  1759. }
  1760. // 取消复核
  1761. void CControlView::OnCancelCheck(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wnd*/)
  1762. {
  1763. ClearAndHideMaterialEditView();
  1764. }
  1765. void CControlView::ClearAndHideMaterialEditView()
  1766. {
  1767. // 清空内容
  1768. GetDlgItem(IDC_EDIT2).SetWindowTextA("");
  1769. GetDlgItem(IDC_EDIT3).SetWindowTextA("");
  1770. GetDlgItem(IDC_EDIT4).SetWindowTextA("");
  1771. GetDlgItem(IDC_EDIT5).SetWindowTextA("");
  1772. GetDlgItem(IDC_EDIT6).SetWindowTextA("");
  1773. GetDlgItem(IDC_EDIT7).SetWindowTextA("");
  1774. GetDlgItem(IDC_EDIT8).SetWindowTextA("");
  1775. GetDlgItem(IDC_STATIC1).ShowWindow(SW_HIDE);
  1776. GetDlgItem(IDC_STATIC2).ShowWindow(SW_HIDE);
  1777. GetDlgItem(IDC_STATIC3).ShowWindow(SW_HIDE);
  1778. GetDlgItem(IDC_STATIC4).ShowWindow(SW_HIDE);
  1779. GetDlgItem(IDC_STATIC5).ShowWindow(SW_HIDE);
  1780. GetDlgItem(IDC_STATIC6).ShowWindow(SW_HIDE);
  1781. GetDlgItem(IDC_STATIC7).ShowWindow(SW_HIDE);
  1782. GetDlgItem(IDC_STATIC8).ShowWindow(SW_HIDE);
  1783. GetDlgItem(IDC_STATIC9).ShowWindow(SW_HIDE);
  1784. GetDlgItem(IDC_COMBO1).ShowWindow(SW_HIDE);
  1785. GetDlgItem(IDC_EDIT2).ShowWindow(SW_HIDE);
  1786. GetDlgItem(IDC_EDIT3).ShowWindow(SW_HIDE);
  1787. GetDlgItem(IDC_EDIT4).ShowWindow(SW_HIDE);
  1788. GetDlgItem(IDC_EDIT5).ShowWindow(SW_HIDE);
  1789. GetDlgItem(IDC_EDIT6).ShowWindow(SW_HIDE);
  1790. GetDlgItem(IDC_EDIT7).ShowWindow(SW_HIDE);
  1791. GetDlgItem(IDC_EDIT8).ShowWindow(SW_HIDE);
  1792. GetDlgItem(IDC_COMMITRESULT).ShowWindow(SW_HIDE);
  1793. GetDlgItem(IDC_CANCELCHECK).ShowWindow(SW_HIDE);
  1794. CComboBox cbBox =(CComboBox) GetDlgItem(IDC_COMBO1);
  1795. cbBox.SetCurSel(0);
  1796. }
  1797. void CControlView::OutputMsg(const char *pMsg)
  1798. {
  1799. ::PostMessage(GetTopLevelParent().m_hWnd, WM_SHOW_MSG, 0, (LPARAM) strdup(pMsg));
  1800. }
  1801. LRESULT CHighLevelView::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam)
  1802. {
  1803. return 0;
  1804. }
  1805. // 手工升级
  1806. void CHighLevelView::OnManualUpgrade(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wnd*/)
  1807. {
  1808. // 选择升级文件
  1809. CFileDialog dlg(TRUE, ".zip", NULL, OFN_READONLY, "zip files\0*.zip\0all files\0*.*\0");
  1810. if (dlg.DoModal() == IDOK)
  1811. {
  1812. CSimpleStringA strPackPath = dlg.m_szFileName;
  1813. if (!strPackPath.IsEndWith(".zip"))
  1814. {
  1815. OutputMsg("升级包必须为zip压缩包\r\n");
  1816. return;
  1817. }
  1818. CSimpleStringA strPackName = strrchr(strPackPath, '\\') +1;
  1819. auto pEntity = m_pGUITask->GetEntity();
  1820. auto pFunc = pEntity->GetFunction();
  1821. CSimpleStringA strDownloadPath;
  1822. pFunc->GetPath("Downloads", strDownloadPath);
  1823. if (!strPackPath.IsStartWith(strDownloadPath))
  1824. {
  1825. strDownloadPath += strrchr(strPackPath, '\\');
  1826. if (CopyFileA(strPackPath, strDownloadPath, FALSE))
  1827. OutputMsg(CSimpleStringA::Format("拷贝升级包{%s}到下载目录成功\r\n", (const char*)strPackName));
  1828. else
  1829. {
  1830. OutputMsg(CSimpleStringA::Format("拷贝升级包{%s}到下载目录失败\r\n", (const char*)strPackName));
  1831. return;
  1832. }
  1833. }
  1834. // 调用升级实体手工升级
  1835. UpgradeMgrService_ClientBase *pClient = new UpgradeMgrService_ClientBase(pEntity);
  1836. auto rc = pClient->Connect();
  1837. if (rc == Error_Succeed)
  1838. {
  1839. UpgradeMgrService_RegistLocalPack_Req req = {};
  1840. UpgradeMgrService_RegistLocalPack_Ans ans = {};
  1841. req.strPackFile = strPackName;
  1842. rc = pClient->RegistLocalPack(req, ans, 10000);
  1843. if (rc == Error_Succeed)
  1844. OutputMsg(CSimpleStringA::Format("手工注册升级包{%s}成功\r\n", (const char*)strPackName));
  1845. else
  1846. OutputMsg(CSimpleStringA::Format("手工注册升级包{%s}失败: 0x%X\r\n", (const char*)strPackName, rc));
  1847. pClient->GetFunction()->CloseSession();
  1848. }
  1849. else
  1850. {
  1851. OutputMsg(CSimpleStringA::Format("连接升级实体失败: 0x%X\r\n", rc));
  1852. pClient->SafeDelete();
  1853. }
  1854. }
  1855. }
  1856. // 设置调试级别
  1857. void CHighLevelView::OnSetDebugLevel(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wnd*/)
  1858. {
  1859. auto pEntity = m_pGUITask->GetEntity();
  1860. auto pPrevFunc = pEntity->GetFunction()->GetPrivilegeFunction();
  1861. if (pPrevFunc == NULL)
  1862. {
  1863. OutputMsg("获取IEntityFunctionPrivilege接口失败\r\n");
  1864. return;
  1865. }
  1866. pPrevFunc->SetSysDebugLevel("SpShell", Debug_Middle, false);
  1867. OutputMsg("设置框架调试级别成功\r\n");
  1868. }
  1869. // 恢复调试级别
  1870. void CHighLevelView::OnResetDebugLevel(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wnd*/)
  1871. {
  1872. auto pEntity = m_pGUITask->GetEntity();
  1873. auto pPrevFunc = pEntity->GetFunction()->GetPrivilegeFunction();
  1874. if (pPrevFunc == NULL)
  1875. {
  1876. OutputMsg("获取IEntityFunctionPrivilege接口失败\r\n");
  1877. return;
  1878. }
  1879. pPrevFunc->SetSysDebugLevel("SpShell", Debug_None, false);
  1880. OutputMsg("恢复框架调试级别成功\r\n");
  1881. }
  1882. void CControlView::OnPrintConfig(UINT, int, CWindow)
  1883. {
  1884. char curPath[1024];
  1885. if (!getRvcInitDir(curPath))
  1886. return;
  1887. strcat(curPath, "\\RvcInit\\OtherTools\\printInstall\\PrintInstall.exe");
  1888. STARTUPINFO si = { sizeof(si) };
  1889. PROCESS_INFORMATION pi;
  1890. si.dwFlags = STARTF_USESHOWWINDOW;
  1891. si.wShowWindow = TRUE; //TRUE表示显示创建的进程的窗口
  1892. if (FALSE == ::CreateProcess(NULL, curPath, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi))
  1893. {
  1894. char errMsg[1024];
  1895. sprintf(errMsg, "打开%s失败!", curPath);
  1896. MessageBoxA(errMsg);
  1897. }
  1898. }
  1899. void CControlView::OnCameraConfig(UINT, int, CWindow)
  1900. {
  1901. char curPath[1024];
  1902. if (!getRvcInitDir(curPath))
  1903. return;
  1904. strcat(curPath, "\\RvcInit\\OtherTools\\cameraInstall\\CameraInstall.exe");
  1905. STARTUPINFO si = { sizeof(si) };
  1906. PROCESS_INFORMATION pi;
  1907. si.dwFlags = STARTF_USESHOWWINDOW;
  1908. si.wShowWindow = TRUE; //TRUE表示显示创建的进程的窗口
  1909. if (FALSE == ::CreateProcess(NULL, curPath, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi))
  1910. {
  1911. char errMsg[1024];
  1912. sprintf(errMsg, "打开%s失败!", curPath);
  1913. MessageBoxA(errMsg);
  1914. }
  1915. }
  1916. // 框架版本导回
  1917. void CHighLevelView::OnRollbackUpgrade(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wnd*/)
  1918. {
  1919. if (MessageBoxA("你确定要回滚框架版本至前一版本不?", "确认", MB_OKCANCEL) != IDOK)
  1920. return;
  1921. auto pEntity = m_pGUITask->GetEntity();
  1922. auto pPrevFunc = pEntity->GetFunction()->GetPrivilegeFunction();
  1923. if (pPrevFunc == NULL)
  1924. {
  1925. OutputMsg("获取IEntityFunctionPrivilege接口失败\r\n");
  1926. return;
  1927. }
  1928. auto rc = pPrevFunc->RollBackToPreviousVersion();
  1929. if (rc == Error_Succeed)
  1930. OutputMsg("导回框架版本成功,重启框架后生效\r\n");
  1931. else
  1932. OutputMsg(CSimpleStringA::Format("导回框架版本失败: 0x%X\r\n", rc));
  1933. }
  1934. // 终端注销
  1935. void CHighLevelView::OnUnregTerminal(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wnd*/)
  1936. {
  1937. if (MessageBoxA("你确定要注销此终端吗?终端注销后,此终端将无法准入,不能进行联机处理!", "确认", MB_OKCANCEL) != IDOK)
  1938. return;
  1939. auto pEntity = m_pGUITask->GetEntity();
  1940. // 先退出准入
  1941. AccessAuthService_ClientBase *pClient = new AccessAuthService_ClientBase(pEntity);
  1942. auto rc = pClient->Connect();
  1943. if (rc == Error_Succeed)
  1944. {
  1945. AccessAuthService_Unregist_Info info = {};
  1946. info.nWay = 0;
  1947. info.nReason = 4;
  1948. rc = pClient->Unregist(info);
  1949. if (rc == Error_Succeed)
  1950. {
  1951. // 通知健康实体注销终端
  1952. LogEvent(Severity_Middle, EVENT_CONSOLE_REQ_UNREG_TERMINAL, "终端注销成功");
  1953. }
  1954. else
  1955. {
  1956. OutputMsg(CSimpleStringA::Format("终端准入退出失败: 0x%X\r\n", rc));
  1957. }
  1958. pClient->GetFunction()->CloseSession();
  1959. }
  1960. else
  1961. {
  1962. OutputMsg(CSimpleStringA::Format("连接准入实体失败: 0x%X\r\n", rc));
  1963. pClient->SafeDelete();
  1964. }
  1965. }
  1966. // 修改登记信息
  1967. void CHighLevelView::OnModifyEnrollInfo(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wnd*/)
  1968. {
  1969. GetDlgItem(IDC_GROUPINFO).ShowWindow(SW_SHOW);
  1970. GetDlgItem(IDC_LABELGPS).ShowWindow(SW_SHOW);
  1971. GetDlgItem(IDC_LABELADDR).ShowWindow(SW_SHOW);
  1972. GetDlgItem(IDC_EDITGPS).ShowWindow(SW_SHOW);
  1973. GetDlgItem(IDC_EDITADDR).ShowWindow(SW_SHOW);
  1974. GetDlgItem(IDC_MODENROLLINFO2).ShowWindow(SW_SHOW);
  1975. GetDlgItem(IDC_MODENROLLINFO3).ShowWindow(SW_SHOW);
  1976. // 取Root.ini信息
  1977. auto pFunc = m_pGUITask->GetEntity()->GetFunction();
  1978. CSmartPointer<IConfigInfo> pConfig;
  1979. auto rc = pFunc->OpenConfig(Config_Root, pConfig);
  1980. if (rc != Error_Succeed)
  1981. {
  1982. OutputMsg("读取硬件配置失败\r\n");
  1983. return;
  1984. }
  1985. CSimpleStringA strValue;
  1986. pConfig->ReadConfigValue("Terminal", "EnrolGPS", strValue);
  1987. if (strValue.GetLength() >0)
  1988. GetDlgItem(IDC_EDITGPS).SetWindowTextA(strValue);
  1989. pConfig->ReadConfigValue("Terminal", "EnrolAddr", strValue);
  1990. if (strValue.GetLength() >0)
  1991. GetDlgItem(IDC_EDITADDR).SetWindowTextA(strValue);
  1992. }
  1993. // 修改登记信息2
  1994. void CHighLevelView::OnModifyEnrollInfo2(UINT /*uNotifyCode*/, int nID, CWindow /*wnd*/)
  1995. {
  1996. GetDlgItem(IDC_GROUPINFO).ShowWindow(SW_HIDE);
  1997. GetDlgItem(IDC_LABELGPS).ShowWindow(SW_HIDE);
  1998. GetDlgItem(IDC_LABELADDR).ShowWindow(SW_HIDE);
  1999. GetDlgItem(IDC_EDITGPS).ShowWindow(SW_HIDE);
  2000. GetDlgItem(IDC_EDITADDR).ShowWindow(SW_HIDE);
  2001. GetDlgItem(IDC_MODENROLLINFO2).ShowWindow(SW_HIDE);
  2002. GetDlgItem(IDC_MODENROLLINFO3).ShowWindow(SW_HIDE);
  2003. if (nID != IDC_MODENROLLINFO2)
  2004. return;
  2005. char szAddr[256] = {};
  2006. char szGPS[64] = {};
  2007. GetDlgItem(IDC_EDITGPS).GetWindowTextA(szGPS, sizeof(szGPS));
  2008. GetDlgItem(IDC_EDITADDR).GetWindowTextA(szAddr, sizeof(szAddr));
  2009. // 检查GPS值是否合法
  2010. float f1 = 0;
  2011. float f2 = 0;
  2012. int nRet = sscanf(szGPS, "%f,%f", &f1, &f2);
  2013. if (nRet != 2)
  2014. {
  2015. OutputMsg(CSimpleStringA::Format("GPS座标值无效: {%s}\r\n", szGPS));
  2016. return;
  2017. }
  2018. OutputMsg("开始修改登记信息\r\n");
  2019. auto pEntity = m_pGUITask->GetEntity();
  2020. auto pFunc = pEntity->GetFunction();
  2021. // 修改Root.ini
  2022. CSimpleStringA strRootPath;
  2023. pFunc->GetPath("HardwareCfg", strRootPath);
  2024. strRootPath += "\\root.ini";
  2025. inifile_write_str(strRootPath, "Terminal", "EnrolAddr", szAddr);
  2026. inifile_format_write(strRootPath, "Terminal", "EnrolGPS", "\"%s\"", szGPS);
  2027. // 发送到中台
  2028. CMaterialMgrCnn *pCnn = new CMaterialMgrCnn(pEntity);
  2029. if (pCnn->ConnectFromCentralSetting() && pCnn->IsConnectionOK())
  2030. {
  2031. if (pCnn->ModifyEnrolInfo(NULL, NULL, szAddr, szGPS) != Error_Succeed)
  2032. OutputMsg("发送终端部署信息修改请求包失败\r\n");
  2033. else
  2034. OutputMsg("发送终端部署信息修改请求包成功\r\n");
  2035. pCnn->Close();
  2036. }
  2037. else
  2038. OutputMsg("连接物料管理服务失败\r\n");
  2039. pCnn->DecRefCount();
  2040. pCnn = NULL;
  2041. }
  2042. // 启动操作系统Shell
  2043. void CHighLevelView::OnStartOSShell(UINT /*uNotifyCode*/, int nID, CWindow /*wnd*/)
  2044. {
  2045. OutputMsg("启动操作系统Shell\r\n");
  2046. }
  2047. void CHighLevelView::OutputMsg(const char *pMsg)
  2048. {
  2049. ::PostMessage(GetTopLevelParent().m_hWnd, WM_SHOW_MSG, 0, (LPARAM) strdup(pMsg));
  2050. }
  2051. BOOL CMainFrame::PreTranslateMessage( MSG* pMsg )
  2052. {
  2053. if (WM_CHECK_SYSINIT_FAIL == pMsg->message)
  2054. {
  2055. if (FALSE == m_sysInitView.getPageShow())
  2056. {
  2057. m_tabView.AddPage(m_sysInitView, "操作系统定制");
  2058. m_sysInitView.SetPageShow(TRUE);
  2059. }
  2060. m_cansysInitRm = FALSE;
  2061. }
  2062. else if (WM_CHECK_SYSINIT_SUCCESS == pMsg->message)
  2063. m_cansysInitRm = TRUE;
  2064. return CFrameWindowImpl<CMainFrame>::PreTranslateMessage(pMsg);
  2065. }
  2066. BOOL CMainFrame::OnIdle()
  2067. {
  2068. // 控制Toolbar显示
  2069. if (m_tabView.GetActivePage() == 0)
  2070. {
  2071. ::ShowWindow(m_hWndToolBar, SW_SHOWNOACTIVATE);
  2072. UpdateLayout();
  2073. if (m_iSelectIdx != -1)
  2074. {
  2075. EntityEntry e = {};
  2076. auto rc = m_pConsole->GetEntity(GetSelectedEntityName(), e);
  2077. if (rc == Error_Succeed)
  2078. {
  2079. if (e.State == EntityState_NoStart || e.State == EntityState_Close || e.State == EntityState_Killed)
  2080. UIEnable(ID_START, TRUE);
  2081. else
  2082. UIEnable(ID_START, FALSE);
  2083. if (e.State >= EntityState_Idle && e.State <= EntityState_Pause)
  2084. UIEnable(ID_STOP, TRUE);
  2085. else
  2086. UIEnable(ID_STOP, FALSE);
  2087. if (e.State >= EntityState_Idle && e.State <= EntityState_Busy)
  2088. UIEnable(ID_PAUSE, TRUE);
  2089. else
  2090. UIEnable(ID_PAUSE, FALSE);
  2091. if (e.State == EntityState_Pause)
  2092. UIEnable(ID_CONTINUE, TRUE);
  2093. else
  2094. UIEnable(ID_CONTINUE, FALSE);
  2095. if (e.State >= EntityState_Starting && e.State <= EntityState_Close)
  2096. UIEnable(ID_KILL, TRUE);
  2097. else
  2098. UIEnable(ID_KILL, FALSE);
  2099. UIUpdateToolBar();
  2100. return FALSE;
  2101. }
  2102. }
  2103. UIEnable(ID_START, FALSE);
  2104. UIEnable(ID_STOP, FALSE);
  2105. UIEnable(ID_PAUSE, FALSE);
  2106. UIEnable(ID_CONTINUE, FALSE);
  2107. UIEnable(ID_KILL, FALSE);
  2108. UIUpdateToolBar();
  2109. return FALSE;
  2110. }
  2111. else
  2112. {
  2113. ::ShowWindow(m_hWndToolBar, SW_HIDE);
  2114. UpdateLayout();
  2115. return FALSE;
  2116. }
  2117. }
  2118. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  2119. {
  2120. CreateSimpleToolBar();
  2121. UIAddToolBar(m_hWndToolBar);
  2122. //CreateSimpleStatusBar();
  2123. m_hWndStatusBar = m_status.Create(m_hWnd, rcDefault, NULL, WS_VISIBLE|WS_CHILD);
  2124. int _parts[] = {400, -1};
  2125. m_status.SetParts(sizeof(_parts)/sizeof(_parts[0]), _parts);
  2126. RECT rc;
  2127. m_status.GetRect(0, &rc);
  2128. m_cmd.SetOwner(this);
  2129. m_cmd.Create(m_hWndStatusBar, &rc, NULL, WS_CHILD|WS_VISIBLE | ES_AUTOHSCROLL | ES_LEFT, WS_EX_STATICEDGE);
  2130. m_status.GetRect(1, &rc);
  2131. m_progressbar.Create(m_hWndStatusBar, &rc, NULL, WS_VISIBLE|WS_CHILD);
  2132. m_progressbar.SetRange(0, 100);
  2133. m_progressbar.SetStep(1);
  2134. m_progressbar.SetPos(0);
  2135. m_hWndClient = m_splitter.Create(m_hWnd, rcDefault, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN);
  2136. UpdateLayout();
  2137. // output
  2138. m_output.Create(m_splitter, rcDefault, NULL,
  2139. WS_CHILD|WS_VISIBLE|ES_AUTOVSCROLL|ES_LEFT|ES_MULTILINE|WS_VSCROLL, WS_EX_STATICEDGE);
  2140. m_output_font.CreateFont(12,0,0,0,FALSE,FALSE,FALSE,0,DEFAULT_CHARSET,
  2141. OUT_CHARACTER_PRECIS, CLIP_CHARACTER_PRECIS,DEFAULT_QUALITY, DEFAULT_PITCH,NULL);
  2142. m_output.SetFont(m_output_font);
  2143. m_wndOutput.SubclassWindow(m_output.m_hWnd);
  2144. CRect rect;
  2145. GetClientRect(rect);
  2146. m_splitter.SetSplitterPos(rect.Height()*3/5);
  2147. // TabView
  2148. m_tabView.Create(m_splitter, rcDefault, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN, WS_EX_CLIENTEDGE);
  2149. //m_tabView.SetTitleBarWindow(m_hWnd);
  2150. m_splitter.SetSplitterPanes(m_tabView, m_output);
  2151. m_verticalSplitter.Create(m_tabView, rcDefault, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN);
  2152. m_tabView.AddPage(m_verticalSplitter, "实体状态");
  2153. m_tabView.SetActivePage(0);
  2154. m_sysInitView.Create(m_tabView, rcDefault);
  2155. m_left_list.Create(m_verticalSplitter, rcDefault, NULL,
  2156. WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN |
  2157. LVS_REPORT | LVS_AUTOARRANGE | LVS_SHOWSELALWAYS | LVS_SINGLESEL, 0, IDC_LIST1);
  2158. m_left_list.SetExtendedListViewStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT, 0);
  2159. m_right_list.Create(m_verticalSplitter, rcDefault, NULL,
  2160. WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN |
  2161. LVS_REPORT | LVS_AUTOARRANGE | LVS_SHOWSELALWAYS | LVS_SINGLESEL, 0, IDC_LIST2);
  2162. m_right_list.SetExtendedListViewStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT, 0);
  2163. m_verticalSplitter.SetSplitterPos((rect.Width()-10)/2);
  2164. m_verticalSplitter.SetSplitterPanes(m_left_list, m_right_list);
  2165. LVCOLUMN col = {0};
  2166. col.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT;
  2167. col.fmt = LVCFMT_LEFT;
  2168. col.cx = 3*rect.Width() / 10-20;
  2169. col.pszText = _T("entity");
  2170. m_left_list.InsertColumn(0, &col);
  2171. m_right_list.InsertColumn(0, &col);
  2172. col.pszText = _T("type");
  2173. col.cx = 3*rect.Width() / 40-1;
  2174. m_left_list.InsertColumn(1, &col);
  2175. m_right_list.InsertColumn(1, &col);
  2176. col.pszText = _T("state");
  2177. col.cx = 3*rect.Width() / 40-1;
  2178. m_left_list.InsertColumn(2, &col);
  2179. m_right_list.InsertColumn(2, &col);
  2180. col.pszText = _T("pid");
  2181. col.cx = rect.Width() / 20-1;
  2182. m_left_list.InsertColumn(3, &col);
  2183. m_right_list.InsertColumn(3, &col);
  2184. CMessageLoop* pLoop = _Module.GetMessageLoop();
  2185. pLoop->AddMessageFilter(this);
  2186. pLoop->AddIdleHandler(this);
  2187. // load all entity
  2188. CAutoArray<EntityEntry> Entities;
  2189. m_pConsole->GetAllEntity(Entities);
  2190. // order by entity name
  2191. int arrOrderIndex[255] = {};
  2192. for(int i=0; i<Entities.GetCount(); i++)
  2193. {
  2194. int nIndex = 0;
  2195. for(int j=0; j<i; j++)
  2196. {
  2197. if (Entities[j].Name .Compare(Entities[i].Name) < 0)
  2198. nIndex++;
  2199. else
  2200. arrOrderIndex[j]++;
  2201. }
  2202. arrOrderIndex[i] = nIndex;
  2203. }
  2204. for (int i = 0; i < Entities.GetCount(); ++i)
  2205. {
  2206. int nIndex = 0;
  2207. for(; nIndex<Entities.GetCount(); nIndex++)
  2208. {
  2209. if (arrOrderIndex[nIndex] == i)
  2210. break;
  2211. }
  2212. LoadEntity(i, Entities[nIndex], Entities.GetCount());
  2213. }
  2214. // load start menu items
  2215. #if _DEBUG
  2216. CAutoArray<StartMenuEntry> StartMenus;
  2217. ErrorCodeEnum Error = m_pConsole->GetCustomizeStartMenuList(StartMenus);
  2218. if (Error == Error_Succeed && StartMenus.GetCount() > 0) {
  2219. CMenuHandle menuMain = GetMenu();
  2220. int i;
  2221. CMenuHandle menuStartList = menuMain.GetSubMenu(2);
  2222. if (menuStartList == NULL) {
  2223. menuStartList.CreatePopupMenu();
  2224. menuMain.AppendMenuA(MF_BYPOSITION, menuStartList, "&StartEntity");
  2225. }
  2226. for (i = 0; i < StartMenus.GetCount(); ++i) {
  2227. char content[512];
  2228. if (i < 9) {
  2229. wsprintfA(content, "%s %s\tctrl+%d", (LPCSTR)StartMenus[i].strEntity, (LPCSTR)StartMenus[i].strCmdLine, i+1);
  2230. } else {
  2231. wsprintfA(content, "%s %s", (LPCSTR)StartMenus[i].strEntity, (LPCSTR)StartMenus[i].strCmdLine);
  2232. }
  2233. menuStartList.AppendMenuA(MF_STRING, ID_STARTMENU_BEGIN+i, content);
  2234. }
  2235. }
  2236. #endif
  2237. ::AtlLoadAccelerators(MAKEINTRESOURCE(IDR_MAINFRAME));
  2238. m_pConsole->SubscribeLog();
  2239. // 标题显示版本和终端号
  2240. CSimpleStringA strInfo;
  2241. auto nRet = m_pConsole->GetFrameworkInfo(strInfo);
  2242. if (nRet == Error_Succeed)
  2243. {
  2244. char szBuf[256] = {};
  2245. GetWindowText(szBuf, 255);
  2246. SetWindowText(CSimpleStringA::Format("%s - %s", szBuf, strInfo));
  2247. }
  2248. CenterWindow();
  2249. return 0;
  2250. }
  2251. void CMainFrame::OnSysCommand(UINT nID, CPoint point)
  2252. {
  2253. if (nID == SC_CLOSE || nID == SC_MINIMIZE)
  2254. {
  2255. SetMsgHandled(TRUE);
  2256. // bring back window
  2257. //SetWindowPos(HWND_BOTTOM, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
  2258. ShowWindow(SW_MINIMIZE);
  2259. }
  2260. else
  2261. SetMsgHandled(FALSE);
  2262. }
  2263. //LRESULT CMainFrame::OnClose(UINT uMsg, WPARAM wParam, LPARAM lParam)
  2264. //{
  2265. // if (wParam != -1 || lParam != -1) {
  2266. // //output_printf("cannot close self!\r\n");
  2267. // ShowWindow(SW_MINIMIZE);
  2268. // } else {
  2269. // SetMsgHandled(FALSE);
  2270. // }
  2271. // return 0;
  2272. //}
  2273. int CMainFrame::FindEntitylistItemIndex(int entity_id)
  2274. {
  2275. int i;
  2276. for (i = 0; i < m_left_list.GetItemCount(); ++i) {
  2277. int id = ((int)m_left_list.GetItemData(i)) >> 16;
  2278. if (id == entity_id)
  2279. return i*2;
  2280. }
  2281. for (i = 0; i < m_right_list.GetItemCount(); ++i) {
  2282. int id = ((int)m_right_list.GetItemData(i)) >> 16;
  2283. if (id == entity_id)
  2284. return i*2+1;
  2285. }
  2286. return -1;
  2287. }
  2288. int CMainFrame::FindEntitylistItemIndex(const char *entity_name)
  2289. {
  2290. int i;
  2291. for (i = 0; i < m_left_list.GetItemCount(); ++i) {
  2292. char str[128];
  2293. m_left_list.GetItemText(i, 0, str, sizeof(str));
  2294. char *p = strchr(str, ':');
  2295. if (p)
  2296. *p = 0;
  2297. if (_stricmp(entity_name, str) == 0)
  2298. return i*2;
  2299. }
  2300. for (i = 0; i < m_right_list.GetItemCount(); ++i) {
  2301. char str[128];
  2302. m_right_list.GetItemText(i, 0, str, sizeof(str));
  2303. char *p = strchr(str, ':');
  2304. if (p)
  2305. *p = 0;
  2306. if (_stricmp(entity_name, str) == 0)
  2307. return i*2+1;
  2308. }
  2309. return -1;
  2310. }
  2311. void CMainFrame::SetEntityState(int entity_id, int state, int pid)
  2312. {
  2313. int idx = FindEntitylistItemIndex(entity_id);
  2314. if (idx != -1) {
  2315. char tmp[16];
  2316. wsprintfA(tmp, "%d", pid);
  2317. if (idx & 1) {
  2318. m_right_list.SetItem((idx-1)/2, 2, LVIF_TEXT, (LPCSTR)EntityEntry::GetStateName(state), 0, 0, 0, NULL);
  2319. m_right_list.SetItem((idx-1)/2, 3, LVIF_TEXT, tmp, 0, 0, 0, NULL);
  2320. } else {
  2321. m_left_list.SetItem(idx/2, 2, LVIF_TEXT, (LPCSTR)EntityEntry::GetStateName(state), 0, 0, 0, NULL);
  2322. m_left_list.SetItem(idx/2, 3, LVIF_TEXT, tmp, 0, 0, 0, NULL);
  2323. }
  2324. }
  2325. }
  2326. void CMainFrame::SetEntityState(const char *entity_name, int state, int pid)
  2327. {
  2328. int idx = FindEntitylistItemIndex(entity_name);
  2329. if (idx != -1) {
  2330. char tmp[16];
  2331. wsprintfA(tmp, "%d", pid);
  2332. if (idx & 1) {
  2333. m_right_list.SetItem((idx-1)/2, 2, LVIF_TEXT, (LPCSTR)EntityEntry::GetStateName(state), 0, 0, 0, NULL);
  2334. m_right_list.SetItem((idx-1)/2, 3, LVIF_TEXT, tmp, 0, 0, 0, NULL);
  2335. } else {
  2336. m_left_list.SetItem(idx/2, 2, LVIF_TEXT, (LPCSTR)EntityEntry::GetStateName(state), 0, 0, 0, NULL);
  2337. m_left_list.SetItem(idx/2, 3, LVIF_TEXT, tmp, 0, 0, 0, NULL);
  2338. }
  2339. }
  2340. }
  2341. void CMainFrame::LoadEntity( int nIndex, EntityEntry &e, int nTotal)
  2342. {
  2343. char tmp[16];
  2344. wsprintfA(tmp, "%d", e.Pid);
  2345. CSimpleStringA strName = CSimpleStringA::Format("%s:%s", (LPCSTR)e.Name, (LPCSTR)e.ModuleName);
  2346. //if (idx & 1) {
  2347. if (nIndex >= (nTotal+1)/2) {
  2348. //idx = (idx-1)/2;
  2349. nIndex = nIndex - (nTotal+1)/2;
  2350. m_right_list.InsertItem(LVIF_PARAM|LVIF_TEXT, nIndex, (LPCSTR)strName, 0, 0, 0, (e.Id & 0xFFFF) << 16 | (e.DebugLevel & 0xFFFF));
  2351. m_right_list.AddItem(nIndex, 1, (LPCSTR)EntityEntry::GetTypeName(e.Type));
  2352. m_right_list.AddItem(nIndex, 2, (LPCSTR)EntityEntry::GetStateName(e.State));
  2353. m_right_list.AddItem(nIndex, 3, tmp);
  2354. } else {
  2355. //idx = idx / 2;
  2356. m_left_list.InsertItem(LVIF_PARAM|LVIF_TEXT, nIndex, (LPCSTR)strName, 0, 0, 0, (e.Id & 0xFFFF) << 16 | (e.DebugLevel & 0xFFFF));
  2357. m_left_list.AddItem(nIndex, 1, (LPCSTR)EntityEntry::GetTypeName(e.Type));
  2358. m_left_list.AddItem(nIndex, 2, (LPCSTR)EntityEntry::GetStateName(e.State));
  2359. m_left_list.AddItem(nIndex, 3, tmp);
  2360. }
  2361. }
  2362. void CMainFrame::OnStartEntityFinished(ErrorCodeEnum ErrorResult, const char *entity_name, void *pData)
  2363. {
  2364. if (ErrorResult == Error_Succeed) {
  2365. output_printf("start %s entity ok!\r\n", entity_name);
  2366. } else {
  2367. output_printf("start %s entity failed! Error = 0x%08X \r\n", entity_name, ErrorResult);
  2368. }
  2369. m_bOperationPending = FALSE;
  2370. KillTimer(0);
  2371. m_progressbar.SetPos(0);
  2372. }
  2373. void CMainFrame::OnStopEntityFinished(ErrorCodeEnum ErrorResult, const char *entity_name, void *pData)
  2374. {
  2375. if (ErrorResult == Error_Succeed) {
  2376. output_printf("stop %s entity ok!\r\n", entity_name);
  2377. } else {
  2378. output_printf("stop %s entity failed! Error = 0x%08X\r\n", entity_name, ErrorResult);
  2379. }
  2380. m_bOperationPending = FALSE;
  2381. KillTimer(0);
  2382. m_progressbar.SetPos(0);
  2383. }
  2384. void CMainFrame::OnPauseEntityFinished(ErrorCodeEnum ErrorResult, const char *entity_name, void *pData)
  2385. {
  2386. if (ErrorResult == Error_Succeed) {
  2387. output_printf("pause %s entity ok!\r\n", entity_name);
  2388. } else {
  2389. output_printf("pause %s entity failed! Error = 0x%08X\r\n", entity_name, ErrorResult);
  2390. }
  2391. m_bOperationPending = FALSE;
  2392. KillTimer(0);
  2393. m_progressbar.SetPos(0);
  2394. }
  2395. void CMainFrame::OnContinueEntityFinished(ErrorCodeEnum ErrorResult, const char *entity_name, void *pData)
  2396. {
  2397. if (ErrorResult == Error_Succeed) {
  2398. output_printf("continue %s entity ok!\r\n", entity_name);
  2399. } else {
  2400. output_printf("continue %s entity failed! Error = 0x%08X\r\n", entity_name, ErrorResult);
  2401. }
  2402. m_bOperationPending = FALSE;
  2403. KillTimer(0);
  2404. m_progressbar.SetPos(0);
  2405. }
  2406. void CMainFrame::OnTerminateEntityFinished(ErrorCodeEnum ErrorResult, const char *entity_name, void *pData)
  2407. {
  2408. if (ErrorResult == Error_Succeed) {
  2409. output_printf("terminate %s entity ok!\r\n", entity_name);
  2410. } else {
  2411. output_printf("terminate %s entity failed! Error = 0x%08X\r\n", entity_name, ErrorResult);
  2412. }
  2413. m_bOperationPending = FALSE;
  2414. KillTimer(0);
  2415. m_progressbar.SetPos(0);
  2416. }
  2417. void CMainFrame::OnEntityStateChanged(const char *entity_name, int new_state, int pid)
  2418. {
  2419. SetEntityState(entity_name, new_state, pid);
  2420. }
  2421. #define PREFIX_LEN 15
  2422. // [16:13:23.123]
  2423. void CMainFrame::output_printf(const char *fmt, ...)
  2424. {
  2425. int len;
  2426. va_list arg;
  2427. va_start(arg, fmt);
  2428. len = _vscprintf(fmt, arg);
  2429. if (len > 0) {
  2430. SYSTEMTIME st;
  2431. char *buf;
  2432. GetLocalTime(&st);
  2433. buf = (char*)malloc(PREFIX_LEN + len+1);
  2434. sprintf(buf, "[%02d:%02d:%02d.%03d] ", st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);
  2435. vsprintf(buf+PREFIX_LEN, fmt, arg);
  2436. m_strOuput += buf;
  2437. m_nLineCount++;
  2438. // 检测最大长度
  2439. CheckOutputMaxLen();
  2440. if (!m_bVScrolling)
  2441. {
  2442. m_output.SetWindowText(m_strOuput);
  2443. //m_output.SetFocus();
  2444. //m_output.ShowCaret();
  2445. m_output.SetSel(m_strOuput.GetLength(), m_strOuput.GetLength());
  2446. m_output.LineScroll(-1);
  2447. }
  2448. free(buf);
  2449. }
  2450. va_end(arg);
  2451. }
  2452. void CMainFrame::CheckOutputMaxLen()
  2453. {
  2454. if (m_nLineCount > 200)
  2455. {
  2456. int count = 0;
  2457. int index = 0;
  2458. while(count < 50 && index < m_strOuput.GetLength())
  2459. {
  2460. index = m_strOuput.Find("\r\n", index);
  2461. if (index == -1)
  2462. break;
  2463. index += 2;
  2464. count++;
  2465. }
  2466. if (index >0 && index < m_strOuput.GetLength())
  2467. {
  2468. m_strOuput.Delete(0, index);
  2469. m_nLineCount -= count;
  2470. }
  2471. else
  2472. {
  2473. m_strOuput = "";
  2474. m_nLineCount = 0;
  2475. }
  2476. }
  2477. }
  2478. #undef PREFIX_LEN
  2479. LRESULT CMainFrame::OnShowMaintainView( UINT uMsg, WPARAM wParam, LPARAM lParam )
  2480. {
  2481. int nPageCount = m_tabView.GetPageCount();
  2482. bool bShowView = wParam == 1;
  2483. bool bHighLevel = lParam == 1;
  2484. int nCurPageIndex = m_tabView.GetActivePage();
  2485. int extendPage = m_sysInitView.getPageShow() ? 1 : 0;
  2486. if (!bShowView)
  2487. {
  2488. while (nPageCount > 1 + (m_cansysInitRm ? 0 : extendPage))
  2489. {
  2490. m_tabView.RemovePage(--nPageCount);
  2491. }
  2492. if (m_cansysInitRm)
  2493. {
  2494. m_sysInitView.SetPageShow(FALSE);
  2495. }
  2496. }
  2497. else
  2498. {
  2499. if (nPageCount == 1 + extendPage)
  2500. {
  2501. if (FALSE == m_sysInitView.getPageShow())
  2502. {
  2503. static BOOL firstTime = TRUE;
  2504. if (!firstTime)
  2505. m_sysInitView.Create(m_tabView, rcDefault);
  2506. else
  2507. firstTime = FALSE;
  2508. m_tabView.AddPage(m_sysInitView.m_hWnd, "操作系统定制");
  2509. m_sysInitView.SetPageShow(TRUE);
  2510. }
  2511. m_sysInfoView.Create(m_tabView);
  2512. m_tabView.AddPage(m_sysInfoView.m_hWnd, "信息浏览");
  2513. m_controlView.Create(m_tabView);
  2514. m_tabView.AddPage(m_controlView.m_hWnd, "常规维护");
  2515. }
  2516. else if (nPageCount == 3 + extendPage && bHighLevel)
  2517. {
  2518. m_highLevelView.Create(m_tabView);
  2519. m_tabView.AddPage(m_highLevelView.m_hWnd, "高级维护");
  2520. }
  2521. else if (nPageCount == 4 + extendPage && !bHighLevel)
  2522. {
  2523. m_tabView.RemovePage(4);
  2524. }
  2525. }
  2526. if (nCurPageIndex <m_tabView.GetPageCount())
  2527. m_tabView.SetActivePage(nCurPageIndex);
  2528. return 0;
  2529. }
  2530. LRESULT CMainFrame::OnShowBeginInitView( UINT uMsg, WPARAM wParam, LPARAM lParam )
  2531. {
  2532. bool bShowView = wParam == 1;
  2533. //初始化按钮显示,add by zl 20170227
  2534. CMenuHandle menuMain = GetMenu();
  2535. if (bShowView)
  2536. {
  2537. menuMain.EnableMenuItem(ID_FILE_INITIALIZE, MF_ENABLED);
  2538. }
  2539. else
  2540. {
  2541. menuMain.EnableMenuItem(ID_FILE_INITIALIZE, MF_GRAYED);
  2542. }
  2543. return 0;
  2544. }
  2545. LRESULT CMainFrame::OnShowMobileDialView( UINT uMsg, WPARAM wParam, LPARAM lParam )
  2546. {
  2547. bool bShowView = wParam == 1;
  2548. CMenuHandle menuMain = GetMenu();
  2549. if (bShowView) {
  2550. menuMain.EnableMenuItem(ID_SETTINGS_DIAL, MF_ENABLED);
  2551. }
  2552. else {
  2553. menuMain.EnableMenuItem(ID_SETTINGS_DIAL, MF_GRAYED);
  2554. }
  2555. return 0;
  2556. }
  2557. LRESULT CMainFrame::OnShowMsg( UINT uMsg, WPARAM wParam, LPARAM lParam )
  2558. {
  2559. char *pMsg = (char*)lParam;
  2560. output_printf(pMsg);
  2561. delete pMsg;
  2562. return 0;
  2563. }
  2564. LRESULT CMainFrame::OnGuiConsole( UINT uMsg, WPARAM wParam, LPARAM lParam )
  2565. {
  2566. callback_entry *entry = static_cast<callback_entry*>((void*)lParam);
  2567. LOG_ASSERT(entry);
  2568. switch (entry->op) {
  2569. case OP_START_ENTITY:
  2570. OnStartEntityFinished(entry->ErrorResult, entry->EntityName, entry->pRawData);
  2571. break;
  2572. case OP_STOP_ENTITY:
  2573. OnStopEntityFinished(entry->ErrorResult, entry->EntityName, entry->pRawData);
  2574. break;
  2575. case OP_PAUSE_ENTITY:
  2576. OnPauseEntityFinished(entry->ErrorResult, entry->EntityName, entry->pRawData);
  2577. break;
  2578. case OP_CONTINUE_ENTITY:
  2579. OnContinueEntityFinished(entry->ErrorResult, entry->EntityName, entry->pRawData);
  2580. break;
  2581. case OP_TERMINATE_ENTITY:
  2582. OnTerminateEntityFinished(entry->ErrorResult, entry->EntityName, entry->pRawData);
  2583. break;
  2584. case OP_FIRE_ENTITY_STATE:
  2585. OnEntityStateChanged(entry->EntityName, entry->state, wParam);
  2586. break;
  2587. default:
  2588. LOG_ASSERT(0);
  2589. break;
  2590. }
  2591. delete entry;
  2592. return 0;
  2593. }
  2594. LRESULT CMainFrame::OnListLeftItemchanged(NMHDR* phdr)
  2595. {
  2596. NMLISTVIEW* pnmlv = (NMLISTVIEW*) phdr;
  2597. m_iSelectIdx = m_left_list.GetSelectedIndex();
  2598. if (m_iSelectIdx != -1) {
  2599. m_iSelectIdx = m_iSelectIdx * 2;
  2600. }
  2601. return 0;
  2602. }
  2603. LRESULT CMainFrame::OnListRightItemchanged(NMHDR* phdr)
  2604. {
  2605. NMLISTVIEW* pnmlv = (NMLISTVIEW*) phdr;
  2606. m_iSelectIdx = m_right_list.GetSelectedIndex();
  2607. if (m_iSelectIdx != -1) {
  2608. m_iSelectIdx = m_iSelectIdx * 2+1;
  2609. }
  2610. return 0;
  2611. }
  2612. LRESULT CMainFrame::OnListLeftItemclicked(NMHDR* phdr)
  2613. {
  2614. m_iSelectIdx = m_left_list.GetSelectedIndex();
  2615. if (m_iSelectIdx != -1) {
  2616. m_iSelectIdx = m_iSelectIdx * 2;
  2617. }
  2618. return 0;
  2619. }
  2620. LRESULT CMainFrame::OnListRightItemclicked(NMHDR* phdr)
  2621. {
  2622. m_iSelectIdx = m_right_list.GetSelectedIndex();
  2623. if (m_iSelectIdx != -1) {
  2624. m_iSelectIdx = m_iSelectIdx * 2+1;
  2625. }
  2626. return 0;
  2627. }
  2628. void CMainFrame::OnTimer(UINT_PTR nIDEvent)
  2629. {
  2630. if (CSmallDateTime::GetNow() - m_OperationBeginTime >= 5)
  2631. {
  2632. output_printf("last operation timeout!\r\n");
  2633. m_bOperationPending = FALSE;
  2634. KillTimer(0);
  2635. m_progressbar.SetPos(0);
  2636. }
  2637. else
  2638. {
  2639. if (m_bOperationPending)
  2640. {
  2641. m_progressbar.StepIt();
  2642. }
  2643. }
  2644. }
  2645. void CMainFrame::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar pScrollBar)
  2646. {
  2647. m_bVScrolling = (nSBCode != SB_ENDSCROLL);
  2648. if(!m_bVScrolling)
  2649. {
  2650. m_output.SetWindowText(m_strOuput);
  2651. m_output.SetFocus();
  2652. m_output.ShowCaret();
  2653. m_output.SetSel(m_strOuput.GetLength(), m_strOuput.GetLength());
  2654. m_output.LineScroll(-1);
  2655. }
  2656. SetMsgHandled(FALSE);
  2657. }
  2658. int CMainFrame::GetEntityDebugLevel(const char *pszEntity)
  2659. {
  2660. int nIndex = FindEntitylistItemIndex(pszEntity);
  2661. if (nIndex != -1)
  2662. {
  2663. if (nIndex & 1)
  2664. {
  2665. return ((int)m_right_list.GetItemData((nIndex-1)/2)) & 0xFFFF;
  2666. }
  2667. else
  2668. {
  2669. return ((int)m_left_list.GetItemData(nIndex/2)) & 0xFFFF;
  2670. }
  2671. }
  2672. return 0;
  2673. }
  2674. CSimpleStringA CMainFrame::GetSelectedEntityName()
  2675. {
  2676. if (m_iSelectIdx == -1)
  2677. return "";
  2678. char entity_name[80];
  2679. if (m_iSelectIdx & 1)
  2680. {
  2681. m_right_list.GetItemText((m_iSelectIdx-1)/2, 0, entity_name, sizeof(entity_name));
  2682. }
  2683. else
  2684. {
  2685. m_left_list.GetItemText(m_iSelectIdx/2, 0, entity_name, sizeof(entity_name));
  2686. }
  2687. char *p = strchr(entity_name, ':');
  2688. if (p)
  2689. *p=0;
  2690. return entity_name;
  2691. }
  2692. void CMainFrame::OnStart(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wnd*/)
  2693. {
  2694. if (m_iSelectIdx == -1)
  2695. return;
  2696. if (m_bOperationPending) {
  2697. output_printf("operation is doing now, please wait for a result!\r\n");
  2698. } else {
  2699. StartEntity(GetSelectedEntityName(), NULL);
  2700. }
  2701. }
  2702. void CMainFrame::OnStop(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wnd*/)
  2703. {
  2704. if (m_iSelectIdx == -1)
  2705. return;
  2706. if (m_bOperationPending) {
  2707. output_printf("operation is doing now, please wait for a result!\r\n");
  2708. } else {
  2709. StopEntity(GetSelectedEntityName());
  2710. }
  2711. }
  2712. void CMainFrame::OnPause(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wnd*/)
  2713. {
  2714. if (m_iSelectIdx == -1)
  2715. return;
  2716. if (m_bOperationPending) {
  2717. output_printf("operation is doing now, please wait for a result!\r\n");
  2718. } else {
  2719. PauseEntity(GetSelectedEntityName());
  2720. }
  2721. }
  2722. void CMainFrame::OnContinue(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wnd*/)
  2723. {
  2724. if (m_iSelectIdx == -1)
  2725. return;
  2726. if (m_bOperationPending) {
  2727. output_printf("operation is doing now, please wait for a result!\r\n");
  2728. } else {
  2729. ContinueEntity(GetSelectedEntityName());
  2730. }
  2731. }
  2732. void CMainFrame::OnKill(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wnd*/)
  2733. {
  2734. if (m_iSelectIdx == -1)
  2735. return;
  2736. if (m_bOperationPending) {
  2737. output_printf("operation is doing now, please wait for a result!\r\n");
  2738. } else {
  2739. TerminateEntity(GetSelectedEntityName());
  2740. }
  2741. }
  2742. void CMainFrame::OnFresh(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wnd*/)
  2743. {
  2744. CAutoArray<EntityEntry> Entities;
  2745. m_pConsole->GetAllEntity(Entities);
  2746. for (int i = 0; i < Entities.GetCount(); ++i) {
  2747. SetEntityState(Entities[i].Name, Entities[i].State, Entities[i].Pid);
  2748. }
  2749. }
  2750. void CMainFrame::OnAbout(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wnd*/)
  2751. {
  2752. /*ATL::CSimpleDialog<IDD_ABOUTBOX> dlg;
  2753. dlg.DoModal();*/
  2754. CAboutDlg dlg(m_pConsole);
  2755. dlg.DoModal();
  2756. }
  2757. void CMainFrame::OnInitialize(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wnd*/)
  2758. {
  2759. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("begin initialize...");
  2760. m_pConsole->BeginInitialize();
  2761. }
  2762. void CMainFrame::OnDeleteKeySet(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wnd*/)
  2763. {
  2764. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("delete keyset...");
  2765. m_pConsole->DeleteKeySet();
  2766. }
  2767. void CMainFrame::OnMaintain(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wnd*/)
  2768. {
  2769. //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("begin maintain, validate user now");
  2770. CLoginDlg dlg;
  2771. if (dlg.DoModal() == IDOK)
  2772. {
  2773. CMenuHandle menuMain = GetMenu();
  2774. menuMain.EnableMenuItem(ID_FILE_HIGHLEVEL, MF_GRAYED);
  2775. auto pEntity = m_pConsole->GetEntity();
  2776. CMaterialMgrCnn *pCnn = new CMaterialMgrCnn(pEntity);
  2777. if (pCnn->ConnectFromCentralSetting() && pCnn->IsConnectionOK())
  2778. {
  2779. auto rc = pCnn->MaintainerLogin(dlg.m_strUserID, dlg.m_strPassword);
  2780. if (rc == Error_Succeed)
  2781. {
  2782. MessageBoxA("维护用户登录验证通过");
  2783. menuMain.EnableMenuItem(ID_FILE_HIGHLEVEL, MF_ENABLED);
  2784. auto pGUIEntity = (CGUIConsoleEntity*)pEntity;
  2785. pGUIEntity->PostUserLoginEvent(dlg.m_strUserID);
  2786. }
  2787. else
  2788. MessageBoxA(CSimpleStringA::Format("维护用户登录验证失败(0x%X)", rc));
  2789. pCnn->Close();
  2790. }
  2791. else
  2792. MessageBoxA("连接物料管理服务失败");
  2793. pCnn->DecRefCount();
  2794. pCnn = NULL;
  2795. }
  2796. }
  2797. void CMainFrame::OnHighLevel(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wnd*/)
  2798. {
  2799. auto pEntity = m_pConsole->GetEntity();
  2800. auto pGUIEntity = (CGUIConsoleEntity*)pEntity;
  2801. pGUIEntity->Empower(pGUIEntity->GetCurMaintainer());
  2802. }
  2803. //void CMainFrame::OnReboot(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wnd*/)
  2804. //{
  2805. // m_pConsole->ReqFrameworkQuit();
  2806. //}
  2807. void CMainFrame::OnShellExit(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wnd*/)
  2808. {
  2809. m_pConsole->ReqFrameworkQuit(false);
  2810. //ShowWindow(SW_MINIMIZE);
  2811. }
  2812. void CMainFrame::OnOSRestart(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wnd*/)
  2813. {
  2814. m_pConsole->ReqFrameworkQuit(true);
  2815. //ShowWindow(SW_MINIMIZE);
  2816. }
  2817. void CMainFrame::SetEntityDebugLevel(const char *pszEntity, int nDebugLevel)
  2818. {
  2819. m_pConsole->SetDebugLevel(pszEntity, nDebugLevel);
  2820. }
  2821. void CMainFrame::StartEntity(const char *entity_name, const char *cmdline)
  2822. {
  2823. ErrorCodeEnum Error = m_pConsole->AsyncStartEntity(entity_name, cmdline, NULL);
  2824. if (Error == Error_Succeed) {
  2825. output_printf("starting %s\r\n", entity_name);
  2826. m_bOperationPending = TRUE;
  2827. m_OperationBeginTime = CSmallDateTime::GetNow();
  2828. SetTimer(0, 100, NULL);
  2829. } else {
  2830. output_printf("start %s failed, error = 0x%08X\r\n", entity_name, Error);
  2831. }
  2832. }
  2833. void CMainFrame::StopEntity(const char *entity_name)
  2834. {
  2835. ErrorCodeEnum Error = m_pConsole->AsyncStopEntity(entity_name, NULL);
  2836. if (Error == Error_Succeed) {
  2837. output_printf("stopping %s\r\n", entity_name);
  2838. m_bOperationPending = TRUE;
  2839. m_OperationBeginTime = CSmallDateTime::GetNow();
  2840. SetTimer(0, 100, NULL);
  2841. } else {
  2842. output_printf("stop %s failed, error = 0x%08X\r\n", entity_name, Error);
  2843. }
  2844. }
  2845. void CMainFrame::PauseEntity(const char *entity_name)
  2846. {
  2847. ErrorCodeEnum Error = m_pConsole->AsyncPauseEntity(entity_name, NULL);
  2848. if (Error == Error_Succeed) {
  2849. output_printf("pausing %s\r\n", entity_name);
  2850. m_bOperationPending = TRUE;
  2851. m_OperationBeginTime = CSmallDateTime::GetNow();
  2852. SetTimer(0, 100, NULL);
  2853. } else {
  2854. output_printf("pause %s failed, error = %d\r\n", entity_name, Error);
  2855. }
  2856. }
  2857. void CMainFrame::ContinueEntity(const char *entity_name)
  2858. {
  2859. ErrorCodeEnum Error = m_pConsole->AsyncContinueEntity(entity_name, NULL);
  2860. if (Error == Error_Succeed) {
  2861. output_printf("continuing %s\r\n", entity_name);
  2862. m_bOperationPending = TRUE;
  2863. m_OperationBeginTime = CSmallDateTime::GetNow();
  2864. SetTimer(0, 100, NULL);
  2865. } else {
  2866. output_printf("continue %s failed, error = %d\r\n", entity_name, Error);
  2867. }
  2868. }
  2869. void CMainFrame::TerminateEntity(const char *entity_name)
  2870. {
  2871. ErrorCodeEnum Error = m_pConsole->AsyncTerminateEntity(entity_name, NULL);
  2872. if (Error == Error_Succeed) {
  2873. output_printf("terminating %s\r\n", entity_name);
  2874. m_bOperationPending = TRUE;
  2875. m_OperationBeginTime = CSmallDateTime::GetNow();
  2876. SetTimer(0, 100, NULL);
  2877. } else {
  2878. output_printf("terminate %s failed, error = %d\r\n", entity_name, Error);
  2879. }
  2880. }
  2881. void CMainFrame::OnEditEnter(const char *tmp)
  2882. {
  2883. char entity[128];
  2884. if (_strnicmp(tmp, "start", 5) == 0) { /* start entity */
  2885. const char *p = tmp+5;
  2886. while (*p == ' ') p++;
  2887. if (sscanf(p, "%s", entity) == 1) {
  2888. const char *cmdline = p + strlen(entity);
  2889. while (*cmdline == ' ') cmdline++;
  2890. StartEntity(entity, cmdline);
  2891. } else {
  2892. output_printf("invalid input format!\r\n");
  2893. }
  2894. } else if (_strnicmp(tmp, "stop", 4) == 0) { /* stop entity */
  2895. const char *p = tmp+4;
  2896. while (*p == ' ') p++;
  2897. if (sscanf(p, "%s", entity) == 1) {
  2898. StopEntity(entity);
  2899. } else {
  2900. output_printf("invalid input format!\r\n");
  2901. }
  2902. } else if (_strnicmp(tmp, "pause", 5) == 0) { /* pause entity */
  2903. const char *p = tmp+5;
  2904. while (*p == ' ') p++;
  2905. if (sscanf(p, "%s", entity) == 1) {
  2906. PauseEntity(entity);
  2907. } else {
  2908. output_printf("invalid input format!\r\n");
  2909. }
  2910. } else if (_strnicmp(tmp, "continue", 8) == 0) { /* continue entity */
  2911. const char *p = tmp+8;
  2912. while (*p == ' ') p++;
  2913. if (sscanf(p, "%s", entity) == 1) {
  2914. ContinueEntity(entity);
  2915. } else {
  2916. output_printf("invalid input format!\r\n");
  2917. }
  2918. } else if (_strnicmp(tmp, "terminate", 9) == 0) { /* terminate entity */
  2919. const char *p = tmp+9;
  2920. while (*p == ' ') p++;
  2921. if (sscanf(p, "%s", entity) == 1) {
  2922. TerminateEntity(entity);
  2923. } else {
  2924. output_printf("invalid input format!\r\n");
  2925. }
  2926. } else if (_stricmp(tmp, "help") == 0 || _stricmp(tmp, "?") == 0) {
  2927. Usage();
  2928. }
  2929. else if (_stricmp(tmp, "show console") == 0)
  2930. {
  2931. m_pConsole->ShowOutputConsole();
  2932. }
  2933. else if (_stricmp(tmp, "close console") == 0)
  2934. {
  2935. m_pConsole->CloseOutputConsole();
  2936. }
  2937. m_cmd.SetWindowText(NULL);
  2938. }
  2939. void CMainFrame::Usage()
  2940. {
  2941. output_printf("help -- display help usage\r\n");
  2942. output_printf("start <Entity_Name> [arg1] [arg2] ... [argn] -- start entity with args[optional] \r\n");
  2943. output_printf("stop <Entity_Name> -- stop entity\r\n");
  2944. output_printf("pause <Entity_Name> -- pause entity\r\n");
  2945. output_printf("continue <Entity_Name> -- pause entity\r\n");
  2946. output_printf("terminate <Entity_Name> -- terminate entity\r\n");
  2947. output_printf("show console -- output running info into console\r\n");
  2948. output_printf("close console -- close output console\r\n");
  2949. }
  2950. HBRUSH CMainFrame::OnCtlColorEdit( CDCHandle dc, CEdit edit )
  2951. {
  2952. if (m_output.m_hWnd == edit.m_hWnd)
  2953. {
  2954. dc.SetTextColor(RGB(0, 255, 0));
  2955. dc.SetBkColor(RGB(0,0,0));
  2956. return (HBRUSH)GetStockObject(BLACK_BRUSH);
  2957. } else {
  2958. SetMsgHandled(FALSE);
  2959. return 0;
  2960. }
  2961. }
  2962. HBRUSH CMainFrame::OnCtlColorStatic( CDCHandle dc, CStatic wndStatic )
  2963. {
  2964. if (m_output.m_hWnd == wndStatic.m_hWnd) {
  2965. dc.SetTextColor(RGB(0, 255, 0));
  2966. dc.SetBkColor(RGB(0, 0, 0));
  2967. return (HBRUSH)GetStockObject(BLACK_BRUSH);
  2968. } else {
  2969. SetMsgHandled(FALSE);
  2970. return 0;
  2971. }
  2972. }
  2973. void CMainFrame::OnOutputChanged( UINT uNotifyCode, int nID, CWindow wndCtl )
  2974. {
  2975. int n = m_output.GetWindowTextLength();
  2976. m_strOuput.GetBufferSetLength(n);
  2977. m_output.GetWindowText(m_strOuput.GetBufferSetLength(n), n+1);
  2978. }
  2979. void CMainFrame::OnStartMenuRange(UINT uNotifyCode, int nID, CWindow wndCtl)
  2980. {
  2981. CMenuHandle menuMain = GetMenu();
  2982. CMenuHandle menuStartList = menuMain.GetSubMenu(2);
  2983. WTL::CString strText;
  2984. menuStartList.GetMenuStringA(nID, strText, MF_BYCOMMAND);
  2985. if (strText.GetLength() > 0) {
  2986. int m = strText.Find("\t", 0);
  2987. if (m > 0) {
  2988. strText = strText.Left(m);
  2989. }
  2990. const char *p = strchr(strText, ' ');
  2991. if (p) {
  2992. char name[128];
  2993. memcpy(name, strText, p-(LPCSTR)strText);
  2994. name[p-(LPCSTR)strText] = 0;
  2995. p++;
  2996. StartEntity(name, p);
  2997. }
  2998. }
  2999. }
  3000. LRESULT CMainFrame::OnChangeStartState(UINT uMsg, WPARAM wParam, LPARAM lParam)
  3001. {
  3002. LOG_FUNCTION();
  3003. ShowWindow(SW_SHOW);
  3004. m_bStarted = true;
  3005. return 0;
  3006. }
  3007. void CCommandEdit::OnChar( UINT nChar, UINT nRepCnt, UINT nFlags )
  3008. {
  3009. if (nChar == VK_RETURN) {
  3010. char tmp[512];
  3011. int n = GetWindowText(tmp, sizeof(tmp));
  3012. if (n <= 0)
  3013. return;
  3014. if (m_nHistorySize) {
  3015. int last = (m_nHistoryHead + m_nHistorySize-1) % MAX_HISTORY;
  3016. if (strcmp(tmp, m_strHistoryList[last]) != 0) {
  3017. m_nHistoryCursor = (m_nHistoryHead + m_nHistorySize) % MAX_HISTORY;
  3018. m_strHistoryList[m_nHistoryCursor] = tmp;
  3019. m_nHistorySize = (m_nHistorySize + 1) % MAX_HISTORY;
  3020. }
  3021. } else {
  3022. m_nHistoryCursor = (m_nHistoryHead + m_nHistorySize) % MAX_HISTORY;
  3023. m_strHistoryList[m_nHistoryCursor] = tmp;
  3024. m_nHistorySize = (m_nHistorySize + 1) % MAX_HISTORY;
  3025. }
  3026. m_frm->OnEditEnter(tmp);
  3027. SetWindowText(NULL);
  3028. } else {
  3029. SetMsgHandled(FALSE);
  3030. }
  3031. }
  3032. void CCommandEdit::OnKeyDown( UINT nChar, UINT nRepCnt, UINT nFlags )
  3033. {
  3034. int last = m_nHistoryCursor;
  3035. if (nChar == VK_UP) {
  3036. if (m_nHistoryCursor != m_nHistoryHead)
  3037. m_nHistoryCursor = (m_nHistoryCursor + MAX_HISTORY - 1) % MAX_HISTORY;
  3038. SetWindowText(m_strHistoryList[last]);
  3039. } else if (nChar == VK_DOWN) {
  3040. if (m_nHistorySize && (m_nHistoryCursor != (m_nHistoryHead+m_nHistorySize-1) % MAX_HISTORY))
  3041. m_nHistoryCursor = (m_nHistoryCursor + 1) % MAX_HISTORY;
  3042. SetWindowText(m_strHistoryList[last]);
  3043. } else {
  3044. SetMsgHandled(FALSE);
  3045. }
  3046. }
  3047. LRESULT StartPageDlg::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam)
  3048. {
  3049. LOG_FUNCTION();
  3050. MoveWindow(0, 0, 960, 610);
  3051. CRect rc;
  3052. GetWindowRect(&rc);
  3053. GetDlgItem(IDC_STATIC1).MoveWindow(rc.left + 40, rc.top + 38, 187, 24);
  3054. GetDlgItem(IDC_STATIC2).MoveWindow(rc.left + 385, rc.top + 97, 108, 39);
  3055. GetDlgItem(IDC_EXITVTM).MoveWindow(rc.left + 67, rc.top + 550, 38, 30);
  3056. GetDlgItem(IDC_PROGRESS).MoveWindow(rc.left + 493, rc.top + 97, 80, 39);
  3057. GetDlgItem(IDC_STATIC_BASICINFO).MoveWindow(rc.left +800, rc.top + 540, 140, 60);
  3058. m_pOutput = new COutputList();
  3059. RECT rect;
  3060. SetRect(&rect, rc.left + 70, rc.top + 168, rc.left + 70 + 820, rc.top + 168 + 367);
  3061. m_pOutput->Create(m_hWnd, rect, "", WS_VISIBLE | WS_CHILD | LBS_OWNERDRAWVARIABLE | LVS_REPORT
  3062. | LBS_HASSTRINGS);
  3063. m_pOutput->ModifyStyle(NULL, WS_HSCROLL | WS_VSCROLL);
  3064. CSimpleStringA basicInoShowText(CSimpleStringA("v") + m_baseInfo.strSoftwareVersion + "\r\n" + m_baseInfo.strTerminalNo + "\r\n" + m_baseInfo.strMachineType);
  3065. GetDlgItem(IDC_STATIC_BASICINFO).SetWindowTextA(basicInoShowText.GetData());
  3066. CenterWindow();
  3067. return 0;
  3068. }
  3069. LRESULT StartPageDlg::OnNcHitTest(UINT uMsg, WPARAM wParam, LPARAM lParam)
  3070. {
  3071. CRect rc;
  3072. POINT pt;
  3073. pt.x = GET_X_LPARAM(lParam);
  3074. pt.y = GET_Y_LPARAM(lParam);
  3075. GetClientRect(&rc);
  3076. ClientToScreen(&rc);
  3077. return rc.PtInRect(pt) ? HTCAPTION : 0;
  3078. }
  3079. LRESULT StartPageDlg::OnClose(UINT uMsg, WPARAM wParam, LPARAM lParam)
  3080. {
  3081. LOG_FUNCTION();
  3082. DestroyWindow();
  3083. return 0;
  3084. }
  3085. HBRUSH StartPageDlg::OnCtlColorDlg(CDCHandle dc, CWindow wnd)
  3086. {
  3087. if (m_hWnd == wnd.m_hWnd)
  3088. {
  3089. dc.SetBkColor(RGB(0,0,0));
  3090. return (HBRUSH)GetStockObject(WHITE_BRUSH);
  3091. } else {
  3092. SetMsgHandled(FALSE);
  3093. return 0;
  3094. }
  3095. }
  3096. HBRUSH StartPageDlg::OnCtlColorStatic( CDCHandle dc, CStatic wndStatic)
  3097. {
  3098. if (GetDlgItem(IDC_STATIC2).m_hWnd == wndStatic.m_hWnd) {
  3099. dc.SetTextColor(RGB(51, 51, 51));
  3100. dc.SetBkColor(RGB(255, 255, 255));
  3101. CFont font;
  3102. font.CreateFontA(30, 0, 0, 0, FW_HEAVY, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_CHARACTER_PRECIS,
  3103. CLIP_CHARACTER_PRECIS, DEFAULT_QUALITY, FF_SWISS, "微软雅黑");
  3104. dc.SelectFont(font);
  3105. return (HBRUSH)GetStockObject(WHITE_BRUSH);
  3106. } else if (GetDlgItem(IDC_EXITVTM).m_hWnd == wndStatic.m_hWnd) {
  3107. dc.SetTextColor(RGB(77, 123, 254));
  3108. dc.SetBkColor(RGB(255, 255, 255));
  3109. CFont font;
  3110. font.CreateFontA(22, 0, 0, 0, FW_BOLD, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_CHARACTER_PRECIS,
  3111. CLIP_CHARACTER_PRECIS, DEFAULT_QUALITY, FF_SWISS, "微软雅黑");
  3112. dc.SelectFont(font);
  3113. return (HBRUSH)GetStockObject(WHITE_BRUSH);
  3114. } else if (GetDlgItem(IDC_STATIC_BASICINFO).m_hWnd == wndStatic.m_hWnd) {
  3115. dc.SetTextColor(RGB(169, 169, 169));
  3116. dc.SetBkColor(RGB(255, 255, 255));
  3117. CFont font;
  3118. font.CreateFontA(20, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_CHARACTER_PRECIS,
  3119. CLIP_CHARACTER_PRECIS, DEFAULT_QUALITY, FF_SWISS, "微软雅黑");
  3120. dc.SelectFont(font);
  3121. return (HBRUSH)GetStockObject(WHITE_BRUSH);
  3122. }
  3123. SetMsgHandled(FALSE);
  3124. return 0;
  3125. }
  3126. LRESULT StartPageDlg::OnStnClickedStatic3(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
  3127. {
  3128. m_pStartTask->ReqFrameworkQuit(false);
  3129. return 0;
  3130. }
  3131. void StartPageDlg::OutPut(const char* msg, COLORREF rgb)
  3132. {
  3133. CString str(msg);
  3134. //m_pOutput->SetItemHeight(m_pOutput->GetCount() - 1, 21);
  3135. CRect rc;
  3136. m_pOutput->GetClientRect(&rc);
  3137. int maxWidth = rc.Width();
  3138. int len = str.GetLength();
  3139. CClientDC dc(m_pOutput->m_hWnd);
  3140. SIZE strsz = {0};
  3141. GetTextExtentPoint32((HDC)dc.m_hDC, str, len, &strsz);
  3142. if(strsz.cx == 0)
  3143. return;
  3144. if(strsz.cx < maxWidth - 50)
  3145. {
  3146. m_pOutput->AddString(str, rgb);
  3147. m_pOutput->SetItemHeight(m_pOutput->GetCount() - 1, 21);
  3148. m_pOutput->SetCurSel(m_pOutput->GetCount() - 1);
  3149. return;
  3150. }
  3151. while(strsz.cx >= maxWidth - 50)
  3152. {
  3153. len--;
  3154. GetTextExtentPoint32((HDC)dc.m_hDC, str, len, &strsz);
  3155. }
  3156. m_pOutput->AddString(str.Left(len), rgb);
  3157. m_pOutput->SetItemHeight(m_pOutput->GetCount() - 1, 21);
  3158. m_pOutput->AddString(str.Right(str.GetLength() - len), rgb);
  3159. m_pOutput->SetItemHeight(m_pOutput->GetCount() - 1, 21);
  3160. m_pOutput->SetCurSel(m_pOutput->GetCount() - 1);
  3161. }
  3162. LRESULT StartPageDlg::OnShowMsg( UINT uMsg, WPARAM wParam, LPARAM lParam )
  3163. {
  3164. char *pMsg = (char*)wParam;
  3165. COLORREF rgb = (COLORREF)lParam;
  3166. OutPut(pMsg, rgb);
  3167. delete pMsg;
  3168. return 0;
  3169. }
  3170. LRESULT StartPageDlg::OnShowProgress(UINT uMsg, WPARAM wParam, LPARAM lParam)
  3171. {
  3172. int idleNum, totalNum;
  3173. m_pStartTask->GetIdleEntityNum(idleNum, totalNum);
  3174. CSimpleStringA csProgress = CSimpleString::Format("(%d/%d)", idleNum, totalNum);
  3175. GetDlgItem(IDC_PROGRESS).SetWindowTextA(csProgress.GetData());
  3176. return 0;
  3177. }
  3178. HBRUSH StartPageDlg::OnCtlColorProgress( CDCHandle dc, CStatic wndStatic)
  3179. {
  3180. if (GetDlgItem(IDC_PROGRESS).m_hWnd == wndStatic.m_hWnd) {
  3181. dc.SetTextColor(RGB(51, 51, 51));
  3182. dc.SetBkColor(RGB(255, 255, 255));
  3183. CFont font;
  3184. font.CreateFontA(30, 0, 0, 0, FW_HEAVY, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_CHARACTER_PRECIS,
  3185. CLIP_CHARACTER_PRECIS, DEFAULT_QUALITY, FF_SWISS, "微软雅黑");
  3186. dc.SelectFont(font);
  3187. return (HBRUSH)GetStockObject(WHITE_BRUSH);
  3188. }else {
  3189. SetMsgHandled(FALSE);
  3190. return 0;
  3191. }
  3192. }
  3193. void COutputList::DrawItem(LPDRAWITEMSTRUCT lpDIS)
  3194. {
  3195. if ((int)lpDIS->itemID < 0)
  3196. return;
  3197. CDCHandle pDC(lpDIS->hDC);
  3198. COLORREF crText;
  3199. CString sText;
  3200. COLORREF crNorm = (COLORREF)lpDIS->itemData; // Color information is in item data.
  3201. COLORREF crHilite = RGB(255-GetRValue(crNorm), 255-GetGValue(crNorm), 255-GetBValue(crNorm));
  3202. // If item has been selected, draw the highlight rectangle using the item's color.
  3203. if ((lpDIS->itemState & ODS_SELECTED) &&
  3204. (lpDIS->itemAction & (ODA_SELECT | ODA_DRAWENTIRE)))
  3205. {
  3206. pDC.FillSolidRect(&lpDIS->rcItem, crNorm);
  3207. }
  3208. // If item has been deselected, draw the rectangle using the window color.
  3209. if (!(lpDIS->itemState & ODS_SELECTED) && (lpDIS->itemAction & ODA_SELECT))
  3210. {
  3211. pDC.FillSolidRect(&lpDIS->rcItem, ::GetSysColor(COLOR_WINDOW));
  3212. }
  3213. // If item has focus, draw the focus rect.
  3214. if ((lpDIS->itemAction & ODA_FOCUS) && (lpDIS->itemState & ODS_FOCUS))
  3215. pDC.DrawFocusRect(&lpDIS->rcItem);
  3216. // If item does not have focus, redraw (erase) the focus rect.
  3217. if ((lpDIS->itemAction & ODA_FOCUS) && !(lpDIS->itemState & ODS_FOCUS))
  3218. pDC.DrawFocusRect(&lpDIS->rcItem);
  3219. // Set the background mode to TRANSPARENT to draw the text.
  3220. int nBkMode = pDC.SetBkMode(TRANSPARENT);
  3221. // If the item's color information is set, use the highlight color
  3222. // gray text color, or normal color for the text.
  3223. if (lpDIS->itemData)
  3224. {
  3225. if (lpDIS->itemState & ODS_SELECTED)
  3226. crText = pDC.SetTextColor(crHilite);
  3227. else if (lpDIS->itemState & ODS_DISABLED)
  3228. crText = pDC.SetTextColor(::GetSysColor(COLOR_GRAYTEXT));
  3229. else
  3230. crText = pDC.SetTextColor(crNorm);
  3231. }
  3232. // Else the item's color information is not set, so use the
  3233. // system colors for the text.
  3234. else
  3235. {
  3236. if (lpDIS->itemState & ODS_SELECTED)
  3237. crText = pDC.SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));
  3238. else if (lpDIS->itemState & ODS_DISABLED)
  3239. crText = pDC.SetTextColor(::GetSysColor(COLOR_GRAYTEXT));
  3240. else
  3241. crText = pDC.SetTextColor(::GetSysColor(COLOR_WINDOWTEXT));
  3242. }
  3243. // Get and display item text.
  3244. GetText(lpDIS->itemID, sText);
  3245. CRect rect = lpDIS->rcItem;
  3246. // Setup the text format.
  3247. UINT nFormat = DT_LEFT | DT_SINGLELINE | DT_VCENTER;
  3248. if (GetStyle() & LBS_USETABSTOPS)
  3249. nFormat |= DT_EXPANDTABS;
  3250. // Calculate the rectangle size before drawing the text.
  3251. CFont font;
  3252. font.CreateFontA(20, 0, 0, 0, FW_MEDIUM, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_CHARACTER_PRECIS,
  3253. CLIP_CHARACTER_PRECIS, DEFAULT_QUALITY, FF_SWISS, "微软雅黑");
  3254. pDC.SelectFont(font);
  3255. pDC.DrawText(sText, -1, &rect, nFormat | DT_CALCRECT);
  3256. pDC.DrawText(sText, -1, &rect, nFormat);
  3257. pDC.SetTextColor(crText);
  3258. pDC.SetBkMode(nBkMode);
  3259. }
  3260. void COutputList::MeasureItem(LPMEASUREITEMSTRUCT lpMIS)
  3261. {
  3262. lpMIS->itemHeight = ::GetSystemMetrics(SM_CXMENUCHECK);
  3263. DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("lpMIS->itemHeight=%d", lpMIS->itemHeight);
  3264. }
  3265. int COutputList::AddString(LPCTSTR lpszItem)
  3266. {
  3267. return ((CListBox*)this)->AddString(lpszItem);
  3268. }
  3269. int COutputList::AddString(LPCTSTR lpszItem, COLORREF rgb)
  3270. {
  3271. int nItem = AddString(lpszItem);
  3272. if (nItem >= 0)
  3273. SetItemData(nItem, rgb);
  3274. return nItem;
  3275. }
  3276. int COutputList::InsertString(int nIndex, LPCTSTR lpszItem)
  3277. {
  3278. return ((CListBox*)this)->InsertString(nIndex, lpszItem);
  3279. }
  3280. int COutputList::InsertString(int nIndex, LPCTSTR lpszItem, COLORREF rgb)
  3281. {
  3282. int nItem = ((CListBox*)this)->InsertString(nIndex,lpszItem);
  3283. if (nItem >= 0)
  3284. SetItemData(nItem, rgb);
  3285. return nItem;
  3286. }
  3287. void COutputList::SetItemColor(int nIndex, COLORREF rgb)
  3288. {
  3289. SetItemData(nIndex, rgb);
  3290. RedrawWindow();
  3291. }