mirror of
https://github.com/Ylianst/MeshAgent
synced 2025-12-06 00:13:33 +00:00
Updated installation dialog box, new user interface.
This commit is contained in:
Binary file not shown.
@@ -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
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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>
|
||||
@@ -15,11 +15,11 @@ limitations under the License.
|
||||
*/
|
||||
|
||||
#if defined(WINSOCK2)
|
||||
#include <winsock2.h>
|
||||
#include <ws2tcpip.h>
|
||||
#include <winsock2.h>
|
||||
#include <ws2tcpip.h>
|
||||
#elif defined(WINSOCK1)
|
||||
#include <winsock.h>
|
||||
#include <wininet.h>
|
||||
#include <winsock.h>
|
||||
#include <wininet.h>
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
@@ -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
|
||||
@@ -82,12 +87,12 @@ extern DWORD WINAPI kvm_server_mainloop(LPVOID Param);
|
||||
BOOL IsAdmin()
|
||||
{
|
||||
BOOL admin;
|
||||
PSID AdministratorsGroup;
|
||||
PSID AdministratorsGroup;
|
||||
SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY;
|
||||
|
||||
if ((admin = AllocateAndInitializeSid( &NtAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &AdministratorsGroup)) != 0)
|
||||
if ((admin = AllocateAndInitializeSid(&NtAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &AdministratorsGroup)) != 0)
|
||||
{
|
||||
if (!CheckTokenMembership( NULL, AdministratorsGroup, &admin)) admin = FALSE;
|
||||
if (!CheckTokenMembership(NULL, AdministratorsGroup, &admin)) admin = FALSE;
|
||||
FreeSid(AdministratorsGroup);
|
||||
}
|
||||
return admin;
|
||||
@@ -96,12 +101,12 @@ BOOL IsAdmin()
|
||||
BOOL RunAsAdmin(char* args, int isAdmin)
|
||||
{
|
||||
WCHAR szPath[_MAX_PATH + 100];
|
||||
if (GetModuleFileNameW(NULL, szPath, sizeof(szPath)/2))
|
||||
if (GetModuleFileNameW(NULL, szPath, sizeof(szPath) / 2))
|
||||
{
|
||||
SHELLEXECUTEINFOW sei = { sizeof(sei) };
|
||||
sei.hwnd = NULL;
|
||||
sei.nShow = SW_NORMAL;
|
||||
sei.lpVerb = isAdmin?L"open":L"runas";
|
||||
sei.lpVerb = isAdmin ? L"open" : L"runas";
|
||||
sei.lpFile = szPath;
|
||||
sei.lpParameters = ILibUTF8ToWide(args, -1);
|
||||
return ShellExecuteExW(&sei);
|
||||
@@ -109,68 +114,68 @@ BOOL RunAsAdmin(char* args, int isAdmin)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
DWORD WINAPI ServiceControlHandler( DWORD controlCode, DWORD eventType, void *eventData, void* eventContext )
|
||||
DWORD WINAPI ServiceControlHandler(DWORD controlCode, DWORD eventType, void *eventData, void* eventContext)
|
||||
{
|
||||
switch (controlCode)
|
||||
{
|
||||
case SERVICE_CONTROL_INTERROGATE:
|
||||
case SERVICE_CONTROL_INTERROGATE:
|
||||
break;
|
||||
case SERVICE_CONTROL_SHUTDOWN:
|
||||
case SERVICE_CONTROL_STOP:
|
||||
serviceStatus.dwCurrentState = SERVICE_STOP_PENDING;
|
||||
SetServiceStatus(serviceStatusHandle, &serviceStatus);
|
||||
if (agent != NULL) { MeshAgent_Stop(agent); }
|
||||
return(0);
|
||||
case SERVICE_CONTROL_POWEREVENT:
|
||||
switch (eventType)
|
||||
{
|
||||
case PBT_APMPOWERSTATUSCHANGE: // Power status has changed.
|
||||
break;
|
||||
case SERVICE_CONTROL_SHUTDOWN:
|
||||
case SERVICE_CONTROL_STOP:
|
||||
serviceStatus.dwCurrentState = SERVICE_STOP_PENDING;
|
||||
SetServiceStatus( serviceStatusHandle, &serviceStatus );
|
||||
if (agent != NULL) { MeshAgent_Stop(agent); }
|
||||
return(0);
|
||||
case SERVICE_CONTROL_POWEREVENT:
|
||||
switch (eventType)
|
||||
{
|
||||
case PBT_APMPOWERSTATUSCHANGE: // Power status has changed.
|
||||
break;
|
||||
case PBT_APMRESUMEAUTOMATIC: // Operation is resuming automatically from a low - power state.This message is sent every time the system resumes.
|
||||
break;
|
||||
case PBT_APMRESUMESUSPEND: // Operation is resuming from a low - power state.This message is sent after PBT_APMRESUMEAUTOMATIC if the resume is triggered by user input, such as pressing a key.
|
||||
break;
|
||||
case PBT_APMSUSPEND: // System is suspending operation.
|
||||
break;
|
||||
case PBT_POWERSETTINGCHANGE: // Power setting change event has been received.
|
||||
break;
|
||||
}
|
||||
case PBT_APMRESUMEAUTOMATIC: // Operation is resuming automatically from a low - power state.This message is sent every time the system resumes.
|
||||
break;
|
||||
case SERVICE_CONTROL_SESSIONCHANGE:
|
||||
if (agent == NULL)
|
||||
{
|
||||
break; // If there isn't an agent, no point in doing anything, cuz nobody will hear us
|
||||
}
|
||||
case PBT_APMRESUMESUSPEND: // Operation is resuming from a low - power state.This message is sent after PBT_APMRESUMEAUTOMATIC if the resume is triggered by user input, such as pressing a key.
|
||||
break;
|
||||
case PBT_APMSUSPEND: // System is suspending operation.
|
||||
break;
|
||||
case PBT_POWERSETTINGCHANGE: // Power setting change event has been received.
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case SERVICE_CONTROL_SESSIONCHANGE:
|
||||
if (agent == NULL)
|
||||
{
|
||||
break; // If there isn't an agent, no point in doing anything, cuz nobody will hear us
|
||||
}
|
||||
|
||||
switch (eventType)
|
||||
{
|
||||
case WTS_CONSOLE_CONNECT: // The session identified by lParam was connected to the console terminal or RemoteFX session.
|
||||
break;
|
||||
case WTS_CONSOLE_DISCONNECT: // The session identified by lParam was disconnected from the console terminal or RemoteFX session.
|
||||
break;
|
||||
case WTS_REMOTE_CONNECT: // The session identified by lParam was connected to the remote terminal.
|
||||
break;
|
||||
case WTS_REMOTE_DISCONNECT: // The session identified by lParam was disconnected from the remote terminal.
|
||||
break;
|
||||
case WTS_SESSION_LOGON: // A user has logged on to the session identified by lParam.
|
||||
case WTS_SESSION_LOGOFF: // A user has logged off the session identified by lParam.
|
||||
break;
|
||||
case WTS_SESSION_LOCK: // The session identified by lParam has been locked.
|
||||
break;
|
||||
case WTS_SESSION_UNLOCK: // The session identified by lParam has been unlocked.
|
||||
break;
|
||||
case WTS_SESSION_REMOTE_CONTROL:// The session identified by lParam has changed its remote controlled status.To determine the status, call GetSystemMetrics and check the SM_REMOTECONTROL metric.
|
||||
break;
|
||||
case WTS_SESSION_CREATE: // Reserved for future use.
|
||||
case WTS_SESSION_TERMINATE: // Reserved for future use.
|
||||
break;
|
||||
}
|
||||
switch (eventType)
|
||||
{
|
||||
case WTS_CONSOLE_CONNECT: // The session identified by lParam was connected to the console terminal or RemoteFX session.
|
||||
break;
|
||||
default:
|
||||
case WTS_CONSOLE_DISCONNECT: // The session identified by lParam was disconnected from the console terminal or RemoteFX session.
|
||||
break;
|
||||
case WTS_REMOTE_CONNECT: // The session identified by lParam was connected to the remote terminal.
|
||||
break;
|
||||
case WTS_REMOTE_DISCONNECT: // The session identified by lParam was disconnected from the remote terminal.
|
||||
break;
|
||||
case WTS_SESSION_LOGON: // A user has logged on to the session identified by lParam.
|
||||
case WTS_SESSION_LOGOFF: // A user has logged off the session identified by lParam.
|
||||
break;
|
||||
case WTS_SESSION_LOCK: // The session identified by lParam has been locked.
|
||||
break;
|
||||
case WTS_SESSION_UNLOCK: // The session identified by lParam has been unlocked.
|
||||
break;
|
||||
case WTS_SESSION_REMOTE_CONTROL:// The session identified by lParam has changed its remote controlled status.To determine the status, call GetSystemMetrics and check the SM_REMOTECONTROL metric.
|
||||
break;
|
||||
case WTS_SESSION_CREATE: // Reserved for future use.
|
||||
case WTS_SESSION_TERMINATE: // Reserved for future use.
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
SetServiceStatus( serviceStatusHandle, &serviceStatus );
|
||||
SetServiceStatus(serviceStatusHandle, &serviceStatus);
|
||||
return(0);
|
||||
}
|
||||
|
||||
@@ -182,8 +187,8 @@ void WINAPI ServiceMain(DWORD argc, LPTSTR *argv)
|
||||
WCHAR str[_MAX_PATH];
|
||||
|
||||
|
||||
UNREFERENCED_PARAMETER( argc );
|
||||
UNREFERENCED_PARAMETER( argv );
|
||||
UNREFERENCED_PARAMETER(argc);
|
||||
UNREFERENCED_PARAMETER(argv);
|
||||
|
||||
// Initialise service status
|
||||
serviceStatus.dwServiceType = SERVICE_WIN32;
|
||||
@@ -204,7 +209,7 @@ void WINAPI ServiceMain(DWORD argc, LPTSTR *argv)
|
||||
// Service running
|
||||
serviceStatus.dwControlsAccepted |= (SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN | SERVICE_ACCEPT_POWEREVENT | SERVICE_ACCEPT_SESSIONCHANGE);
|
||||
serviceStatus.dwCurrentState = SERVICE_RUNNING;
|
||||
SetServiceStatus( serviceStatusHandle, &serviceStatus);
|
||||
SetServiceStatus(serviceStatusHandle, &serviceStatus);
|
||||
|
||||
// Get our own executable name
|
||||
GetModuleFileNameW(NULL, str, _MAX_PATH);
|
||||
@@ -251,7 +256,7 @@ int RunService(int argc, char* argv[])
|
||||
g_serviceArgc = argc;
|
||||
g_serviceArgv = argv;
|
||||
|
||||
return StartServiceCtrlDispatcher( serviceTable );
|
||||
return StartServiceCtrlDispatcher(serviceTable);
|
||||
}
|
||||
|
||||
// SERVICE_STOPPED 1 The service is not running.
|
||||
@@ -269,21 +274,21 @@ int GetServiceState(LPCSTR servicename)
|
||||
|
||||
if (serviceControlManager)
|
||||
{
|
||||
SC_HANDLE service = OpenService( serviceControlManager, servicename, SERVICE_QUERY_STATUS );
|
||||
SC_HANDLE service = OpenService(serviceControlManager, servicename, SERVICE_QUERY_STATUS);
|
||||
if (service)
|
||||
{
|
||||
SERVICE_STATUS serviceStatusEx;
|
||||
if ( QueryServiceStatus( service, &serviceStatusEx) )
|
||||
if (QueryServiceStatus(service, &serviceStatusEx))
|
||||
{
|
||||
r = serviceStatusEx.dwCurrentState;
|
||||
}
|
||||
CloseServiceHandle( service );
|
||||
CloseServiceHandle(service);
|
||||
}
|
||||
else
|
||||
{
|
||||
r = 100;
|
||||
}
|
||||
CloseServiceHandle( serviceControlManager );
|
||||
CloseServiceHandle(serviceControlManager);
|
||||
}
|
||||
return r;
|
||||
}
|
||||
@@ -291,9 +296,9 @@ int GetServiceState(LPCSTR servicename)
|
||||
|
||||
/*
|
||||
int APIENTRY _tWinMain(HINSTANCE hInstance,
|
||||
HINSTANCE hPrevInstance,
|
||||
LPTSTR lpCmdLine,
|
||||
int nCmdShow)
|
||||
HINSTANCE hPrevInstance,
|
||||
LPTSTR lpCmdLine,
|
||||
int nCmdShow)
|
||||
{
|
||||
UNREFERENCED_PARAMETER(hPrevInstance);
|
||||
UNREFERENCED_PARAMETER(lpCmdLine);
|
||||
@@ -335,7 +340,7 @@ int wmain(int argc, char* wargv[])
|
||||
int retCode = 0;
|
||||
|
||||
int argvi, argvsz;
|
||||
char **argv = (char**)ILibMemory_SmartAllocate((argc+1) * sizeof(void*));
|
||||
char **argv = (char**)ILibMemory_SmartAllocate((argc + 1) * sizeof(void*));
|
||||
for (argvi = 0; argvi < argc; ++argvi)
|
||||
{
|
||||
argvsz = WideCharToMultiByte(CP_UTF8, 0, (LPCWCH)wargv[argvi], -1, NULL, 0, NULL, NULL);
|
||||
@@ -343,9 +348,9 @@ int wmain(int argc, char* wargv[])
|
||||
WideCharToMultiByte(CP_UTF8, 0, (LPCWCH)wargv[argvi], -1, argv[argvi], argvsz, NULL, NULL);
|
||||
}
|
||||
|
||||
if (argc > 1 && (strcasecmp(argv[1], "-finstall") == 0 || strcasecmp(argv[1], "-funinstall") == 0 ||
|
||||
if (argc > 1 && (strcasecmp(argv[1], "-finstall") == 0 || strcasecmp(argv[1], "-funinstall") == 0 ||
|
||||
strcasecmp(argv[1], "-fulluninstall") == 0 || strcasecmp(argv[1], "-fullinstall") == 0 ||
|
||||
strcasecmp(argv[1], "-install")==0 || strcasecmp(argv[1], "-uninstall") == 0 ||
|
||||
strcasecmp(argv[1], "-install") == 0 || strcasecmp(argv[1], "-uninstall") == 0 ||
|
||||
strcasecmp(argv[1], "-state") == 0))
|
||||
{
|
||||
argv[argc] = argv[1];
|
||||
@@ -547,9 +552,9 @@ int wmain(int argc, char* wargv[])
|
||||
wmain_free(argv);
|
||||
return(0);
|
||||
}
|
||||
#if defined(_LINKVM)
|
||||
#if defined(_LINKVM)
|
||||
if (argc > 1 && strcasecmp(argv[1], "-kvm0") == 0)
|
||||
{
|
||||
{
|
||||
void **parm = (void**)ILibMemory_Allocate(4 * sizeof(void*), 0, 0, NULL);
|
||||
parm[0] = kvm_serviceWriteSink;
|
||||
((int*)&(parm[2]))[0] = 0;
|
||||
@@ -625,7 +630,7 @@ int wmain(int argc, char* wargv[])
|
||||
wmain_free(argv);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
if (integratedJavaScript != NULL || (argc > 0 && strcasecmp(argv[0], "--slave") == 0) || (argc > 1 && ((strcasecmp(argv[1], "run") == 0) || (strcasecmp(argv[1], "connect") == 0) || (strcasecmp(argv[1], "--slave") == 0))))
|
||||
{
|
||||
// Run the mesh agent in console mode, since the agent is compiled for windows service, the KVM will not work right. This is only good for testing.
|
||||
@@ -652,7 +657,7 @@ int wmain(int argc, char* wargv[])
|
||||
return(retCode);
|
||||
}
|
||||
else if (argc > 1 && memcmp(argv[1], "-update:", 8) == 0)
|
||||
{
|
||||
{
|
||||
char *update = ILibMemory_Allocate(1024, 0, NULL, NULL);
|
||||
int updateLen;
|
||||
|
||||
@@ -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))
|
||||
@@ -718,9 +725,9 @@ int wmain(int argc, char* wargv[])
|
||||
// Set "resetnodeid" in registry
|
||||
HKEY hKey;
|
||||
#ifndef _WIN64
|
||||
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Open Source\\MeshAgent2", 0, KEY_WRITE | KEY_WOW64_32KEY, &hKey) == ERROR_SUCCESS )
|
||||
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Open Source\\MeshAgent2", 0, KEY_WRITE | KEY_WOW64_32KEY, &hKey) == ERROR_SUCCESS)
|
||||
#else
|
||||
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Open Source\\MeshAgent2", 0, KEY_WRITE, &hKey) == ERROR_SUCCESS )
|
||||
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Open Source\\MeshAgent2", 0, KEY_WRITE, &hKey) == ERROR_SUCCESS)
|
||||
#endif
|
||||
{
|
||||
i = 1;
|
||||
@@ -774,7 +781,7 @@ int wmain(int argc, char* wargv[])
|
||||
void *dialogchain = ILibCreateChain();
|
||||
ILibChain_PartialStart(dialogchain);
|
||||
duk_context *ctx = ILibDuktape_ScriptContainer_InitializeJavaScriptEngineEx(0, 0, dialogchain, NULL, NULL, selfexe, NULL, NULL, dialogchain);
|
||||
if (duk_peval_string(ctx, "require('util-language').current.toUpperCase().split('-').join('_');") == 0)
|
||||
if (duk_peval_string(ctx, "require('util-language').current.toUpperCase().split('-').join('_');") == 0)
|
||||
{
|
||||
lang = (char*)duk_safe_to_string(ctx, -1);
|
||||
printf("Current Language: %s\n", lang);
|
||||
@@ -814,7 +821,7 @@ int wmain(int argc, char* wargv[])
|
||||
printf(" --WebProxy=\"http://proxyhost:port\" Specify an HTTPS proxy.\r\n");
|
||||
printf(" --agentName=\"alternate name\" Specify an alternate name to be provided by the agent.\r\n");
|
||||
}
|
||||
else if(skip==0)
|
||||
else if (skip == 0)
|
||||
{
|
||||
// This is only supported on Windows 8 / Windows Server 2012 R2 and newer
|
||||
FreeConsole();
|
||||
@@ -892,269 +899,312 @@ INT_PTR CALLBACK DialogHandler(HWND hDlg, UINT message, WPARAM wParam, LPARAM lP
|
||||
UNREFERENCED_PARAMETER(lParam);
|
||||
switch (message)
|
||||
{
|
||||
case WM_INITDIALOG:
|
||||
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))
|
||||
{
|
||||
char selfexe[_MAX_PATH];
|
||||
char *lang = NULL;
|
||||
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];
|
||||
char *lang = NULL;
|
||||
|
||||
WCHAR *agentstatus = NULL;
|
||||
WCHAR *agentversion = NULL;
|
||||
WCHAR *serverlocation = NULL;
|
||||
WCHAR *meshname = NULL;
|
||||
WCHAR *meshidentitifer = NULL;
|
||||
WCHAR *serveridentifier = NULL;
|
||||
WCHAR *dialogdescription = NULL;
|
||||
WCHAR *install_buttontext = NULL;
|
||||
WCHAR *update_buttontext = NULL;
|
||||
WCHAR *uninstall_buttontext = NULL;
|
||||
WCHAR *connect_buttontext = NULL;
|
||||
WCHAR *cancel_buttontext = NULL;
|
||||
WCHAR *disconnect_buttontext = NULL;
|
||||
WCHAR *state_notinstalled = NULL;
|
||||
WCHAR *state_running = NULL;
|
||||
WCHAR *state_notrunning = NULL;
|
||||
WCHAR *agentstatus = NULL;
|
||||
WCHAR *agentversion = NULL;
|
||||
WCHAR *serverlocation = NULL;
|
||||
WCHAR *meshname = NULL;
|
||||
WCHAR *meshidentitifer = NULL;
|
||||
WCHAR *serveridentifier = NULL;
|
||||
WCHAR *dialogdescription = NULL;
|
||||
WCHAR *install_buttontext = NULL;
|
||||
WCHAR *update_buttontext = NULL;
|
||||
WCHAR *uninstall_buttontext = NULL;
|
||||
WCHAR *connect_buttontext = NULL;
|
||||
WCHAR *close_buttontext = NULL;
|
||||
WCHAR *disconnect_buttontext = NULL;
|
||||
WCHAR *state_notinstalled = NULL;
|
||||
WCHAR *state_running = NULL;
|
||||
WCHAR *state_notrunning = NULL;
|
||||
|
||||
// Get current executable path
|
||||
WCHAR wselfexe[MAX_PATH];
|
||||
GetModuleFileNameW(NULL, wselfexe, sizeof(wselfexe) / 2);
|
||||
ILibWideToUTF8Ex(wselfexe, -1, selfexe, (int)sizeof(selfexe));
|
||||
// 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));
|
||||
|
||||
void *dialogchain = ILibCreateChain();
|
||||
ILibChain_PartialStart(dialogchain);
|
||||
duk_context *ctx = ILibDuktape_ScriptContainer_InitializeJavaScriptEngineEx(0, 0, dialogchain, NULL, NULL, selfexe, NULL, NULL, dialogchain);
|
||||
if (duk_peval_string(ctx, "require('util-language').current.toLowerCase().split('_').join('-');") == 0) { lang = (char*)duk_safe_to_string(ctx, -1); }
|
||||
if (duk_peval_string(ctx, "(function foo(){return(JSON.parse(_MSH().translation));})()") != 0 || !duk_has_prop_string(ctx, -1, "en"))
|
||||
{
|
||||
duk_push_object(ctx); // [translation][en]
|
||||
duk_push_string(ctx, "Install"); duk_put_prop_string(ctx, -2, "install");
|
||||
duk_push_string(ctx, "Uninstall"); duk_put_prop_string(ctx, -2, "uninstall");
|
||||
duk_push_string(ctx, "Connect"); duk_put_prop_string(ctx, -2, "connect");
|
||||
duk_push_string(ctx, "Disconnect"); duk_put_prop_string(ctx, -2, "disconnect");
|
||||
duk_push_string(ctx, "Update"); duk_put_prop_string(ctx, -2, "update");
|
||||
duk_push_array(ctx);
|
||||
duk_push_string(ctx, "NOT INSTALLED"); duk_array_push(ctx, -2);
|
||||
duk_push_string(ctx, "RUNNING"); duk_array_push(ctx, -2);
|
||||
duk_push_string(ctx, "NOT RUNNING"); duk_array_push(ctx, -2);
|
||||
duk_put_prop_string(ctx, -2, "status");
|
||||
duk_put_prop_string(ctx, -2, "en"); // [translation]
|
||||
}
|
||||
|
||||
if (DIALOG_LANG != NULL) { lang = DIALOG_LANG; }
|
||||
if (!duk_has_prop_string(ctx, -1, lang))
|
||||
{
|
||||
duk_push_string(ctx, lang); // [obj][string]
|
||||
duk_string_split(ctx, -1, "-"); // [obj][string][array]
|
||||
duk_array_shift(ctx, -1); // [obj][string][array][string]
|
||||
lang = (char*)duk_safe_to_string(ctx, -1);
|
||||
duk_dup(ctx, -4); // [obj][string][array][string][obj]
|
||||
}
|
||||
if (!duk_has_prop_string(ctx, -1, lang))
|
||||
{
|
||||
lang = "en";
|
||||
}
|
||||
// Get current executable path
|
||||
WCHAR wselfexe[MAX_PATH];
|
||||
GetModuleFileNameW(NULL, wselfexe, sizeof(wselfexe) / 2);
|
||||
ILibWideToUTF8Ex(wselfexe, -1, selfexe, (int)sizeof(selfexe));
|
||||
|
||||
if (strcmp("en", lang) != 0)
|
||||
void *dialogchain = ILibCreateChain();
|
||||
ILibChain_PartialStart(dialogchain);
|
||||
duk_context *ctx = ILibDuktape_ScriptContainer_InitializeJavaScriptEngineEx(0, 0, dialogchain, NULL, NULL, selfexe, NULL, NULL, dialogchain);
|
||||
if (duk_peval_string(ctx, "require('util-language').current.toLowerCase().split('_').join('-');") == 0) { lang = (char*)duk_safe_to_string(ctx, -1); }
|
||||
if (duk_peval_string(ctx, "(function foo(){return(JSON.parse(_MSH().translation));})()") != 0 || !duk_has_prop_string(ctx, -1, "en"))
|
||||
{
|
||||
duk_push_object(ctx); // [translation][en]
|
||||
duk_push_string(ctx, "Install"); duk_put_prop_string(ctx, -2, "install");
|
||||
duk_push_string(ctx, "Uninstall"); duk_put_prop_string(ctx, -2, "uninstall");
|
||||
duk_push_string(ctx, "Connect"); duk_put_prop_string(ctx, -2, "connect");
|
||||
duk_push_string(ctx, "Disconnect"); duk_put_prop_string(ctx, -2, "disconnect");
|
||||
duk_push_string(ctx, "Update"); duk_put_prop_string(ctx, -2, "update");
|
||||
duk_push_array(ctx);
|
||||
duk_push_string(ctx, "NOT INSTALLED"); duk_array_push(ctx, -2);
|
||||
duk_push_string(ctx, "RUNNING"); duk_array_push(ctx, -2);
|
||||
duk_push_string(ctx, "NOT RUNNING"); duk_array_push(ctx, -2);
|
||||
duk_put_prop_string(ctx, -2, "status");
|
||||
duk_put_prop_string(ctx, -2, "en"); // [translation]
|
||||
}
|
||||
|
||||
if (DIALOG_LANG != NULL) { lang = DIALOG_LANG; }
|
||||
if (!duk_has_prop_string(ctx, -1, lang))
|
||||
{
|
||||
duk_push_string(ctx, lang); // [obj][string]
|
||||
duk_string_split(ctx, -1, "-"); // [obj][string][array]
|
||||
duk_array_shift(ctx, -1); // [obj][string][array][string]
|
||||
lang = (char*)duk_safe_to_string(ctx, -1);
|
||||
duk_dup(ctx, -4); // [obj][string][array][string][obj]
|
||||
}
|
||||
if (!duk_has_prop_string(ctx, -1, lang))
|
||||
{
|
||||
lang = "en";
|
||||
}
|
||||
|
||||
if (strcmp("en", lang) != 0)
|
||||
{
|
||||
// Not English, so check the minimum set is present
|
||||
duk_get_prop_string(ctx, -1, "en"); // [en]
|
||||
duk_get_prop_string(ctx, -2, lang); // [en][lang]
|
||||
duk_enum(ctx, -2, DUK_ENUM_OWN_PROPERTIES_ONLY);// [en][lang][enum]
|
||||
while (duk_next(ctx, -1, 1)) // [en][lang][enum][key][val]
|
||||
{
|
||||
// Not English, so check the minimum set is present
|
||||
duk_get_prop_string(ctx, -1, "en"); // [en]
|
||||
duk_get_prop_string(ctx, -2, lang); // [en][lang]
|
||||
duk_enum(ctx, -2, DUK_ENUM_OWN_PROPERTIES_ONLY);// [en][lang][enum]
|
||||
while (duk_next(ctx, -1, 1)) // [en][lang][enum][key][val]
|
||||
if (!duk_has_prop_string(ctx, -4, duk_get_string(ctx, -2)))
|
||||
{
|
||||
if (!duk_has_prop_string(ctx, -4, duk_get_string(ctx, -2)))
|
||||
{
|
||||
duk_put_prop(ctx, -4); // [en][lang][enum]
|
||||
}
|
||||
else
|
||||
{
|
||||
duk_pop_2(ctx); // [en][lang][enum]
|
||||
}
|
||||
duk_put_prop(ctx, -4); // [en][lang][enum]
|
||||
}
|
||||
duk_pop_3(ctx); // ...
|
||||
}
|
||||
|
||||
if (duk_has_prop_string(ctx, -1, lang))
|
||||
{
|
||||
duk_get_prop_string(ctx, -1, lang);
|
||||
|
||||
agentstatus = Dialog_GetTranslation(ctx, "statusDescription");
|
||||
if (agentstatus != NULL) { SetWindowTextW(GetDlgItem(hDlg, IDC_AGENTSTATUS_TEXT), agentstatus); }
|
||||
|
||||
agentversion = Dialog_GetTranslation(ctx, "agentVersion");
|
||||
if (agentversion != NULL) { SetWindowTextW(GetDlgItem(hDlg, IDC_AGENT_VERSION), agentversion); }
|
||||
|
||||
serverlocation = Dialog_GetTranslation(ctx, "url");
|
||||
if (serverlocation != NULL) { SetWindowTextW(GetDlgItem(hDlg, IDC_SERVER_LOCATION), serverlocation); }
|
||||
|
||||
meshname = Dialog_GetTranslation(ctx, "meshName");
|
||||
if (meshname != NULL) { SetWindowTextW(GetDlgItem(hDlg, IDC_MESH_NAME), meshname); }
|
||||
|
||||
meshidentitifer = Dialog_GetTranslation(ctx, "meshId");
|
||||
if (meshidentitifer != NULL) { SetWindowTextW(GetDlgItem(hDlg, IDC_MESH_IDENTIFIER), meshidentitifer); }
|
||||
|
||||
serveridentifier = Dialog_GetTranslation(ctx, "serverId");
|
||||
if (serveridentifier != NULL) { SetWindowTextW(GetDlgItem(hDlg, IDC_SERVER_IDENTIFIER), serveridentifier); }
|
||||
|
||||
dialogdescription = Dialog_GetTranslation(ctx, "description");
|
||||
if (dialogdescription != NULL) { SetWindowTextW(GetDlgItem(hDlg, IDC_DESCRIPTION), 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");
|
||||
disconnect_buttontext = Dialog_GetTranslation(ctx, "disconnect");
|
||||
if (disconnect_buttontext != NULL)
|
||||
else
|
||||
{
|
||||
wcscpy_s(closeButtonText, sizeof(closeButtonText) / 2, disconnect_buttontext);
|
||||
closeButtonTextSet = 1;
|
||||
duk_pop_2(ctx); // [en][lang][enum]
|
||||
}
|
||||
|
||||
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); }
|
||||
|
||||
duk_get_prop_string(ctx, -1, "status"); // [Array]
|
||||
state_notinstalled = Dialog_GetTranslationEx(ctx, Duktape_GetStringPropertyIndexValue(ctx, -1, 0, NULL));
|
||||
state_running = Dialog_GetTranslationEx(ctx, Duktape_GetStringPropertyIndexValue(ctx, -1, 1, NULL));
|
||||
state_notrunning = Dialog_GetTranslationEx(ctx, Duktape_GetStringPropertyIndexValue(ctx, -1, 2, NULL));
|
||||
}
|
||||
|
||||
duk_pop_3(ctx); // ...
|
||||
}
|
||||
|
||||
fileName = MeshAgent_MakeAbsolutePath(selfexe, ".msh");
|
||||
if (duk_has_prop_string(ctx, -1, lang))
|
||||
{
|
||||
duk_get_prop_string(ctx, -1, lang);
|
||||
|
||||
agentstatus = Dialog_GetTranslation(ctx, "statusDescription");
|
||||
if (agentstatus != NULL) { SetWindowTextW(GetDlgItem(hDlg, IDC_AGENTSTATUS_TEXT), agentstatus); }
|
||||
|
||||
agentversion = Dialog_GetTranslation(ctx, "agentVersion");
|
||||
if (agentversion != NULL) { SetWindowTextW(GetDlgItem(hDlg, IDC_AGENT_VERSION), agentversion); }
|
||||
|
||||
serverlocation = Dialog_GetTranslation(ctx, "url");
|
||||
if (serverlocation != NULL) { SetWindowTextW(GetDlgItem(hDlg, IDC_SERVER_LOCATION), serverlocation); }
|
||||
|
||||
meshname = Dialog_GetTranslation(ctx, "meshName");
|
||||
if (meshname != NULL) { SetWindowTextW(GetDlgItem(hDlg, IDC_MESH_NAME), meshname); }
|
||||
|
||||
meshidentitifer = Dialog_GetTranslation(ctx, "meshId");
|
||||
if (meshidentitifer != NULL) { SetWindowTextW(GetDlgItem(hDlg, IDC_MESH_IDENTIFIER), meshidentitifer); }
|
||||
|
||||
serveridentifier = Dialog_GetTranslation(ctx, "serverId");
|
||||
if (serveridentifier != NULL) { SetWindowTextW(GetDlgItem(hDlg, IDC_SERVER_IDENTIFIER), serveridentifier); }
|
||||
|
||||
dialogdescription = Dialog_GetTranslation(ctx, "description");
|
||||
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");
|
||||
close_buttontext = Dialog_GetTranslation(ctx, "close");
|
||||
disconnect_buttontext = Dialog_GetTranslation(ctx, "disconnect");
|
||||
if (disconnect_buttontext != NULL)
|
||||
{
|
||||
DWORD dwSize = 0;
|
||||
BYTE *pVersionInfo = NULL;
|
||||
VS_FIXEDFILEINFO *pFileInfo = NULL;
|
||||
UINT pLenFileInfo = 0;
|
||||
int major, minor, hotfix, other;
|
||||
wcscpy_s(closeButtonText, sizeof(closeButtonText) / 2, disconnect_buttontext);
|
||||
closeButtonTextSet = 1;
|
||||
}
|
||||
|
||||
if ((dwSize = GetFileVersionInfoSizeW(wselfexe, NULL)))
|
||||
{
|
||||
if ((pVersionInfo = malloc(dwSize)) == NULL) { ILIBCRITICALEXIT(254); }
|
||||
if (GetFileVersionInfoW(wselfexe, 0, dwSize, pVersionInfo))
|
||||
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 (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));
|
||||
state_running = Dialog_GetTranslationEx(ctx, Duktape_GetStringPropertyIndexValue(ctx, -1, 1, NULL));
|
||||
state_notrunning = Dialog_GetTranslationEx(ctx, Duktape_GetStringPropertyIndexValue(ctx, -1, 2, NULL));
|
||||
}
|
||||
|
||||
|
||||
fileName = MeshAgent_MakeAbsolutePath(selfexe, ".msh");
|
||||
{
|
||||
DWORD dwSize = 0;
|
||||
BYTE *pVersionInfo = NULL;
|
||||
VS_FIXEDFILEINFO *pFileInfo = NULL;
|
||||
UINT pLenFileInfo = 0;
|
||||
int major, minor, hotfix, other;
|
||||
|
||||
if ((dwSize = GetFileVersionInfoSizeW(wselfexe, NULL)))
|
||||
{
|
||||
if ((pVersionInfo = malloc(dwSize)) == NULL) { ILIBCRITICALEXIT(254); }
|
||||
if (GetFileVersionInfoW(wselfexe, 0, dwSize, pVersionInfo))
|
||||
{
|
||||
if (VerQueryValue(pVersionInfo, TEXT("\\"), (LPVOID*)&pFileInfo, &pLenFileInfo))
|
||||
{
|
||||
if (VerQueryValue(pVersionInfo, TEXT("\\"), (LPVOID*)&pFileInfo, &pLenFileInfo))
|
||||
{
|
||||
// Display the version of this software
|
||||
major = (pFileInfo->dwFileVersionMS >> 16) & 0xffff;
|
||||
minor = (pFileInfo->dwFileVersionMS) & 0xffff;
|
||||
hotfix = (pFileInfo->dwFileVersionLS >> 16) & 0xffff;
|
||||
other = (pFileInfo->dwFileVersionLS) & 0xffff;
|
||||
// Display the version of this software
|
||||
major = (pFileInfo->dwFileVersionMS >> 16) & 0xffff;
|
||||
minor = (pFileInfo->dwFileVersionMS) & 0xffff;
|
||||
hotfix = (pFileInfo->dwFileVersionLS >> 16) & 0xffff;
|
||||
other = (pFileInfo->dwFileVersionLS) & 0xffff;
|
||||
#ifdef _WIN64
|
||||
if (SOURCE_COMMIT_DATE != NULL)
|
||||
{
|
||||
sprintf_s(ILibScratchPad, sizeof(ILibScratchPad), "%s, 64bit", SOURCE_COMMIT_DATE);
|
||||
}
|
||||
else
|
||||
{
|
||||
sprintf_s(ILibScratchPad, sizeof(ILibScratchPad), "v%d.%d.%d, 64bit", major, minor, hotfix);
|
||||
}
|
||||
#else
|
||||
if (SOURCE_COMMIT_DATE != NULL)
|
||||
{
|
||||
sprintf_s(ILibScratchPad, sizeof(ILibScratchPad), "%s", SOURCE_COMMIT_DATE);
|
||||
}
|
||||
else
|
||||
{
|
||||
sprintf_s(ILibScratchPad, sizeof(ILibScratchPad), "v%d.%d.%d", major, minor, hotfix);
|
||||
}
|
||||
#endif
|
||||
SetWindowTextA(GetDlgItem(hDlg, IDC_VERSIONTEXT), ILibScratchPad);
|
||||
if (SOURCE_COMMIT_DATE != NULL)
|
||||
{
|
||||
sprintf_s(ILibScratchPad, sizeof(ILibScratchPad), "%s, 64bit", SOURCE_COMMIT_DATE);
|
||||
}
|
||||
else
|
||||
{
|
||||
sprintf_s(ILibScratchPad, sizeof(ILibScratchPad), "v%d.%d.%d, 64bit", major, minor, hotfix);
|
||||
}
|
||||
#else
|
||||
if (SOURCE_COMMIT_DATE != NULL)
|
||||
{
|
||||
sprintf_s(ILibScratchPad, sizeof(ILibScratchPad), "%s", SOURCE_COMMIT_DATE);
|
||||
}
|
||||
else
|
||||
{
|
||||
sprintf_s(ILibScratchPad, sizeof(ILibScratchPad), "v%d.%d.%d", major, minor, hotfix);
|
||||
}
|
||||
#endif
|
||||
SetWindowTextA(GetDlgItem(hDlg, IDC_VERSIONTEXT), ILibScratchPad);
|
||||
}
|
||||
free(pVersionInfo);
|
||||
}
|
||||
free(pVersionInfo);
|
||||
}
|
||||
}
|
||||
|
||||
if (duk_peval_string(ctx, "_MSH();") == 0)
|
||||
{
|
||||
int installFlagsInt = 0;
|
||||
WINDOWPLACEMENT lpwndpl;
|
||||
if (duk_peval_string(ctx, "_MSH();") == 0)
|
||||
{
|
||||
int installFlagsInt = 0;
|
||||
WINDOWPLACEMENT lpwndpl;
|
||||
|
||||
installFlags = Duktape_GetStringPropertyValue(ctx, -1, "InstallFlags", NULL);
|
||||
meshname = (WCHAR*)Duktape_GetStringPropertyValue(ctx, -1, "MeshName", NULL);
|
||||
meshid = Duktape_GetStringPropertyValue(ctx, -1, "MeshID", NULL);
|
||||
serverid = Duktape_GetStringPropertyValue(ctx, -1, "ServerID", NULL);
|
||||
serverurl = Duktape_GetStringPropertyValue(ctx, -1, "MeshServer", NULL);
|
||||
displayName = Duktape_GetStringPropertyValue(ctx, -1, "displayName", NULL);
|
||||
meshServiceName = Duktape_GetStringPropertyValue(ctx, -1, "meshServiceName", NULL);
|
||||
installFlags = Duktape_GetStringPropertyValue(ctx, -1, "InstallFlags", NULL);
|
||||
meshname = (WCHAR*)Duktape_GetStringPropertyValue(ctx, -1, "MeshName", NULL);
|
||||
meshid = Duktape_GetStringPropertyValue(ctx, -1, "MeshID", NULL);
|
||||
serverid = Duktape_GetStringPropertyValue(ctx, -1, "ServerID", NULL);
|
||||
serverurl = Duktape_GetStringPropertyValue(ctx, -1, "MeshServer", NULL);
|
||||
displayName = Duktape_GetStringPropertyValue(ctx, -1, "displayName", NULL);
|
||||
meshServiceName = Duktape_GetStringPropertyValue(ctx, -1, "meshServiceName", 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; }
|
||||
if (strnlen_s(serverid, 255) > 50) { serverid[42] = 0; }
|
||||
if (displayName != NULL) { SetWindowTextW(hDlg, ILibUTF8ToWide(displayName, -1)); }
|
||||
SetWindowTextW(GetDlgItem(hDlg, IDC_POLICYTEXT), ILibUTF8ToWide((meshname != NULL) ? (char*)meshname : "(None)", -1));
|
||||
SetWindowTextA(GetDlgItem(hDlg, IDC_HASHTEXT), (meshid != NULL) ? meshid : "(None)");
|
||||
SetWindowTextW(GetDlgItem(hDlg, IDC_SERVERLOCATION), ILibUTF8ToWide((serverurl != NULL) ? serverurl : "(None)", -1));
|
||||
SetWindowTextA(GetDlgItem(hDlg, IDC_SERVERID), (serverid != NULL) ? serverid : "(None)");
|
||||
if (meshid == NULL) { EnableWindow(GetDlgItem(hDlg, IDC_CONNECTBUTTON), FALSE); }
|
||||
if ((installFlagsInt & 3) == 1) {
|
||||
// Temporary Agent Only
|
||||
hiddenButtons |= 6; // Both install and uninstall buttons are hidden
|
||||
ShowWindow(GetDlgItem(hDlg, IDC_INSTALLBUTTON), SW_HIDE);
|
||||
ShowWindow(GetDlgItem(hDlg, IDC_UNINSTALLBUTTON), SW_HIDE);
|
||||
GetWindowPlacement(GetDlgItem(hDlg, IDC_INSTALLBUTTON), &lpwndpl);
|
||||
SetWindowPlacement(GetDlgItem(hDlg, IDC_CONNECTBUTTON), &lpwndpl);
|
||||
} 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) {
|
||||
// Uninstall only
|
||||
GetWindowPlacement(GetDlgItem(hDlg, IDC_INSTALLBUTTON), &lpwndpl);
|
||||
SetWindowPlacement(GetDlgItem(hDlg, IDC_UNINSTALLBUTTON), &lpwndpl);
|
||||
hiddenButtons |= 5; // Both install and connect buttons are hidden
|
||||
ShowWindow(GetDlgItem(hDlg, IDC_INSTALLBUTTON), SW_HIDE);
|
||||
ShowWindow(GetDlgItem(hDlg, IDC_CONNECTBUTTON), SW_HIDE);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
EnableWindow(GetDlgItem(hDlg, IDC_CONNECTBUTTON), FALSE);
|
||||
}
|
||||
|
||||
// Get the current service running state
|
||||
int r = GetServiceState(meshServiceName != NULL ? meshServiceName : serviceFile);
|
||||
SetWindowTextW(GetDlgItem(hDlg, IDC_INSTALLBUTTON), update_buttontext);
|
||||
|
||||
switch (r)
|
||||
{
|
||||
case SERVICE_RUNNING:
|
||||
SetWindowTextW(GetDlgItem(hDlg, IDC_STATUSTEXT), state_running);
|
||||
break;
|
||||
case 0:
|
||||
case 100: // Not installed
|
||||
SetWindowTextW(GetDlgItem(hDlg, IDC_STATUSTEXT), state_notinstalled);
|
||||
SetWindowTextW(GetDlgItem(hDlg, IDC_INSTALLBUTTON), install_buttontext);
|
||||
hiddenButtons |= 2; // Uninstall buttons is hidden
|
||||
ShowWindow(GetDlgItem(hDlg, IDC_UNINSTALLBUTTON), SW_HIDE);
|
||||
break;
|
||||
default: // Not running
|
||||
SetWindowTextW(GetDlgItem(hDlg, IDC_STATUSTEXT), state_notrunning);
|
||||
break;
|
||||
}
|
||||
|
||||
// Correct the placement of buttons, push them to the left side if some of them are hidden.
|
||||
if (hiddenButtons == 2) { // Uninstall button is the only one hidden. Place connect button at uninstall position
|
||||
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
|
||||
WINDOWPLACEMENT lpwndpl;
|
||||
// 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; }
|
||||
if (strnlen_s(serverid, 255) > 50) { serverid[42] = 0; }
|
||||
if (displayName != NULL) { SetWindowTextW(hDlg, ILibUTF8ToWide(displayName, -1)); }
|
||||
SetWindowTextW(GetDlgItem(hDlg, IDC_POLICYTEXT), ILibUTF8ToWide((meshname != NULL) ? (char*)meshname : "(None)", -1));
|
||||
SetWindowTextA(GetDlgItem(hDlg, IDC_HASHTEXT), (meshid != NULL) ? meshid : "(None)");
|
||||
SetWindowTextW(GetDlgItem(hDlg, IDC_SERVERLOCATION), ILibUTF8ToWide((serverurl != NULL) ? serverurl : "(None)", -1));
|
||||
SetWindowTextA(GetDlgItem(hDlg, IDC_SERVERID), (serverid != NULL) ? serverid : "(None)");
|
||||
if (meshid == NULL) { EnableWindow(GetDlgItem(hDlg, IDC_CONNECTBUTTON), FALSE); }
|
||||
if ((installFlagsInt & 3) == 1) {
|
||||
// Temporary Agent Only
|
||||
hiddenButtons |= 6; // Both install and uninstall buttons are hidden
|
||||
ShowWindow(GetDlgItem(hDlg, IDC_INSTALLBUTTON), SW_HIDE);
|
||||
ShowWindow(GetDlgItem(hDlg, IDC_UNINSTALLBUTTON), SW_HIDE);
|
||||
GetWindowPlacement(GetDlgItem(hDlg, IDC_INSTALLBUTTON), &lpwndpl);
|
||||
SetWindowPlacement(GetDlgItem(hDlg, IDC_CONNECTBUTTON), &lpwndpl);
|
||||
}
|
||||
|
||||
if (mshfile != NULL) { free(mshfile); }
|
||||
Duktape_SafeDestroyHeap(ctx);
|
||||
ILibStopChain(dialogchain);
|
||||
ILibStartChain(dialogchain);
|
||||
return (INT_PTR)TRUE;
|
||||
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) {
|
||||
// Uninstall only
|
||||
GetWindowPlacement(GetDlgItem(hDlg, IDC_INSTALLBUTTON), &lpwndpl);
|
||||
SetWindowPlacement(GetDlgItem(hDlg, IDC_UNINSTALLBUTTON), &lpwndpl);
|
||||
hiddenButtons |= 5; // Both install and connect buttons are hidden
|
||||
ShowWindow(GetDlgItem(hDlg, IDC_INSTALLBUTTON), SW_HIDE);
|
||||
ShowWindow(GetDlgItem(hDlg, IDC_CONNECTBUTTON), SW_HIDE);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
EnableWindow(GetDlgItem(hDlg, IDC_CONNECTBUTTON), FALSE);
|
||||
}
|
||||
|
||||
// Get the current service running state
|
||||
int r = GetServiceState(meshServiceName != NULL ? meshServiceName : serviceFile);
|
||||
SetWindowTextW(GetDlgItem(hDlg, IDC_INSTALLBUTTON), update_buttontext);
|
||||
|
||||
switch (r)
|
||||
{
|
||||
case SERVICE_RUNNING:
|
||||
SetWindowTextW(GetDlgItem(hDlg, IDC_STATUSTEXT), state_running);
|
||||
break;
|
||||
case 0:
|
||||
case 100: // Not installed
|
||||
SetWindowTextW(GetDlgItem(hDlg, IDC_STATUSTEXT), state_notinstalled);
|
||||
SetWindowTextW(GetDlgItem(hDlg, IDC_INSTALLBUTTON), install_buttontext);
|
||||
hiddenButtons |= 2; // Uninstall buttons is hidden
|
||||
ShowWindow(GetDlgItem(hDlg, IDC_UNINSTALLBUTTON), SW_HIDE);
|
||||
break;
|
||||
default: // Not running
|
||||
SetWindowTextW(GetDlgItem(hDlg, IDC_STATUSTEXT), state_notrunning);
|
||||
break;
|
||||
}
|
||||
|
||||
// Correct the placement of buttons, push them to the left side if some of them are hidden.
|
||||
if (hiddenButtons == 2) { // Uninstall button is the only one hidden. Place connect button at uninstall position
|
||||
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
|
||||
WINDOWPLACEMENT lpwndpl;
|
||||
GetWindowPlacement(GetDlgItem(hDlg, IDC_INSTALLBUTTON), &lpwndpl);
|
||||
SetWindowPlacement(GetDlgItem(hDlg, IDC_CONNECTBUTTON), &lpwndpl);
|
||||
}
|
||||
|
||||
if (mshfile != NULL) { free(mshfile); }
|
||||
Duktape_SafeDestroyHeap(ctx);
|
||||
ILibStopChain(dialogchain);
|
||||
ILibStartChain(dialogchain);
|
||||
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, IDC_INSTALLBUTTON), FALSE);
|
||||
EnableWindow(GetDlgItem(hDlg, IDC_UNINSTALLBUTTON), 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
|
||||
@@ -1200,7 +1254,7 @@ INT_PTR CALLBACK DialogHandler(HWND hDlg, UINT message, WPARAM wParam, LPARAM lP
|
||||
|
||||
return (INT_PTR)TRUE;
|
||||
}
|
||||
else if (LOWORD(wParam) == IDC_CONNECTBUTTON)
|
||||
else if (LOWORD(wParam) == IDC_CONNECTBUTTON)
|
||||
{
|
||||
//
|
||||
// Temporary Agent
|
||||
@@ -1209,12 +1263,12 @@ INT_PTR CALLBACK DialogHandler(HWND hDlg, UINT message, WPARAM wParam, LPARAM lP
|
||||
EnableWindow(GetDlgItem(hDlg, IDC_UNINSTALLBUTTON), FALSE);
|
||||
EnableWindow(GetDlgItem(hDlg, IDC_CONNECTBUTTON), FALSE);
|
||||
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);
|
||||
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
BIN
meshservice/mc.bmp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 117 KiB |
@@ -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
2
meshservice/stdafx.h
Normal file
@@ -0,0 +1,2 @@
|
||||
#pragma once
|
||||
#include <afxcontrolbars.h>
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user