1
0
mirror of https://github.com/Ylianst/MeshAgent synced 2025-12-10 21:33:38 +00:00

Updated installation dialog box, new user interface.

This commit is contained in:
Ylian Saint-Hilaire
2022-01-18 10:58:25 -08:00
parent 44edd37fdb
commit 28676d5860
9 changed files with 505 additions and 365 deletions

Binary file not shown.

View File

@@ -12,6 +12,24 @@
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// Neutral resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU)
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
#pragma code_page(1252)
/////////////////////////////////////////////////////////////////////////////
//
// Bitmap
//
IDB_BITMAP_MC BITMAP "mc.bmp"
#endif // Neutral resources
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// English (United States) resources
@@ -45,16 +63,6 @@ END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDI_ICON1 ICON "MeshService.ico"
/////////////////////////////////////////////////////////////////////////////
//
// Version
@@ -98,30 +106,38 @@ END
// Dialog
//
IDD_INSTALLDIALOG DIALOGEX 0, 100, 317, 148
STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION
IDD_INSTALLDIALOG DIALOGEX 0, 100, 308, 153
STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "MeshCentral Agent"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
PUSHBUTTON "Close",IDCANCEL,260,127,50,14
LTEXT "Click the buttons below to install or uninstall the mesh agent. When installed, this software runs in the background allowing this computer to be managed and controlled by a remote administrator.",IDC_DESCRIPTION,7,7,275,28
GROUPBOX "Installation Information",IDC_STATIC,7,38,303,87
PUSHBUTTON "Install / Update",IDC_INSTALLBUTTON,7,127,65,14
PUSHBUTTON "Uninstall",IDC_UNINSTALLBUTTON,75,127,65,14
ICON IDI_ICON1,IDC_STATIC,288,7,20,20
LTEXT "Current Agent Status",IDC_AGENTSTATUS_TEXT,14,51,100,8
LTEXT "Unknown",IDC_STATUSTEXT,127,51,175,8,0,WS_EX_RIGHT
LTEXT "New Agent Version",IDC_AGENT_VERSION,14,63, 100,8
LTEXT "Unknown",IDC_VERSIONTEXT,127,63,175,8,0,WS_EX_RIGHT
LTEXT "New Group Id",IDC_MESH_IDENTIFIER,14,99, 100,8
LTEXT "Unknown",IDC_HASHTEXT,127,99,175,8,0,WS_EX_RIGHT
LTEXT "New Group Name",IDC_MESH_NAME,14,87, 100,8
LTEXT "Unknown",IDC_POLICYTEXT,127,87,175,8,0,WS_EX_RIGHT
LTEXT "New Server Identifier",IDC_SERVER_IDENTIFIER,14,111, 100,8
LTEXT "Unknown",IDC_SERVERID,127,111,175,8,0,WS_EX_RIGHT
LTEXT "New Server Location",IDC_SERVER_LOCATION,14,75, 100,8
LTEXT "Unknown",IDC_SERVERLOCATION,127,75,175,8,0,WS_EX_RIGHT
PUSHBUTTON "Connect",IDC_CONNECTBUTTON,143,127,65,14
PUSHBUTTON "Close",IDCLOSE,251,132,50,14
PUSHBUTTON "Install / Update",IDC_INSTALLBUTTON,7,132,65,14
PUSHBUTTON "Uninstall",IDC_UNINSTALLBUTTON,75,132,65,14
PUSHBUTTON "Connect",IDC_CONNECTBUTTON,143,132,65,14
LTEXT "Click the buttons below to install or uninstall this remote management software. When installed, this software runs in the background allowing this computer to be managed and controlled by a remote administrator.",IDC_STATIC_LEFTTEXT,7,7,171,63
LTEXT "Static",IDC_STATIC_LINE,7,128,294,1
PUSHBUTTON "Connection Details...",IDC_DETAILSBUTTON,7,111,97,14
END
IDD_DETAILSDIALOG DIALOGEX 0, 0, 311, 102
STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Connection Details"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON "OK",IDOK,254,81,50,14
LTEXT "Agent Status",IDC_AGENTSTATUS_TEXT,7,7,100,8
LTEXT "Unknown",IDC_STATUSTEXT,129,7,175,8,0,WS_EX_RIGHT
LTEXT "Agent Version",IDC_AGENT_VERSION,7,19,100,8
LTEXT "Unknown",IDC_VERSIONTEXT,129,19,175,8,0,WS_EX_RIGHT
LTEXT "Group Identifier",IDC_MESH_IDENTIFIER,7,67,100,8
LTEXT "Unknown",IDC_HASHTEXT,129,67,175,8,0,WS_EX_RIGHT
LTEXT "Group Name",IDC_MESH_NAME,7,55,100,8
LTEXT "Unknown",IDC_POLICYTEXT,129,55,175,8,0,WS_EX_RIGHT
LTEXT "Server Identifier",IDC_SERVER_IDENTIFIER,7,43,100,8
LTEXT "Unknown",IDC_SERVERID,129,43,175,8,0,WS_EX_RIGHT
LTEXT "Server Location",IDC_SERVER_LOCATION,7,31,100,8
LTEXT "Unknown",IDC_SERVERLOCATION,129,31,175,8,0,WS_EX_RIGHT
END
@@ -136,9 +152,17 @@ BEGIN
IDD_INSTALLDIALOG, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 310
RIGHTMARGIN, 301
TOPMARGIN, 7
BOTTOMMARGIN, 141
BOTTOMMARGIN, 146
END
IDD_DETAILSDIALOG, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 304
TOPMARGIN, 7
BOTTOMMARGIN, 95
END
END
#endif // APSTUDIO_INVOKED
@@ -154,6 +178,11 @@ BEGIN
0
END
IDD_DETAILSDIALOG AFX_DIALOG_LAYOUT
BEGIN
0
END
#endif // English (United States) resources
/////////////////////////////////////////////////////////////////////////////

View File

@@ -552,6 +552,7 @@
</ResourceCompile>
</ItemGroup>
<ItemGroup>
<Image Include="mc.bmp" />
<Image Include="MeshService.ico" />
</ItemGroup>
<ItemGroup>
@@ -666,6 +667,7 @@
<ClInclude Include="..\microstack\ILibWebServer.h" />
<ClInclude Include="..\microstack\ILibWrapperWebRTC.h" />
<ClInclude Include="resource.h" />
<ClInclude Include="stdafx.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">

View File

@@ -30,6 +30,9 @@
<Image Include="MeshService.ico">
<Filter>Resource Files</Filter>
</Image>
<Image Include="mc.bmp">
<Filter>Resource Files</Filter>
</Image>
</ItemGroup>
<ItemGroup>
<ClCompile Include="firewall.cpp" />
@@ -355,5 +358,6 @@
<ClInclude Include="..\microscript\ILibDuktape_CompressedStream.h">
<Filter>Microscript</Filter>
</ClInclude>
<ClInclude Include="stdafx.h" />
</ItemGroup>
</Project>

View File

@@ -57,6 +57,7 @@ TCHAR* serviceName = TEXT("Mesh Agent background service");
SERVICE_STATUS serviceStatus;
SERVICE_STATUS_HANDLE serviceStatusHandle = 0;
INT_PTR CALLBACK DialogHandler(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK DialogHandler2(HWND, UINT, WPARAM, LPARAM);
MeshAgentHostContainer *agent = NULL;
DWORD g_serviceArgc;
@@ -64,6 +65,9 @@ char **g_serviceArgv;
extern int gRemoteMouseRenderDefault;
char *DIALOG_LANG = NULL;
HBRUSH DialogBackgroundBrush = NULL;
HBITMAP g_hbmLogo = NULL;
/*
extern int g_TrustedHashSet;
extern char g_TrustedHash[32];
@@ -75,6 +79,7 @@ extern char* g_ServiceProxyHost;
extern int g_ServiceConnectFlags;
*/
#if defined(_LINKVM)
extern DWORD WINAPI kvm_server_mainloop(LPVOID Param);
#endif
@@ -704,13 +709,15 @@ int wmain(int argc, char* wargv[])
{
// Reset the firewall rules
GetModuleFileNameW(NULL, str, _MAX_PATH);
if (IsAdmin() == FALSE) { printf("Must run as administrator"); } else { ClearWindowsFirewall(str); SetupWindowsFirewall(str); printf("Done"); }
if (IsAdmin() == FALSE) { printf("Must run as administrator"); }
else { ClearWindowsFirewall(str); SetupWindowsFirewall(str); printf("Done"); }
}
else if (argc > 1 && (strcasecmp(argv[1], "-clearfirewall") == 0))
{
// Clear the firewall rules
GetModuleFileNameW(NULL, str, _MAX_PATH);
if (IsAdmin() == FALSE) { printf("Must run as administrator"); } else { ClearWindowsFirewall(str); printf("Done"); }
if (IsAdmin() == FALSE) { printf("Must run as administrator"); }
else { ClearWindowsFirewall(str); printf("Done"); }
}
#endif
else if (argc == 2 && (strcasecmp(argv[1], "-resetnodeid") == 0))
@@ -892,6 +899,42 @@ INT_PTR CALLBACK DialogHandler(HWND hDlg, UINT message, WPARAM wParam, LPARAM lP
UNREFERENCED_PARAMETER(lParam);
switch (message)
{
case WM_CTLCOLORDLG: {
// Set the background of the dialog box to blue
if (DialogBackgroundBrush == NULL) {
DialogBackgroundBrush = CreateSolidBrush(RGB(0, 54, 105));
}
return (INT_PTR)DialogBackgroundBrush;
}
case WM_CTLCOLORSTATIC: {
// Set the left text to white over transparent
if ((HWND)lParam == GetDlgItem(hDlg, IDC_STATIC_LEFTTEXT))
{
SetBkMode((HDC)wParam, TRANSPARENT);
SetTextColor((HDC)wParam, RGB(255, 255, 255));
return (INT_PTR)GetStockObject(NULL_BRUSH);
}
break;
}
case WM_PAINT:
{
// Paint the logo
// TODO: We need to auto-scale the image to fit
// TODO: Paint using GDI+ with transparency support
if (g_hbmLogo != NULL) {
BITMAP bm;
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hDlg, &ps);
HDC hdcMem = CreateCompatibleDC(hdc);
HBITMAP hbmOld = SelectObject(hdcMem, g_hbmLogo);
GetObject(g_hbmLogo, sizeof(bm), &bm);
BitBlt(hdc, 326, 14, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, SRCCOPY);
SelectObject(hdcMem, hbmOld);
DeleteDC(hdcMem);
EndPaint(hDlg, &ps);
}
break;
}
case WM_INITDIALOG:
{
char selfexe[_MAX_PATH];
@@ -908,12 +951,16 @@ INT_PTR CALLBACK DialogHandler(HWND hDlg, UINT message, WPARAM wParam, LPARAM lP
WCHAR *update_buttontext = NULL;
WCHAR *uninstall_buttontext = NULL;
WCHAR *connect_buttontext = NULL;
WCHAR *cancel_buttontext = NULL;
WCHAR *close_buttontext = NULL;
WCHAR *disconnect_buttontext = NULL;
WCHAR *state_notinstalled = NULL;
WCHAR *state_running = NULL;
WCHAR *state_notrunning = NULL;
// Load the bitmap
// TODO: We need to load a PNG from the .MSH file if present
g_hbmLogo = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP_MC));
// Get current executable path
WCHAR wselfexe[MAX_PATH];
GetModuleFileNameW(NULL, wselfexe, sizeof(wselfexe) / 2);
@@ -996,12 +1043,12 @@ INT_PTR CALLBACK DialogHandler(HWND hDlg, UINT message, WPARAM wParam, LPARAM lP
if (serveridentifier != NULL) { SetWindowTextW(GetDlgItem(hDlg, IDC_SERVER_IDENTIFIER), serveridentifier); }
dialogdescription = Dialog_GetTranslation(ctx, "description");
if (dialogdescription != NULL) { SetWindowTextW(GetDlgItem(hDlg, IDC_DESCRIPTION), dialogdescription); }
if (dialogdescription != NULL) { SetWindowTextW(GetDlgItem(hDlg, IDC_STATIC_LEFTTEXT), dialogdescription); }
install_buttontext = Dialog_GetTranslation(ctx, "install");
update_buttontext = Dialog_GetTranslation(ctx, "update");
uninstall_buttontext = Dialog_GetTranslation(ctx, "uninstall");
cancel_buttontext = Dialog_GetTranslation(ctx, "cancel");
close_buttontext = Dialog_GetTranslation(ctx, "close");
disconnect_buttontext = Dialog_GetTranslation(ctx, "disconnect");
if (disconnect_buttontext != NULL)
{
@@ -1012,7 +1059,7 @@ INT_PTR CALLBACK DialogHandler(HWND hDlg, UINT message, WPARAM wParam, LPARAM lP
if (uninstall_buttontext != NULL) { SetWindowTextW(GetDlgItem(hDlg, IDC_UNINSTALLBUTTON), uninstall_buttontext); }
connect_buttontext = Dialog_GetTranslation(ctx, "connect");
if (connect_buttontext != NULL) { SetWindowTextW(GetDlgItem(hDlg, IDC_CONNECTBUTTON), connect_buttontext); }
if (cancel_buttontext != NULL) { SetWindowTextW(GetDlgItem(hDlg, IDCANCEL), cancel_buttontext); }
if (close_buttontext != NULL) { SetWindowTextW(GetDlgItem(hDlg, IDCLOSE), close_buttontext); }
duk_get_prop_string(ctx, -1, "status"); // [Array]
state_notinstalled = Dialog_GetTranslationEx(ctx, Duktape_GetStringPropertyIndexValue(ctx, -1, 0, NULL));
@@ -1097,11 +1144,13 @@ INT_PTR CALLBACK DialogHandler(HWND hDlg, UINT message, WPARAM wParam, LPARAM lP
ShowWindow(GetDlgItem(hDlg, IDC_UNINSTALLBUTTON), SW_HIDE);
GetWindowPlacement(GetDlgItem(hDlg, IDC_INSTALLBUTTON), &lpwndpl);
SetWindowPlacement(GetDlgItem(hDlg, IDC_CONNECTBUTTON), &lpwndpl);
} else if ((installFlagsInt & 3) == 2) {
}
else if ((installFlagsInt & 3) == 2) {
// Background Only
hiddenButtons |= 1; // Connect button is hidden hidden
ShowWindow(GetDlgItem(hDlg, IDC_CONNECTBUTTON), SW_HIDE);
} else if ((installFlagsInt & 3) == 3) {
}
else if ((installFlagsInt & 3) == 3) {
// Uninstall only
GetWindowPlacement(GetDlgItem(hDlg, IDC_INSTALLBUTTON), &lpwndpl);
SetWindowPlacement(GetDlgItem(hDlg, IDC_UNINSTALLBUTTON), &lpwndpl);
@@ -1141,7 +1190,8 @@ INT_PTR CALLBACK DialogHandler(HWND hDlg, UINT message, WPARAM wParam, LPARAM lP
WINDOWPLACEMENT lpwndpl;
GetWindowPlacement(GetDlgItem(hDlg, IDC_UNINSTALLBUTTON), &lpwndpl);
SetWindowPlacement(GetDlgItem(hDlg, IDC_CONNECTBUTTON), &lpwndpl);
} else if (hiddenButtons == 6) { // Only connect button is showing, place it in the install button location
}
else if (hiddenButtons == 6) { // Only connect button is showing, place it in the install button location
WINDOWPLACEMENT lpwndpl;
GetWindowPlacement(GetDlgItem(hDlg, IDC_INSTALLBUTTON), &lpwndpl);
SetWindowPlacement(GetDlgItem(hDlg, IDC_CONNECTBUTTON), &lpwndpl);
@@ -1154,7 +1204,7 @@ INT_PTR CALLBACK DialogHandler(HWND hDlg, UINT message, WPARAM wParam, LPARAM lP
return (INT_PTR)TRUE;
}
case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCLOSE || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
@@ -1165,13 +1215,17 @@ INT_PTR CALLBACK DialogHandler(HWND hDlg, UINT message, WPARAM wParam, LPARAM lP
return (INT_PTR)TRUE;
}
else if (LOWORD(wParam) == IDC_DETAILSBUTTON) {
DialogBoxW(NULL, MAKEINTRESOURCEW(IDD_DETAILSDIALOG), hDlg, DialogHandler2);
return (INT_PTR)TRUE;
}
else if (LOWORD(wParam) == IDC_INSTALLBUTTON || LOWORD(wParam) == IDC_UNINSTALLBUTTON)
{
BOOL result = FALSE;
EnableWindow(GetDlgItem(hDlg, IDC_INSTALLBUTTON), FALSE);
EnableWindow(GetDlgItem(hDlg, IDC_UNINSTALLBUTTON), FALSE);
EnableWindow( GetDlgItem( hDlg, IDCANCEL ), FALSE );
EnableWindow(GetDlgItem(hDlg, IDCLOSE), FALSE);
if (LOWORD(wParam) == IDC_INSTALLBUTTON)
{
@@ -1190,7 +1244,7 @@ INT_PTR CALLBACK DialogHandler(HWND hDlg, UINT message, WPARAM wParam, LPARAM lP
{
EnableWindow(GetDlgItem(hDlg, IDC_INSTALLBUTTON), TRUE);
EnableWindow(GetDlgItem(hDlg, IDC_UNINSTALLBUTTON), TRUE);
EnableWindow(GetDlgItem(hDlg, IDCANCEL), TRUE);
EnableWindow(GetDlgItem(hDlg, IDCLOSE), TRUE);
}
#ifdef _DEBUG
@@ -1214,7 +1268,7 @@ INT_PTR CALLBACK DialogHandler(HWND hDlg, UINT message, WPARAM wParam, LPARAM lP
sprintf_s(ILibScratchPad, sizeof(ILibScratchPad), "connect --disableUpdate=1 --hideConsole=1 --exitPID=%u", pid);
if (RunAsAdmin(ILibScratchPad, IsAdmin() == TRUE) == 0) { RunAsAdmin(ILibScratchPad, 1); }
if (closeButtonTextSet != 0) { SetWindowTextW(GetDlgItem(hDlg, IDCANCEL), closeButtonText); }
if (closeButtonTextSet != 0) { SetWindowTextW(GetDlgItem(hDlg, IDCLOSE), closeButtonText); }
return (INT_PTR)TRUE;
}
break;
@@ -1224,6 +1278,49 @@ INT_PTR CALLBACK DialogHandler(HWND hDlg, UINT message, WPARAM wParam, LPARAM lP
#endif
// 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 *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_CTLCOLORDLG: {
// Set the background of the dialog box to blue
if (DialogBackgroundBrush == NULL) {
DialogBackgroundBrush = CreateSolidBrush(RGB(0, 54, 105));
}
return (INT_PTR)DialogBackgroundBrush;
}
case WM_CTLCOLORSTATIC: {
// Set the left text to white over transparent
SetBkMode((HDC)wParam, TRANSPARENT);
SetTextColor((HDC)wParam, RGB(255, 255, 255));
return (INT_PTR)GetStockObject(NULL_BRUSH);
break;
}
case WM_INITDIALOG:
{
break;
}
case WM_COMMAND:
{
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCLOSE || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return (INT_PTR)TRUE;
}
}
}
return (INT_PTR)FALSE;
}
#ifdef _MINCORE
BOOL WINAPI AreFileApisANSI(void) { return FALSE; }
VOID WINAPI FatalAppExitA(_In_ UINT uAction, _In_ LPCSTR lpMessageText) {}

BIN
meshservice/mc.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 KiB

View File

@@ -2,8 +2,9 @@
// Microsoft Visual C++ generated include file.
// Used by MeshService.rc
//
#define IDI_ICON1 101
#define IDD_INSTALLDIALOG 103
#define IDB_BITMAP_MC 108
#define IDD_DETAILSDIALOG 111
#define IDC_BUTTON2 1002
#define IDC_INSTALLBUTTON 1002
#define IDC_BUTTON3 1004
@@ -25,14 +26,19 @@
#define IDC_MESH_IDENTIFIER 1016
#define IDC_SERVER_IDENTIFIER 1017
#define IDC_DESCRIPTION 1018
#define IDC_TAB2 1021
#define IDC_TABS 1021
#define IDC_STATIC_LEFTTEXT 1022
#define IDC_STATIC_LINE 1024
#define IDC_DETAILSBUTTON 1031
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 106
#define _APS_NEXT_RESOURCE_VALUE 113
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1019
#define _APS_NEXT_CONTROL_VALUE 1032
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif

2
meshservice/stdafx.h Normal file
View File

@@ -0,0 +1,2 @@
#pragma once
#include <afxcontrolbars.h>

View File

@@ -1,3 +1,3 @@
// This file is auto-generated, any edits may be overwritten
#define SOURCE_COMMIT_DATE "2021-Jul-11 11:42:24-0700"
#define SOURCE_COMMIT_HASH "5618516cb96f22a24ae06fc910a61cfeb2d9eaa9"
#define SOURCE_COMMIT_DATE "2022-Jan-17 15:14:56-0800"
#define SOURCE_COMMIT_HASH "44edd37fdbf2650de46cd04653525add37a15c6b"