mainfrm.cpp 109 KB

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