From e194dabbfa9f3268c11784de7711e4df149d2f4a Mon Sep 17 00:00:00 2001 From: Bryan Roe Date: Tue, 25 Oct 2022 22:50:36 -0700 Subject: [PATCH] Updated Details Dialog on Windows Installer, to have an autoproxy check box. Updated so that this checkbox shows the configured autoproxy state, and can be manually set or unset. --- meshservice/MeshService.aps | Bin 177532 -> 177836 bytes meshservice/MeshService.rc | Bin 11876 -> 12258 bytes meshservice/ServiceMain.c | 53 ++++++++++++++++++++++++++++-------- meshservice/resource.h | Bin 1829 -> 4030 bytes 4 files changed, 42 insertions(+), 11 deletions(-) diff --git a/meshservice/MeshService.aps b/meshservice/MeshService.aps index 2efaa801811d5c2384b2d01135dafd95bca83086..c52697e998dec053da3b85759b7cb4ed87f64151 100644 GIT binary patch delta 1002 zcmb7D-%Ha`6hHTTH)peQ7+RZd&Yb#S(`_n>SuwYTbM1$^#Hf^ra?`otbUKAf5{mGp zxX^tu>A}E_!eaJAe2Qv{sC#7ZAc;!bPwlyzTfltoXEgm2W_6r(-()%->RwQ}zyz603qR*Q&%)g9*-p-0FLVEX_Xzs#%N7dX|-a2RnyhN*U=00|6H0_Ciu&x9CMg6bMST>j><);*7+IK< z+H)%Zsh++T#g7s*3VR&OSx8)sW8;zHT+6L&A{#|foF;u8M++NF|BT}-GP@W_V68AF zP~kBWWgb{S1wK%d6)J%4ZH}`07Y2^eyo?osI)~q-<4I7@G3q%$#}5S}yFEp;u_5Hi~zTO~4o?%E%Q68_w9S9jH{)}>%ENsabLUA44ALZOEs zk`qmkP!9z@n6bLc7WB|l7(w(9^iY&RF9k&pLNC%b_b%q1%bYng^Ue3oId|b_?)s11 z+bv4{63Rxes=#_{Y_eLB9~6tIkg2&uCtGwsFX?8;yq*8|%a$q*LL(X|>#E=|r`y{5MxBZtq z;h7L|8S(6t-#jhix!mV%&3k3E=xqSYSG&{fGrI> z&Zi)^>CvV%4@VS6iy?dz%=9sgr9~<~y`7~qcStrw@QWgVEKw{Gg;W>Cnw)LM{6|DT z4M)*0x{`0AIEi_Ho!7wzPazxD=<67k(93cBECR^~m$0bbwB8CZH+#*trHR{Lxa3=x z)l`rLP(~t-4sn*s+2QXFa>vnX>eCoSAx=4F?gIZNWD6R?`ulDyGanvaL^21lidN&8 zrL1z)#*s zPy=+k)8zG%;*=T>j=c2KouY}Ey3o4NF!iafo!vwyioAyW+s(0OspU)EjC|No6HUX DqFF+LLn=c7gD!&+gBgPYgCT<{gB1{)07)YTqshAk6en+B<(M2G$hWzH zUyc#K^3A&iSh<)DfcmZq)o*r^R$yedU@)9KTSRhmoy-xo$;$)}Y_3y1!^CXKU^@As LfcWM#jT&|U6el3r diff --git a/meshservice/ServiceMain.c b/meshservice/ServiceMain.c index 5d945e5..f67d045 100644 --- a/meshservice/ServiceMain.c +++ b/meshservice/ServiceMain.c @@ -1046,6 +1046,9 @@ int wmain(int argc, char* wargv[]) } +int autoproxy_checked = 0; +char *configured_autoproxy_value = NULL; + #ifndef _MINCORE COLORREF gBKCOLOR = RGB(0, 0, 0); COLORREF gFGCOLOR = RGB(0, 0, 0); @@ -1194,6 +1197,7 @@ INT_PTR CALLBACK DialogHandler(HWND hDlg, UINT message, WPARAM wParam, LPARAM lP duk_context *ctx = g_dialogCtx; char *lang = g_dialogLanguage; + if (duk_has_prop_string(ctx, -1, lang)) { duk_get_prop_string(ctx, -1, lang); @@ -1275,6 +1279,9 @@ INT_PTR CALLBACK DialogHandler(HWND hDlg, UINT message, WPARAM wParam, LPARAM lP displayName = Duktape_GetStringPropertyValue(ctx, -1, "displayName", NULL); meshServiceName = Duktape_GetStringPropertyValue(ctx, -1, "meshServiceName", NULL); + configured_autoproxy_value = Duktape_GetStringPropertyValue(g_dialogCtx, -1, "autoproxy", NULL); + autoproxy_checked = configured_autoproxy_value != NULL; + // Set text in the dialog box if (installFlags != NULL) { installFlagsInt = ILib_atoi2_int32(installFlags, 255); } if (strnlen_s(meshid, 255) > 50) { meshid += 2; meshid[42] = 0; } @@ -1375,14 +1382,8 @@ INT_PTR CALLBACK DialogHandler(HWND hDlg, UINT message, WPARAM wParam, LPARAM lP EnableWindow(GetDlgItem(hDlg, IDC_UNINSTALLBUTTON), FALSE); EnableWindow(GetDlgItem(hDlg, IDCLOSE), FALSE); - if (LOWORD(wParam) == IDC_INSTALLBUTTON) - { - result = RunAsAdmin("-fullinstall", IsAdmin() == TRUE); - } - else - { - result = RunAsAdmin("-fulluninstall", IsAdmin() == TRUE); - } + sprintf_s(ILibScratchPad, sizeof(ILibScratchPad), "-full%s %s%s", LOWORD(wParam) == IDC_INSTALLBUTTON ? "install" : "uninstall", autoproxy_checked != 0 ? "--autoproxy=" : "", autoproxy_checked != 0 ? (configured_autoproxy_value != NULL ? configured_autoproxy_value : "1") : ""); + result = RunAsAdmin(ILibScratchPad, IsAdmin() == TRUE); if (result) { @@ -1413,7 +1414,7 @@ INT_PTR CALLBACK DialogHandler(HWND hDlg, UINT message, WPARAM wParam, LPARAM lP SetWindowTextA(GetDlgItem(hDlg, IDC_STATUSTEXT), "Running as temporary agent"); DWORD pid = GetCurrentProcessId(); - sprintf_s(ILibScratchPad, sizeof(ILibScratchPad), "connect --disableUpdate=1 --hideConsole=1 --exitPID=%u", pid); + sprintf_s(ILibScratchPad, sizeof(ILibScratchPad), "connect --disableUpdate=1 --hideConsole=1 --exitPID=%u %s%s", pid, autoproxy_checked != 0 ? "--autoproxy=" : "", autoproxy_checked != 0 ? (configured_autoproxy_value != NULL ? configured_autoproxy_value : "1") : ""); if (RunAsAdmin(ILibScratchPad, IsAdmin() == TRUE) == 0) { RunAsAdmin(ILibScratchPad, 1); } if (closeButtonTextSet != 0) { SetWindowTextW(GetDlgItem(hDlg, IDCLOSE), closeButtonText); } @@ -1430,12 +1431,15 @@ INT_PTR CALLBACK DialogHandler(HWND hDlg, UINT message, WPARAM wParam, LPARAM lP // Message handler for details dialog box. INT_PTR CALLBACK DialogHandler2(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { - char *fileName = NULL, *meshname = NULL, *meshid = NULL, *serverid = NULL, *serverurl = NULL, *installFlags = NULL, *mshfile = NULL; + char *fileName = NULL, *meshname = NULL, *meshid = NULL, *serverid = NULL, *serverurl = NULL, *installFlags = NULL, *mshfile = NULL, *autoproxy = NULL; char *displayName = NULL, *meshServiceName = NULL; int hiddenButtons = 0; // Flags: 1 if "Connect" is hidden, 2 if "Uninstall" is hidden, 4 is "Install is hidden" UNREFERENCED_PARAMETER(lParam); switch (message) { + case WM_CLOSE: + autoproxy_checked = IsDlgButtonChecked(hDlg, IDC_AUTOPROXY_CHECK); + break; case WM_CTLCOLORDLG: { // Set the background of the dialog box to blue if (DialogBackgroundBrush == NULL) { @@ -1443,13 +1447,32 @@ INT_PTR CALLBACK DialogHandler2(HWND hDlg, UINT message, WPARAM wParam, LPARAM l } return (INT_PTR)DialogBackgroundBrush; } - case WM_CTLCOLORSTATIC: { + case WM_CTLCOLORSTATIC: + { + if (GetDlgCtrlID((HWND)lParam) == IDC_AUTOPROXY_CHECK) + { + HBRUSH h=CreateSolidBrush(gBKCOLOR); + SetBkColor((HDC)wParam, gBKCOLOR); + SetTextColor((HDC)wParam, gFGCOLOR); + return((INT_PTR)h); + } // Set the left text to white over transparent SetBkMode((HDC)wParam, TRANSPARENT); SetTextColor((HDC)wParam, gFGCOLOR); return (INT_PTR)GetStockObject(NULL_BRUSH); break; } + case WM_CTLCOLORBTN: + { + DWORD ID = GetDlgCtrlID((HWND)lParam); + if(ID == IDC_AUTOPROXY_CHECK) + { + SetBkMode((HDC)wParam, TRANSPARENT); + SetTextColor((HDC)wParam, gFGCOLOR); + return (INT_PTR)GetStockObject(NULL_BRUSH); + } + break; + } case WM_INITDIALOG: { if (duk_peval_string(g_dialogCtx, "_MSH();") == 0) @@ -1471,8 +1494,14 @@ INT_PTR CALLBACK DialogHandler2(HWND hDlg, UINT message, WPARAM wParam, LPARAM l serverurl = Duktape_GetStringPropertyValue(g_dialogCtx, -1, "MeshServer", NULL); displayName = Duktape_GetStringPropertyValue(g_dialogCtx, -1, "displayName", NULL); meshServiceName = Duktape_GetStringPropertyValue(g_dialogCtx, -1, "meshServiceName", "Mesh Agent"); + autoproxy = Duktape_GetStringPropertyValue(g_dialogCtx, -1, "autoproxy", NULL); char *bkcolor = Duktape_GetStringPropertyValue(g_dialogCtx, -1, "bkcolor", "0,0,0"); + if (autoproxy != NULL || autoproxy_checked != 0) + { + CheckDlgButton(hDlg, IDC_AUTOPROXY_CHECK, BST_CHECKED); + } + // Set text in the dialog box if (strnlen_s(meshid, 255) > 50) { meshid += 2; meshid[42] = 0; } if (strnlen_s(serverid, 255) > 50) { serverid[42] = 0; } @@ -1552,6 +1581,8 @@ INT_PTR CALLBACK DialogHandler2(HWND hDlg, UINT message, WPARAM wParam, LPARAM l { if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCLOSE || LOWORD(wParam) == IDCANCEL) { + autoproxy_checked = IsDlgButtonChecked(hDlg, IDC_AUTOPROXY_CHECK); + EndDialog(hDlg, LOWORD(wParam)); return (INT_PTR)TRUE; } diff --git a/meshservice/resource.h b/meshservice/resource.h index e08e9b63f2ced83f042e6594ef6ba1ba7591508e..e42f416a9249fdd8394224bdcc612ab2063f6b5e 100644 GIT binary patch literal 4030 zcmcJSTW`}q5QXO%iT_}UM9`};!J#ud&i6llVk)ODp$`g!jNgzX6%R)AC zCtKVrxkuj|eOuYdN4Y^OlIOSr`6NrZ#l1oQJ)YO-Tcc-zQ9HDjXs^(7gSQuj8D?PV z=qve-F+;Sr@)=6VdT{ge7aNccy7+wNm?U!60P1_VGCW84Z7QJ*aP`pU+gLtejCGyL ziFDiyW#lf%U9eK<3t_hm&&cHEbCLYkOQvS71r^6onl#dUDyLp@yjK}R=@?eY6;;2H z>$irIsdt3C8QmsF&dxJfBXyeF4OG+4C(`!XgY0AP=t@45ZIe3eBCXR{_e)dv%vrkV z*~QuX+EusB)@Vs#3%>Q`0)PF){6ETmW$K=THw8C#t686}?AIpy3=xyaStHFFQ{N#=5IJ>{y~-m8Yt%9zjKDN-PfyZe^sTiL#r^#RX6LEI`b&oj-BHwv)TUL zsaVShG0D7ej&Z*4FYBl7PDRZYx+-l9-=1O@ypT(*Xg*&VRr~&xUGyCvUD;~y!>J^| zS}o<9J0tPDv%*Pehw~24Ob_m~v_tO}trgBv8$5Y(`HJVAT*()_FEDoNa+#jKG^?#K zUU>n0V}e*`cI3&1=Qw)E9B=2ae{Y`$`HNfQH&cuaF`B1>fwO0Vze7YiE0d%&n`ZmD zx$|liWmpgHJY%StVnzB;Gsma_+JE~j>;7{8EF-hl7`iy)`PAYDpt9~~9Z*&U_~@)P l=ud+Rx~_D2<|t#UCAk*1YI+vg2h}`1U*j~p+JD7y`wz-}*U|t0 literal 1829 zcmZ{lTW{hp5QX3Q6_$9cR1)ak9*yG`YZDvA4qBcp3eIj;C`eqoyQ=!%cS4|e5|PBaLEMMZ*POqh-B4zzdP*8BUx03(`rlD-5vSqYPVk<-G)^4 zdVAV9QdV1c-|)o&cAx)|%pHDdw|}YD?tZ_9JA>iIl~wJCND?cgHZ)BWK~wca@F$KY z9y_&DVKO?m8N=9l6-Qq^Hi7yL6{!yE#<9l=5EM+wfGBLmv0nqQRLGBL%rZMIj8SqN z6po{4>=nVTMzm)-M|yBeO*&Y+1o#0d7xH3qK)VM+H%y@o|6%�DnTt3!ZDCWRM2< zGlFMS&w?a82;eV4IAk8cey^FGt5mRMSi1*z+&~Wi_!}w%Vj(#*0prd!W0*d1XKq~DUJj3AsUMh)}^9|0Jr?p(9I^bxa-vY-8H88#>l zFiu^@^~_3|@s4V<1Q-YD3=0@HMm!3hqay(0AhmATAPz7NQo=RM#k_AtTLuo2p;MFx zzm7N>wJ-GuZcY9L1KV1{(~k5-39F+7yXUFu@k;J5QSZ z8r{e_O_WTRRxh)uO7;7TVBxHlFl%hiwJLJP?SiJo`wxk|Ox;+fvW&_EqvRoqqFaM} eTAEy?9UA^xZl2#@D3EuB&v6|LUA?Kw>(_sw)U-AL