mainfrm.cpp 100 KB

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