|
Packit |
90a5c9 |
/* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
Packit |
90a5c9 |
* contributor license agreements. See the NOTICE file distributed with
|
|
Packit |
90a5c9 |
* this work for additional information regarding copyright ownership.
|
|
Packit |
90a5c9 |
* The ASF licenses this file to You under the Apache License, Version 2.0
|
|
Packit |
90a5c9 |
* (the "License"); you may not use this file except in compliance with
|
|
Packit |
90a5c9 |
* the License. You may obtain a copy of the License at
|
|
Packit |
90a5c9 |
*
|
|
Packit |
90a5c9 |
* http://www.apache.org/licenses/LICENSE-2.0
|
|
Packit |
90a5c9 |
*
|
|
Packit |
90a5c9 |
* Unless required by applicable law or agreed to in writing, software
|
|
Packit |
90a5c9 |
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
Packit |
90a5c9 |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
Packit |
90a5c9 |
* See the License for the specific language governing permissions and
|
|
Packit |
90a5c9 |
* limitations under the License.
|
|
Packit |
90a5c9 |
*/
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
/* ====================================================================
|
|
Packit |
90a5c9 |
* ApacheMonitor.c Simple program to manage and monitor Apache services.
|
|
Packit |
90a5c9 |
*
|
|
Packit |
90a5c9 |
* Contributed by Mladen Turk <mturk mappingsoft.com>
|
|
Packit |
90a5c9 |
*
|
|
Packit |
90a5c9 |
* 05 Aug 2001
|
|
Packit |
90a5c9 |
* ====================================================================
|
|
Packit |
90a5c9 |
*/
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
#define _WIN32_WINNT 0x0500
|
|
Packit |
90a5c9 |
#ifndef STRICT
|
|
Packit |
90a5c9 |
#define STRICT
|
|
Packit |
90a5c9 |
#endif
|
|
Packit |
90a5c9 |
#ifndef OEMRESOURCE
|
|
Packit |
90a5c9 |
#define OEMRESOURCE
|
|
Packit |
90a5c9 |
#endif
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
#if defined(_MSC_VER) && _MSC_VER >= 1400
|
|
Packit |
90a5c9 |
#define _CRT_SECURE_NO_DEPRECATE
|
|
Packit |
90a5c9 |
#endif
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
#include <windows.h>
|
|
Packit |
90a5c9 |
#include <windowsx.h>
|
|
Packit |
90a5c9 |
#include <commctrl.h>
|
|
Packit |
90a5c9 |
#include <objbase.h>
|
|
Packit |
90a5c9 |
#include <shlobj.h>
|
|
Packit |
90a5c9 |
#include <stdlib.h>
|
|
Packit |
90a5c9 |
#include <stdio.h>
|
|
Packit |
90a5c9 |
#include <WtsApi32.h>
|
|
Packit |
90a5c9 |
#include <tchar.h>
|
|
Packit |
90a5c9 |
#include "ApacheMonitor.h"
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
#ifndef AM_STRINGIFY
|
|
Packit |
90a5c9 |
/** Properly quote a value as a string in the C preprocessor */
|
|
Packit |
90a5c9 |
#define AM_STRINGIFY(n) AM_STRINGIFY_HELPER(n)
|
|
Packit |
90a5c9 |
/** Helper macro for AM_STRINGIFY */
|
|
Packit |
90a5c9 |
#define AM_STRINGIFY_HELPER(n) #n
|
|
Packit |
90a5c9 |
#endif
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
#define OS_VERSION_WINNT 2
|
|
Packit |
90a5c9 |
#define OS_VERSION_WIN2K 3
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
/* Should be enough */
|
|
Packit |
90a5c9 |
#define MAX_APACHE_SERVICES 128
|
|
Packit |
90a5c9 |
#define MAX_APACHE_COMPUTERS 32
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
#define WM_TRAYMESSAGE (WM_APP+1)
|
|
Packit |
90a5c9 |
#define WM_UPDATEMESSAGE (WM_USER+1)
|
|
Packit |
90a5c9 |
#define WM_MANAGEMESSAGE (WM_USER+2)
|
|
Packit |
90a5c9 |
#define WM_TIMER_REFRESH 10
|
|
Packit |
90a5c9 |
#define WM_TIMER_RESCAN 11
|
|
Packit |
90a5c9 |
#define SERVICE_APACHE_RESTART 128
|
|
Packit |
90a5c9 |
#define XBITMAP 16
|
|
Packit |
90a5c9 |
#define YBITMAP 16
|
|
Packit |
90a5c9 |
#define MAX_LOADSTRING 100
|
|
Packit |
90a5c9 |
#define REFRESH_TIME 2000 /* service refresh time (ms) */
|
|
Packit |
90a5c9 |
#define RESCAN_TIME 20000 /* registry rescan time (ms) */
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
typedef struct _st_APACHE_SERVICE
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
LPTSTR szServiceName;
|
|
Packit |
90a5c9 |
LPTSTR szDisplayName;
|
|
Packit |
90a5c9 |
LPTSTR szDescription;
|
|
Packit |
90a5c9 |
LPTSTR szImagePath;
|
|
Packit |
90a5c9 |
LPTSTR szComputerName;
|
|
Packit |
90a5c9 |
DWORD dwPid;
|
|
Packit |
90a5c9 |
} ST_APACHE_SERVICE;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
typedef struct _st_MONITORED_COMPUTERS
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
LPTSTR szComputerName;
|
|
Packit |
90a5c9 |
HKEY hRegistry;
|
|
Packit |
90a5c9 |
} ST_MONITORED_COMP;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
/* Global variables */
|
|
Packit |
90a5c9 |
HINSTANCE g_hInstance = NULL;
|
|
Packit |
90a5c9 |
TCHAR *g_szTitle; /* The title bar text */
|
|
Packit |
90a5c9 |
TCHAR *g_szWindowClass; /* Window Class Name */
|
|
Packit |
90a5c9 |
HICON g_icoStop;
|
|
Packit |
90a5c9 |
HICON g_icoRun;
|
|
Packit |
90a5c9 |
UINT g_bUiTaskbarCreated;
|
|
Packit |
90a5c9 |
DWORD g_dwOSVersion;
|
|
Packit |
90a5c9 |
BOOL g_bDlgServiceOn = FALSE;
|
|
Packit |
90a5c9 |
BOOL g_bConsoleRun = FALSE;
|
|
Packit |
90a5c9 |
ST_APACHE_SERVICE g_stServices[MAX_APACHE_SERVICES];
|
|
Packit |
90a5c9 |
ST_MONITORED_COMP g_stComputers[MAX_APACHE_COMPUTERS];
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
HBITMAP g_hBmpStart, g_hBmpStop;
|
|
Packit |
90a5c9 |
HBITMAP g_hBmpPicture, g_hBmpOld;
|
|
Packit |
90a5c9 |
BOOL g_bRescanServices;
|
|
Packit |
90a5c9 |
HWND g_hwndServiceDlg;
|
|
Packit |
90a5c9 |
HWND g_hwndMain;
|
|
Packit |
90a5c9 |
HWND g_hwndStdoutList;
|
|
Packit |
90a5c9 |
HWND g_hwndConnectDlg;
|
|
Packit |
90a5c9 |
HCURSOR g_hCursorHourglass;
|
|
Packit |
90a5c9 |
HCURSOR g_hCursorArrow;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
LANGID g_LangID;
|
|
Packit |
90a5c9 |
CRITICAL_SECTION g_stcSection;
|
|
Packit |
90a5c9 |
LPTSTR g_szLocalHost;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
/* locale language support */
|
|
Packit |
90a5c9 |
static TCHAR *g_lpMsg[IDS_MSG_LAST - IDS_MSG_FIRST + 1];
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
void am_ClearServicesSt()
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
int i;
|
|
Packit |
90a5c9 |
for (i = 0; i < MAX_APACHE_SERVICES; i++)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
if (g_stServices[i].szServiceName) {
|
|
Packit |
90a5c9 |
free(g_stServices[i].szServiceName);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
if (g_stServices[i].szDisplayName) {
|
|
Packit |
90a5c9 |
free(g_stServices[i].szDisplayName);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
if (g_stServices[i].szDescription) {
|
|
Packit |
90a5c9 |
free(g_stServices[i].szDescription);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
if (g_stServices[i].szImagePath) {
|
|
Packit |
90a5c9 |
free(g_stServices[i].szImagePath);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
if (g_stServices[i].szComputerName) {
|
|
Packit |
90a5c9 |
free(g_stServices[i].szComputerName);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
memset(g_stServices, 0, sizeof(ST_APACHE_SERVICE) * MAX_APACHE_SERVICES);
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
void am_ClearComputersSt()
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
int i;
|
|
Packit |
90a5c9 |
for (i = 0; i < MAX_APACHE_COMPUTERS; i++) {
|
|
Packit |
90a5c9 |
if (g_stComputers[i].szComputerName) {
|
|
Packit |
90a5c9 |
free(g_stComputers[i].szComputerName);
|
|
Packit |
90a5c9 |
RegCloseKey(g_stComputers[i].hRegistry);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
memset(g_stComputers, 0, sizeof(ST_MONITORED_COMP) * MAX_APACHE_COMPUTERS);
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
BOOL am_IsComputerConnected(LPTSTR szComputerName)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
int i = 0;
|
|
Packit |
90a5c9 |
while (g_stComputers[i].szComputerName != NULL) {
|
|
Packit |
90a5c9 |
if (_tcscmp(g_stComputers[i].szComputerName, szComputerName) == 0) {
|
|
Packit |
90a5c9 |
return TRUE;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
++i;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
return FALSE;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
void am_DisconnectComputer(LPTSTR szComputerName)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
int i = 0, j;
|
|
Packit |
90a5c9 |
while (g_stComputers[i].szComputerName != NULL) {
|
|
Packit |
90a5c9 |
if (_tcscmp(g_stComputers[i].szComputerName, szComputerName) == 0) {
|
|
Packit |
90a5c9 |
break;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
++i;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
if (g_stComputers[i].szComputerName != NULL) {
|
|
Packit |
90a5c9 |
free(g_stComputers[i].szComputerName);
|
|
Packit |
90a5c9 |
RegCloseKey(g_stComputers[i].hRegistry);
|
|
Packit |
90a5c9 |
for (j = i; j < MAX_APACHE_COMPUTERS - 1; j++) {
|
|
Packit |
90a5c9 |
g_stComputers[j].szComputerName= g_stComputers[j+1].szComputerName;
|
|
Packit |
90a5c9 |
g_stComputers[j].hRegistry = g_stComputers[j+1].hRegistry;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
g_stComputers[j].szComputerName = NULL;
|
|
Packit |
90a5c9 |
g_stComputers[j].hRegistry = NULL;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
void ErrorMessage(LPCTSTR szError, BOOL bFatal)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
LPVOID lpMsgBuf = NULL;
|
|
Packit |
90a5c9 |
if (szError) {
|
|
Packit |
90a5c9 |
MessageBox(NULL, szError, g_lpMsg[IDS_MSG_ERROR - IDS_MSG_FIRST],
|
|
Packit |
90a5c9 |
MB_OK | (bFatal ? MB_ICONERROR : MB_ICONEXCLAMATION));
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
else {
|
|
Packit |
90a5c9 |
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
|
|
Packit |
90a5c9 |
FORMAT_MESSAGE_FROM_SYSTEM |
|
|
Packit |
90a5c9 |
FORMAT_MESSAGE_IGNORE_INSERTS,
|
|
Packit |
90a5c9 |
NULL, GetLastError(), g_LangID,
|
|
Packit |
90a5c9 |
(LPTSTR) &lpMsgBuf, 0, NULL);
|
|
Packit |
90a5c9 |
MessageBox(NULL, (LPCTSTR)lpMsgBuf,
|
|
Packit |
90a5c9 |
g_lpMsg[IDS_MSG_ERROR - IDS_MSG_FIRST],
|
|
Packit |
90a5c9 |
MB_OK | (bFatal ? MB_ICONERROR : MB_ICONEXCLAMATION));
|
|
Packit |
90a5c9 |
LocalFree(lpMsgBuf);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
if (bFatal) {
|
|
Packit |
90a5c9 |
PostQuitMessage(0);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
int am_RespawnAsUserAdmin(HWND hwnd, DWORD op, LPCTSTR szService,
|
|
Packit |
90a5c9 |
LPCTSTR szComputerName)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
TCHAR args[MAX_PATH + MAX_COMPUTERNAME_LENGTH + 12];
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
if (g_dwOSVersion < OS_VERSION_WIN2K) {
|
|
Packit |
90a5c9 |
ErrorMessage(g_lpMsg[IDS_MSG_SRVFAILED - IDS_MSG_FIRST], FALSE);
|
|
Packit |
90a5c9 |
return 0;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
_sntprintf(args, sizeof(args) / sizeof(TCHAR),
|
|
Packit |
90a5c9 |
_T("%d \"%s\" \"%s\""), op, szService,
|
|
Packit |
90a5c9 |
szComputerName ? szComputerName : _T(""));
|
|
Packit |
90a5c9 |
if (!ShellExecute(hwnd, _T("runas"), __targv[0], args, NULL, SW_NORMAL)) {
|
|
Packit |
90a5c9 |
ErrorMessage(g_lpMsg[IDS_MSG_SRVFAILED - IDS_MSG_FIRST],
|
|
Packit |
90a5c9 |
FALSE);
|
|
Packit |
90a5c9 |
return 0;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
return 1;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
BOOL am_ConnectComputer(LPTSTR szComputerName)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
int i = 0;
|
|
Packit |
90a5c9 |
HKEY hKeyRemote;
|
|
Packit |
90a5c9 |
TCHAR szTmp[MAX_PATH];
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
while (g_stComputers[i].szComputerName != NULL) {
|
|
Packit |
90a5c9 |
if (_tcscmp(g_stComputers[i].szComputerName, szComputerName) == 0) {
|
|
Packit |
90a5c9 |
return FALSE;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
++i;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
if (i > MAX_APACHE_COMPUTERS - 1) {
|
|
Packit |
90a5c9 |
return FALSE;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
if (RegConnectRegistry(szComputerName, HKEY_LOCAL_MACHINE, &hKeyRemote)
|
|
Packit |
90a5c9 |
!= ERROR_SUCCESS) {
|
|
Packit |
90a5c9 |
_sntprintf(szTmp, sizeof(szTmp) / sizeof(TCHAR),
|
|
Packit |
90a5c9 |
g_lpMsg[IDS_MSG_ECONNECT - IDS_MSG_FIRST],
|
|
Packit |
90a5c9 |
szComputerName);
|
|
Packit |
90a5c9 |
ErrorMessage(szTmp, FALSE);
|
|
Packit |
90a5c9 |
return FALSE;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
else {
|
|
Packit |
90a5c9 |
g_stComputers[i].szComputerName = _tcsdup(szComputerName);
|
|
Packit |
90a5c9 |
g_stComputers[i].hRegistry = hKeyRemote;
|
|
Packit |
90a5c9 |
return TRUE;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
LPTSTR GetStringRes(int id)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
static TCHAR buffer[MAX_PATH];
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
buffer[0] = 0;
|
|
Packit |
90a5c9 |
LoadString(GetModuleHandle(NULL), id, buffer, MAX_PATH);
|
|
Packit |
90a5c9 |
return buffer;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
BOOL GetSystemOSVersion(LPDWORD dwVersion)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
OSVERSIONINFO osvi;
|
|
Packit |
90a5c9 |
/*
|
|
Packit |
90a5c9 |
Try calling GetVersionEx using the OSVERSIONINFOEX structure.
|
|
Packit |
90a5c9 |
If that fails, try using the OSVERSIONINFO structure.
|
|
Packit |
90a5c9 |
*/
|
|
Packit |
90a5c9 |
memset(&osvi, 0, sizeof(OSVERSIONINFO));
|
|
Packit |
90a5c9 |
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
if (!GetVersionEx(&osvi)) {
|
|
Packit |
90a5c9 |
return FALSE;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
switch (osvi.dwPlatformId)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
case VER_PLATFORM_WIN32_NT:
|
|
Packit |
90a5c9 |
if (osvi.dwMajorVersion >= 5)
|
|
Packit |
90a5c9 |
*dwVersion = OS_VERSION_WIN2K;
|
|
Packit |
90a5c9 |
else
|
|
Packit |
90a5c9 |
*dwVersion = OS_VERSION_WINNT;
|
|
Packit |
90a5c9 |
break;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
case VER_PLATFORM_WIN32_WINDOWS:
|
|
Packit |
90a5c9 |
case VER_PLATFORM_WIN32s:
|
|
Packit |
90a5c9 |
default:
|
|
Packit |
90a5c9 |
*dwVersion = 0;
|
|
Packit |
90a5c9 |
return FALSE;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
return TRUE;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
static VOID ShowNotifyIcon(HWND hWnd, DWORD dwMessage)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
NOTIFYICONDATA nid;
|
|
Packit |
90a5c9 |
int i = 0, n = 0;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
memset(&nid, 0, sizeof(nid));
|
|
Packit |
90a5c9 |
nid.cbSize = sizeof(NOTIFYICONDATA);
|
|
Packit |
90a5c9 |
nid.hWnd = hWnd;
|
|
Packit |
90a5c9 |
nid.uID = 0xFF;
|
|
Packit |
90a5c9 |
nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
|
|
Packit |
90a5c9 |
nid.uCallbackMessage = WM_TRAYMESSAGE;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
while (g_stServices[i].szServiceName != NULL)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
if (g_stServices[i].dwPid != 0) {
|
|
Packit |
90a5c9 |
++n;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
++i;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
if (dwMessage != NIM_DELETE)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
if (n) {
|
|
Packit |
90a5c9 |
nid.hIcon = g_icoRun;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
else {
|
|
Packit |
90a5c9 |
nid.hIcon = g_icoStop;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
else {
|
|
Packit |
90a5c9 |
nid.hIcon = NULL;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
if (n == i && n > 0) {
|
|
Packit |
90a5c9 |
_tcscpy(nid.szTip, g_lpMsg[IDS_MSG_RUNNINGALL - IDS_MSG_FIRST]);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
else if (n) {
|
|
Packit |
90a5c9 |
_sntprintf(nid.szTip, sizeof(nid.szTip) / sizeof(TCHAR),
|
|
Packit |
90a5c9 |
g_lpMsg[IDS_MSG_RUNNING - IDS_MSG_FIRST], n, i);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
else if (i) {
|
|
Packit |
90a5c9 |
_sntprintf(nid.szTip, sizeof(nid.szTip) / sizeof(TCHAR),
|
|
Packit |
90a5c9 |
g_lpMsg[IDS_MSG_RUNNINGNONE - IDS_MSG_FIRST], i);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
else {
|
|
Packit |
90a5c9 |
_tcscpy(nid.szTip, g_lpMsg[IDS_MSG_NOSERVICES - IDS_MSG_FIRST]);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
Shell_NotifyIcon(dwMessage, &nid;;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
void appendMenuItem(HMENU hMenu, UINT uMenuId, LPTSTR szName,
|
|
Packit |
90a5c9 |
BOOL fDefault, BOOL fEnabled)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
MENUITEMINFO mii;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
memset(&mii, 0, sizeof(MENUITEMINFO));
|
|
Packit |
90a5c9 |
mii.cbSize = sizeof(MENUITEMINFO);
|
|
Packit |
90a5c9 |
mii.fMask = MIIM_ID | MIIM_TYPE | MIIM_STATE;
|
|
Packit |
90a5c9 |
if (_tcslen(szName))
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
mii.fType = MFT_STRING;
|
|
Packit |
90a5c9 |
mii.wID = uMenuId;
|
|
Packit |
90a5c9 |
if (fDefault) {
|
|
Packit |
90a5c9 |
mii.fState = MFS_DEFAULT;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
if (!fEnabled) {
|
|
Packit |
90a5c9 |
mii.fState |= MFS_DISABLED;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
mii.dwTypeData = szName;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
else {
|
|
Packit |
90a5c9 |
mii.fType = MFT_SEPARATOR;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
InsertMenuItem(hMenu, uMenuId, FALSE, &mii;;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
void appendServiceMenu(HMENU hMenu, UINT uMenuId,
|
|
Packit |
90a5c9 |
LPTSTR szServiceName, BOOL fRunning)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
MENUITEMINFO mii;
|
|
Packit |
90a5c9 |
HMENU smh;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
smh = CreatePopupMenu();
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
appendMenuItem(smh, IDM_SM_START + uMenuId,
|
|
Packit |
90a5c9 |
g_lpMsg[IDS_MSG_SSTART - IDS_MSG_FIRST], FALSE, !fRunning);
|
|
Packit |
90a5c9 |
appendMenuItem(smh, IDM_SM_STOP + uMenuId,
|
|
Packit |
90a5c9 |
g_lpMsg[IDS_MSG_SSTOP - IDS_MSG_FIRST], FALSE, fRunning);
|
|
Packit |
90a5c9 |
appendMenuItem(smh, IDM_SM_RESTART + uMenuId,
|
|
Packit |
90a5c9 |
g_lpMsg[IDS_MSG_SRESTART - IDS_MSG_FIRST], FALSE, fRunning);
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
memset(&mii, 0, sizeof(MENUITEMINFO));
|
|
Packit |
90a5c9 |
mii.cbSize = sizeof(MENUITEMINFO);
|
|
Packit |
90a5c9 |
mii.fMask = MIIM_ID | MIIM_TYPE | MIIM_STATE | MIIM_SUBMENU
|
|
Packit |
90a5c9 |
| MIIM_CHECKMARKS;
|
|
Packit |
90a5c9 |
mii.fType = MFT_STRING;
|
|
Packit |
90a5c9 |
mii.wID = uMenuId;
|
|
Packit |
90a5c9 |
mii.hbmpChecked = g_hBmpStart;
|
|
Packit |
90a5c9 |
mii.hbmpUnchecked = g_hBmpStop;
|
|
Packit |
90a5c9 |
mii.dwTypeData = szServiceName;
|
|
Packit |
90a5c9 |
mii.hSubMenu = smh;
|
|
Packit |
90a5c9 |
mii.fState = fRunning ? MFS_CHECKED : MFS_UNCHECKED;
|
|
Packit |
90a5c9 |
InsertMenuItem(hMenu, IDM_SM_SERVICE + uMenuId, FALSE, &mii;;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
void ShowTryPopupMenu(HWND hWnd)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
/* create popup menu */
|
|
Packit |
90a5c9 |
HMENU hMenu = CreatePopupMenu();
|
|
Packit |
90a5c9 |
POINT pt;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
if (hMenu)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
appendMenuItem(hMenu, IDM_RESTORE,
|
|
Packit |
90a5c9 |
g_lpMsg[IDS_MSG_MNUSHOW - IDS_MSG_FIRST],
|
|
Packit |
90a5c9 |
TRUE, TRUE);
|
|
Packit |
90a5c9 |
appendMenuItem(hMenu, IDC_SMANAGER,
|
|
Packit |
90a5c9 |
g_lpMsg[IDS_MSG_MNUSERVICES - IDS_MSG_FIRST],
|
|
Packit |
90a5c9 |
FALSE, TRUE);
|
|
Packit |
90a5c9 |
appendMenuItem(hMenu, 0, _T(""), FALSE, TRUE);
|
|
Packit |
90a5c9 |
appendMenuItem(hMenu, IDM_EXIT,
|
|
Packit |
90a5c9 |
g_lpMsg[IDS_MSG_MNUEXIT - IDS_MSG_FIRST],
|
|
Packit |
90a5c9 |
FALSE, TRUE);
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
if (!SetForegroundWindow(hWnd)) {
|
|
Packit |
90a5c9 |
SetForegroundWindow(NULL);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
GetCursorPos(&pt;;
|
|
Packit |
90a5c9 |
TrackPopupMenu(hMenu, TPM_LEFTALIGN|TPM_RIGHTBUTTON,
|
|
Packit |
90a5c9 |
pt.x, pt.y, 0, hWnd, NULL);
|
|
Packit |
90a5c9 |
DestroyMenu(hMenu);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
void ShowTryServicesMenu(HWND hWnd)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
/* create services list popup menu and submenus */
|
|
Packit |
90a5c9 |
HMENU hMenu = CreatePopupMenu();
|
|
Packit |
90a5c9 |
POINT pt;
|
|
Packit |
90a5c9 |
int i = 0;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
if (hMenu)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
while (g_stServices[i].szServiceName != NULL)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
appendServiceMenu(hMenu, i, g_stServices[i].szDisplayName,
|
|
Packit |
90a5c9 |
g_stServices[i].dwPid != 0);
|
|
Packit |
90a5c9 |
++i;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
if (i)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
if (!SetForegroundWindow(hWnd)) {
|
|
Packit |
90a5c9 |
SetForegroundWindow(NULL);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
GetCursorPos(&pt;;
|
|
Packit |
90a5c9 |
TrackPopupMenu(hMenu, TPM_LEFTALIGN|TPM_RIGHTBUTTON,
|
|
Packit |
90a5c9 |
pt.x, pt.y, 0, hWnd, NULL);
|
|
Packit |
90a5c9 |
DestroyMenu(hMenu);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
BOOL CenterWindow(HWND hwndChild)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
RECT rChild, rWorkArea;
|
|
Packit |
90a5c9 |
int wChild, hChild;
|
|
Packit |
90a5c9 |
int xNew, yNew;
|
|
Packit |
90a5c9 |
BOOL bResult;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
/* Get the Height and Width of the child window */
|
|
Packit |
90a5c9 |
GetWindowRect(hwndChild, &rChild);
|
|
Packit |
90a5c9 |
wChild = rChild.right - rChild.left;
|
|
Packit |
90a5c9 |
hChild = rChild.bottom - rChild.top;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
/* Get the limits of the 'workarea' */
|
|
Packit |
90a5c9 |
bResult = SystemParametersInfo(SPI_GETWORKAREA, sizeof(RECT),
|
|
Packit |
90a5c9 |
&rWorkArea, 0);
|
|
Packit |
90a5c9 |
if (!bResult) {
|
|
Packit |
90a5c9 |
rWorkArea.left = rWorkArea.top = 0;
|
|
Packit |
90a5c9 |
rWorkArea.right = GetSystemMetrics(SM_CXSCREEN);
|
|
Packit |
90a5c9 |
rWorkArea.bottom = GetSystemMetrics(SM_CYSCREEN);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
/* Calculate new X and Y position*/
|
|
Packit |
90a5c9 |
xNew = (rWorkArea.right - wChild) / 2;
|
|
Packit |
90a5c9 |
yNew = (rWorkArea.bottom - hChild) / 2;
|
|
Packit |
90a5c9 |
return SetWindowPos(hwndChild, HWND_TOP, xNew, yNew, 0, 0,
|
|
Packit |
90a5c9 |
SWP_NOSIZE | SWP_SHOWWINDOW);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
static void addListBoxItem(HWND hDlg, LPTSTR lpStr, HBITMAP hBmp)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
LRESULT nItem;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
nItem = SendMessage(hDlg, LB_ADDSTRING, 0, (LPARAM)lpStr);
|
|
Packit |
90a5c9 |
SendMessage(hDlg, LB_SETITEMDATA, nItem, (LPARAM)hBmp);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
static void addListBoxString(HWND hListBox, LPTSTR lpStr)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
static int nItems = 0;
|
|
Packit |
90a5c9 |
if (!g_bDlgServiceOn) {
|
|
Packit |
90a5c9 |
return;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
++nItems;
|
|
Packit |
90a5c9 |
if (nItems > MAX_LOADSTRING)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
SendMessage(hListBox, LB_RESETCONTENT, 0, 0);
|
|
Packit |
90a5c9 |
nItems = 1;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
ListBox_SetCurSel(hListBox,
|
|
Packit |
90a5c9 |
ListBox_AddString(hListBox, lpStr));
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
BOOL ApacheManageService(LPCTSTR szServiceName, LPCTSTR szImagePath,
|
|
Packit |
90a5c9 |
LPTSTR szComputerName, DWORD dwCommand)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
TCHAR szMsg[MAX_PATH];
|
|
Packit |
90a5c9 |
BOOL retValue;
|
|
Packit |
90a5c9 |
SC_HANDLE schService;
|
|
Packit |
90a5c9 |
SC_HANDLE schSCManager;
|
|
Packit |
90a5c9 |
SERVICE_STATUS schSStatus;
|
|
Packit |
90a5c9 |
int ticks;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
schSCManager = OpenSCManager(szComputerName, NULL,
|
|
Packit |
90a5c9 |
SC_MANAGER_CONNECT);
|
|
Packit |
90a5c9 |
if (!schSCManager) {
|
|
Packit |
90a5c9 |
ErrorMessage(g_lpMsg[IDS_MSG_SRVFAILED - IDS_MSG_FIRST],
|
|
Packit |
90a5c9 |
FALSE);
|
|
Packit |
90a5c9 |
return FALSE;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
schService = OpenService(schSCManager, szServiceName,
|
|
Packit |
90a5c9 |
SERVICE_QUERY_STATUS | SERVICE_START |
|
|
Packit |
90a5c9 |
SERVICE_STOP | SERVICE_USER_DEFINED_CONTROL);
|
|
Packit |
90a5c9 |
if (schService == NULL)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
/* Avoid recursion of ImagePath NULL (from this Respawn) */
|
|
Packit |
90a5c9 |
if (szImagePath) {
|
|
Packit |
90a5c9 |
am_RespawnAsUserAdmin(g_hwndMain, dwCommand,
|
|
Packit |
90a5c9 |
szServiceName, szComputerName);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
else {
|
|
Packit |
90a5c9 |
ErrorMessage(g_lpMsg[IDS_MSG_SRVFAILED - IDS_MSG_FIRST],
|
|
Packit |
90a5c9 |
FALSE);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
CloseServiceHandle(schSCManager);
|
|
Packit |
90a5c9 |
return FALSE;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
else
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
retValue = FALSE;
|
|
Packit |
90a5c9 |
g_bConsoleRun = TRUE;
|
|
Packit |
90a5c9 |
SetCursor(g_hCursorHourglass);
|
|
Packit |
90a5c9 |
switch (dwCommand)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
case SERVICE_CONTROL_STOP:
|
|
Packit |
90a5c9 |
_sntprintf(szMsg, sizeof(szMsg) / sizeof(TCHAR),
|
|
Packit |
90a5c9 |
g_lpMsg[IDS_MSG_SRVSTOP - IDS_MSG_FIRST],
|
|
Packit |
90a5c9 |
szServiceName);
|
|
Packit |
90a5c9 |
addListBoxString(g_hwndStdoutList, szMsg);
|
|
Packit |
90a5c9 |
if (ControlService(schService, SERVICE_CONTROL_STOP,
|
|
Packit |
90a5c9 |
&schSStatus)) {
|
|
Packit |
90a5c9 |
Sleep(1000);
|
|
Packit |
90a5c9 |
while (QueryServiceStatus(schService, &schSStatus))
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
if (schSStatus.dwCurrentState == SERVICE_STOP_PENDING)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
Sleep(1000);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
else {
|
|
Packit |
90a5c9 |
break;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
if (QueryServiceStatus(schService, &schSStatus))
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
if (schSStatus.dwCurrentState == SERVICE_STOPPED)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
retValue = TRUE;
|
|
Packit |
90a5c9 |
_sntprintf(szMsg, sizeof(szMsg) / sizeof(TCHAR),
|
|
Packit |
90a5c9 |
g_lpMsg[IDS_MSG_SRVSTOPPED - IDS_MSG_FIRST],
|
|
Packit |
90a5c9 |
szServiceName);
|
|
Packit |
90a5c9 |
addListBoxString(g_hwndStdoutList, szMsg);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
break;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
case SERVICE_CONTROL_CONTINUE:
|
|
Packit |
90a5c9 |
_sntprintf(szMsg, sizeof(szMsg) / sizeof(TCHAR),
|
|
Packit |
90a5c9 |
g_lpMsg[IDS_MSG_SRVSTART - IDS_MSG_FIRST],
|
|
Packit |
90a5c9 |
szServiceName);
|
|
Packit |
90a5c9 |
addListBoxString(g_hwndStdoutList, szMsg);
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
if (StartService(schService, 0, NULL))
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
Sleep(1000);
|
|
Packit |
90a5c9 |
while (QueryServiceStatus(schService, &schSStatus))
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
if (schSStatus.dwCurrentState == SERVICE_START_PENDING)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
Sleep(1000);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
else {
|
|
Packit |
90a5c9 |
break;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
if (QueryServiceStatus(schService, &schSStatus))
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
if (schSStatus.dwCurrentState == SERVICE_RUNNING)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
retValue = TRUE;
|
|
Packit |
90a5c9 |
_sntprintf(szMsg, sizeof(szMsg) / sizeof(TCHAR),
|
|
Packit |
90a5c9 |
g_lpMsg[IDS_MSG_SRVSTARTED - IDS_MSG_FIRST],
|
|
Packit |
90a5c9 |
szServiceName);
|
|
Packit |
90a5c9 |
addListBoxString(g_hwndStdoutList, szMsg);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
break;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
case SERVICE_APACHE_RESTART:
|
|
Packit |
90a5c9 |
_sntprintf(szMsg, sizeof(szMsg) / sizeof(TCHAR),
|
|
Packit |
90a5c9 |
g_lpMsg[IDS_MSG_SRVRESTART - IDS_MSG_FIRST],
|
|
Packit |
90a5c9 |
szServiceName);
|
|
Packit |
90a5c9 |
addListBoxString(g_hwndStdoutList, szMsg);
|
|
Packit |
90a5c9 |
if (ControlService(schService, SERVICE_APACHE_RESTART,
|
|
Packit |
90a5c9 |
&schSStatus))
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
ticks = 60;
|
|
Packit |
90a5c9 |
while (schSStatus.dwCurrentState == SERVICE_START_PENDING)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
Sleep(1000);
|
|
Packit |
90a5c9 |
if (!QueryServiceStatus(schService, &schSStatus))
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
CloseServiceHandle(schService);
|
|
Packit |
90a5c9 |
CloseServiceHandle(schSCManager);
|
|
Packit |
90a5c9 |
g_bConsoleRun = FALSE;
|
|
Packit |
90a5c9 |
SetCursor(g_hCursorArrow);
|
|
Packit |
90a5c9 |
return FALSE;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
if (!--ticks) {
|
|
Packit |
90a5c9 |
break;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
if (schSStatus.dwCurrentState == SERVICE_RUNNING)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
retValue = TRUE;
|
|
Packit |
90a5c9 |
_sntprintf(szMsg, sizeof(szMsg) / sizeof(TCHAR),
|
|
Packit |
90a5c9 |
g_lpMsg[IDS_MSG_SRVRESTARTED - IDS_MSG_FIRST],
|
|
Packit |
90a5c9 |
szServiceName);
|
|
Packit |
90a5c9 |
addListBoxString(g_hwndStdoutList, szMsg);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
break;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
CloseServiceHandle(schService);
|
|
Packit |
90a5c9 |
CloseServiceHandle(schSCManager);
|
|
Packit |
90a5c9 |
if (!retValue) {
|
|
Packit |
90a5c9 |
ErrorMessage(g_lpMsg[IDS_MSG_SRVFAILED - IDS_MSG_FIRST],
|
|
Packit |
90a5c9 |
FALSE);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
g_bConsoleRun = FALSE;
|
|
Packit |
90a5c9 |
SetCursor(g_hCursorArrow);
|
|
Packit |
90a5c9 |
return retValue;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
return FALSE;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
BOOL IsServiceRunning(LPCTSTR szServiceName, LPCTSTR szComputerName,
|
|
Packit |
90a5c9 |
LPDWORD lpdwPid)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
DWORD dwPid;
|
|
Packit |
90a5c9 |
SC_HANDLE schService;
|
|
Packit |
90a5c9 |
SC_HANDLE schSCManager;
|
|
Packit |
90a5c9 |
SERVICE_STATUS schSStatus;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
dwPid = 0;
|
|
Packit |
90a5c9 |
schSCManager = OpenSCManager(szComputerName, NULL,
|
|
Packit |
90a5c9 |
SC_MANAGER_CONNECT);
|
|
Packit |
90a5c9 |
if (!schSCManager) {
|
|
Packit |
90a5c9 |
return FALSE;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
schService = OpenService(schSCManager, szServiceName,
|
|
Packit |
90a5c9 |
SERVICE_QUERY_STATUS);
|
|
Packit |
90a5c9 |
if (schService != NULL)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
if (QueryServiceStatus(schService, &schSStatus))
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
dwPid = schSStatus.dwCurrentState;
|
|
Packit |
90a5c9 |
if (lpdwPid) {
|
|
Packit |
90a5c9 |
*lpdwPid = 1;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
CloseServiceHandle(schService);
|
|
Packit |
90a5c9 |
CloseServiceHandle(schSCManager);
|
|
Packit |
90a5c9 |
return dwPid == SERVICE_RUNNING ? TRUE : FALSE;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
else {
|
|
Packit |
90a5c9 |
g_bRescanServices = TRUE;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
CloseServiceHandle(schSCManager);
|
|
Packit |
90a5c9 |
return FALSE;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
BOOL FindRunningServices(void)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
int i = 0;
|
|
Packit |
90a5c9 |
DWORD dwPid;
|
|
Packit |
90a5c9 |
BOOL rv = FALSE;
|
|
Packit |
90a5c9 |
while (g_stServices[i].szServiceName != NULL)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
if (!IsServiceRunning(g_stServices[i].szServiceName,
|
|
Packit |
90a5c9 |
g_stServices[i].szComputerName, &dwPid)) {
|
|
Packit |
90a5c9 |
dwPid = 0;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
if (g_stServices[i].dwPid != dwPid) {
|
|
Packit |
90a5c9 |
rv = TRUE;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
g_stServices[i].dwPid = dwPid;
|
|
Packit |
90a5c9 |
++i;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
return rv;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
BOOL GetApacheServicesStatus()
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
TCHAR szKey[MAX_PATH];
|
|
Packit |
90a5c9 |
TCHAR achKey[MAX_PATH];
|
|
Packit |
90a5c9 |
TCHAR szImagePath[MAX_PATH];
|
|
Packit |
90a5c9 |
TCHAR szBuf[MAX_PATH];
|
|
Packit |
90a5c9 |
TCHAR szTmp[MAX_PATH];
|
|
Packit |
90a5c9 |
HKEY hKey, hSubKey, hKeyRemote;
|
|
Packit |
90a5c9 |
DWORD retCode, rv, dwKeyType;
|
|
Packit |
90a5c9 |
DWORD dwBufLen = MAX_PATH;
|
|
Packit |
90a5c9 |
int i, stPos = 0;
|
|
Packit |
90a5c9 |
int computers = 0;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
g_bRescanServices = FALSE;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
am_ClearServicesSt();
|
|
Packit |
90a5c9 |
while (g_stComputers[computers].szComputerName != NULL) {
|
|
Packit |
90a5c9 |
hKeyRemote = g_stComputers[computers].hRegistry;
|
|
Packit |
90a5c9 |
retCode = RegOpenKeyEx(hKeyRemote,
|
|
Packit |
90a5c9 |
_T("System\\CurrentControlSet\\Services\\"),
|
|
Packit |
90a5c9 |
0, KEY_READ, &hKey);
|
|
Packit |
90a5c9 |
if (retCode != ERROR_SUCCESS)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
ErrorMessage(NULL, FALSE);
|
|
Packit |
90a5c9 |
return FALSE;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
for (i = 0, retCode = ERROR_SUCCESS; retCode == ERROR_SUCCESS; i++)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
retCode = RegEnumKey(hKey, i, achKey, MAX_PATH);
|
|
Packit |
90a5c9 |
if (retCode == ERROR_SUCCESS)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
_tcscpy(szKey, _T("System\\CurrentControlSet\\Services\\"));
|
|
Packit |
90a5c9 |
_tcscat(szKey, achKey);
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
if (RegOpenKeyEx(hKeyRemote, szKey, 0,
|
|
Packit |
90a5c9 |
KEY_QUERY_VALUE, &hSubKey) == ERROR_SUCCESS)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
dwBufLen = MAX_PATH;
|
|
Packit |
90a5c9 |
rv = RegQueryValueEx(hSubKey, _T("ImagePath"), NULL,
|
|
Packit |
90a5c9 |
&dwKeyType, (LPBYTE)szImagePath, &dwBufLen);
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
if (rv == ERROR_SUCCESS
|
|
Packit |
90a5c9 |
&& (dwKeyType == REG_SZ
|
|
Packit |
90a5c9 |
|| dwKeyType == REG_EXPAND_SZ)
|
|
Packit |
90a5c9 |
&& dwBufLen)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
_tcscpy(szBuf, szImagePath);
|
|
Packit |
90a5c9 |
CharLower(szBuf);
|
|
Packit |
90a5c9 |
/* the service name could be httpd*.exe or Apache*.exe */
|
|
Packit |
90a5c9 |
if (((_tcsstr(szBuf, _T("\\apache")) != NULL)
|
|
Packit |
90a5c9 |
|| (_tcsstr(szBuf, _T("\\httpd")) != NULL))
|
|
Packit |
90a5c9 |
&& _tcsstr(szBuf, _T(".exe"))
|
|
Packit |
90a5c9 |
&& (_tcsstr(szBuf, _T("--ntservice")) != NULL
|
|
Packit |
90a5c9 |
|| _tcsstr(szBuf, _T("-k ")) != NULL))
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
g_stServices[stPos].szServiceName = _tcsdup(achKey);
|
|
Packit |
90a5c9 |
g_stServices[stPos].szImagePath = _tcsdup(szImagePath);
|
|
Packit |
90a5c9 |
g_stServices[stPos].szComputerName =
|
|
Packit |
90a5c9 |
_tcsdup(g_stComputers[computers].szComputerName);
|
|
Packit |
90a5c9 |
dwBufLen = MAX_PATH;
|
|
Packit |
90a5c9 |
if (RegQueryValueEx(hSubKey, _T("Description"), NULL,
|
|
Packit |
90a5c9 |
&dwKeyType, (LPBYTE)szBuf, &dwBufLen)
|
|
Packit |
90a5c9 |
== ERROR_SUCCESS) {
|
|
Packit |
90a5c9 |
g_stServices[stPos].szDescription = _tcsdup(szBuf);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
dwBufLen = MAX_PATH;
|
|
Packit |
90a5c9 |
if (RegQueryValueEx(hSubKey, _T("DisplayName"), NULL,
|
|
Packit |
90a5c9 |
&dwKeyType, (LPBYTE)szBuf, &dwBufLen)
|
|
Packit |
90a5c9 |
== ERROR_SUCCESS)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
if (_tcscmp(g_stComputers[computers]
|
|
Packit |
90a5c9 |
.szComputerName, g_szLocalHost) != 0)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
_tcscpy(szTmp, g_stComputers[computers]
|
|
Packit |
90a5c9 |
.szComputerName + 2);
|
|
Packit |
90a5c9 |
_tcscat(szTmp, _T("@"));
|
|
Packit |
90a5c9 |
_tcscat(szTmp, szBuf);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
else {
|
|
Packit |
90a5c9 |
_tcscpy(szTmp, szBuf);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
g_stServices[stPos].szDisplayName = _tcsdup(szTmp);
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
++stPos;
|
|
Packit |
90a5c9 |
if (stPos >= MAX_APACHE_SERVICES) {
|
|
Packit |
90a5c9 |
retCode = !ERROR_SUCCESS;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
RegCloseKey(hSubKey);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
++computers;
|
|
Packit |
90a5c9 |
RegCloseKey(hKey);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
FindRunningServices();
|
|
Packit |
90a5c9 |
return TRUE;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
LRESULT CALLBACK ConnectDlgProc(HWND hDlg, UINT message,
|
|
Packit |
90a5c9 |
WPARAM wParam, LPARAM lParam)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
TCHAR szCmp[MAX_COMPUTERNAME_LENGTH+4];
|
|
Packit |
90a5c9 |
switch (message)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
case WM_INITDIALOG:
|
|
Packit |
90a5c9 |
ShowWindow(hDlg, SW_HIDE);
|
|
Packit |
90a5c9 |
g_hwndConnectDlg = hDlg;
|
|
Packit |
90a5c9 |
CenterWindow(hDlg);
|
|
Packit |
90a5c9 |
ShowWindow(hDlg, SW_SHOW);
|
|
Packit |
90a5c9 |
SetFocus(GetDlgItem(hDlg, IDC_COMPUTER));
|
|
Packit |
90a5c9 |
return TRUE;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
case WM_COMMAND:
|
|
Packit |
90a5c9 |
switch (LOWORD(wParam))
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
case IDOK:
|
|
Packit |
90a5c9 |
memset(szCmp, 0, sizeof(szCmp));
|
|
Packit |
90a5c9 |
_tcscpy(szCmp, _T("\\\\"));
|
|
Packit |
90a5c9 |
SendMessage(GetDlgItem(hDlg, IDC_COMPUTER), WM_GETTEXT,
|
|
Packit |
90a5c9 |
(WPARAM) MAX_COMPUTERNAME_LENGTH,
|
|
Packit |
90a5c9 |
(LPARAM) szCmp+2);
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
_tcsupr(szCmp);
|
|
Packit |
90a5c9 |
if (_tcslen(szCmp) < 3) {
|
|
Packit |
90a5c9 |
EndDialog(hDlg, TRUE);
|
|
Packit |
90a5c9 |
return TRUE;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
am_ConnectComputer(szCmp);
|
|
Packit |
90a5c9 |
SendMessage(g_hwndMain, WM_TIMER, WM_TIMER_RESCAN, 0);
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
case IDCANCEL:
|
|
Packit |
90a5c9 |
EndDialog(hDlg, TRUE);
|
|
Packit |
90a5c9 |
return TRUE;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
case IDC_LBROWSE:
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
BROWSEINFO bi;
|
|
Packit |
90a5c9 |
ITEMIDLIST *il;
|
|
Packit |
90a5c9 |
LPMALLOC pMalloc;
|
|
Packit |
90a5c9 |
memset(&bi, 0, sizeof(BROWSEINFO));
|
|
Packit |
90a5c9 |
SHGetSpecialFolderLocation(hDlg, CSIDL_NETWORK, &il;;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
bi.lpszTitle = _T("ApacheMonitor :\nSelect Network Computer!");
|
|
Packit |
90a5c9 |
bi.pszDisplayName = szCmp;
|
|
Packit |
90a5c9 |
bi.hwndOwner = hDlg;
|
|
Packit |
90a5c9 |
bi.ulFlags = BIF_BROWSEFORCOMPUTER;
|
|
Packit |
90a5c9 |
bi.lpfn = NULL;
|
|
Packit |
90a5c9 |
bi.lParam = 0;
|
|
Packit |
90a5c9 |
bi.iImage = 0;
|
|
Packit |
90a5c9 |
bi.pidlRoot = il;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
if (SHBrowseForFolder(&bi) != NULL) {
|
|
Packit |
90a5c9 |
SendMessage(GetDlgItem(hDlg, IDC_COMPUTER),
|
|
Packit |
90a5c9 |
WM_SETTEXT,
|
|
Packit |
90a5c9 |
(WPARAM) NULL, (LPARAM) szCmp);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
if (SUCCEEDED(SHGetMalloc(&pMalloc))) {
|
|
Packit |
90a5c9 |
pMalloc->lpVtbl->Free(pMalloc, il);
|
|
Packit |
90a5c9 |
pMalloc->lpVtbl->Release(pMalloc);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
return TRUE;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
break;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
case WM_QUIT:
|
|
Packit |
90a5c9 |
case WM_CLOSE:
|
|
Packit |
90a5c9 |
EndDialog(hDlg, TRUE);
|
|
Packit |
90a5c9 |
return TRUE;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
default:
|
|
Packit |
90a5c9 |
return FALSE;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
return FALSE;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
LRESULT CALLBACK ServiceDlgProc(HWND hDlg, UINT message,
|
|
Packit |
90a5c9 |
WPARAM wParam, LPARAM lParam)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
TCHAR szBuf[MAX_PATH];
|
|
Packit |
90a5c9 |
HWND hListBox;
|
|
Packit |
90a5c9 |
static HWND hStatusBar;
|
|
Packit |
90a5c9 |
TEXTMETRIC tm;
|
|
Packit |
90a5c9 |
int i, y;
|
|
Packit |
90a5c9 |
HDC hdcMem;
|
|
Packit |
90a5c9 |
RECT rcBitmap;
|
|
Packit |
90a5c9 |
LRESULT nItem;
|
|
Packit |
90a5c9 |
LPMEASUREITEMSTRUCT lpmis;
|
|
Packit |
90a5c9 |
LPDRAWITEMSTRUCT lpdis;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
memset(szBuf, 0, sizeof(szBuf));
|
|
Packit |
90a5c9 |
switch (message)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
case WM_INITDIALOG:
|
|
Packit |
90a5c9 |
ShowWindow(hDlg, SW_HIDE);
|
|
Packit |
90a5c9 |
g_hwndServiceDlg = hDlg;
|
|
Packit |
90a5c9 |
SetWindowText(hDlg, g_szTitle);
|
|
Packit |
90a5c9 |
Button_Enable(GetDlgItem(hDlg, IDC_SSTART), FALSE);
|
|
Packit |
90a5c9 |
Button_Enable(GetDlgItem(hDlg, IDC_SSTOP), FALSE);
|
|
Packit |
90a5c9 |
Button_Enable(GetDlgItem(hDlg, IDC_SRESTART), FALSE);
|
|
Packit |
90a5c9 |
Button_Enable(GetDlgItem(hDlg, IDC_SDISCONN), FALSE);
|
|
Packit |
90a5c9 |
SetWindowText(GetDlgItem(hDlg, IDC_SSTART),
|
|
Packit |
90a5c9 |
g_lpMsg[IDS_MSG_SSTART - IDS_MSG_FIRST]);
|
|
Packit |
90a5c9 |
SetWindowText(GetDlgItem(hDlg, IDC_SSTOP),
|
|
Packit |
90a5c9 |
g_lpMsg[IDS_MSG_SSTOP - IDS_MSG_FIRST]);
|
|
Packit |
90a5c9 |
SetWindowText(GetDlgItem(hDlg, IDC_SRESTART),
|
|
Packit |
90a5c9 |
g_lpMsg[IDS_MSG_SRESTART - IDS_MSG_FIRST]);
|
|
Packit |
90a5c9 |
SetWindowText(GetDlgItem(hDlg, IDC_SMANAGER),
|
|
Packit |
90a5c9 |
g_lpMsg[IDS_MSG_SERVICES - IDS_MSG_FIRST]);
|
|
Packit |
90a5c9 |
SetWindowText(GetDlgItem(hDlg, IDC_SCONNECT),
|
|
Packit |
90a5c9 |
g_lpMsg[IDS_MSG_CONNECT - IDS_MSG_FIRST]);
|
|
Packit |
90a5c9 |
SetWindowText(GetDlgItem(hDlg, IDCANCEL),
|
|
Packit |
90a5c9 |
g_lpMsg[IDS_MSG_OK - IDS_MSG_FIRST]);
|
|
Packit |
90a5c9 |
hListBox = GetDlgItem(hDlg, IDL_SERVICES);
|
|
Packit |
90a5c9 |
g_hwndStdoutList = GetDlgItem(hDlg, IDL_STDOUT);
|
|
Packit |
90a5c9 |
hStatusBar = CreateStatusWindow(0x0800 /* SBT_TOOLTIPS */
|
|
Packit |
90a5c9 |
| WS_CHILD | WS_VISIBLE,
|
|
Packit |
90a5c9 |
_T(""), hDlg, IDC_STATBAR);
|
|
Packit |
90a5c9 |
if (GetApacheServicesStatus())
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
i = 0;
|
|
Packit |
90a5c9 |
while (g_stServices[i].szServiceName != NULL)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
addListBoxItem(hListBox, g_stServices[i].szDisplayName,
|
|
Packit |
90a5c9 |
g_stServices[i].dwPid == 0 ? g_hBmpStop
|
|
Packit |
90a5c9 |
: g_hBmpStart);
|
|
Packit |
90a5c9 |
++i;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
CenterWindow(hDlg);
|
|
Packit |
90a5c9 |
ShowWindow(hDlg, SW_SHOW);
|
|
Packit |
90a5c9 |
SetFocus(hListBox);
|
|
Packit |
90a5c9 |
SendMessage(hListBox, LB_SETCURSEL, 0, 0);
|
|
Packit |
90a5c9 |
return TRUE;
|
|
Packit |
90a5c9 |
break;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
case WM_MANAGEMESSAGE:
|
|
Packit |
90a5c9 |
ApacheManageService(g_stServices[LOWORD(wParam)].szServiceName,
|
|
Packit |
90a5c9 |
g_stServices[LOWORD(wParam)].szImagePath,
|
|
Packit |
90a5c9 |
g_stServices[LOWORD(wParam)].szComputerName,
|
|
Packit |
90a5c9 |
LOWORD(lParam));
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
return TRUE;
|
|
Packit |
90a5c9 |
break;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
case WM_UPDATEMESSAGE:
|
|
Packit |
90a5c9 |
hListBox = GetDlgItem(hDlg, IDL_SERVICES);
|
|
Packit |
90a5c9 |
SendMessage(hListBox, LB_RESETCONTENT, 0, 0);
|
|
Packit |
90a5c9 |
SendMessage(hStatusBar, SB_SETTEXT, 0, (LPARAM)_T(""));
|
|
Packit |
90a5c9 |
Button_Enable(GetDlgItem(hDlg, IDC_SSTART), FALSE);
|
|
Packit |
90a5c9 |
Button_Enable(GetDlgItem(hDlg, IDC_SSTOP), FALSE);
|
|
Packit |
90a5c9 |
Button_Enable(GetDlgItem(hDlg, IDC_SRESTART), FALSE);
|
|
Packit |
90a5c9 |
Button_Enable(GetDlgItem(hDlg, IDC_SDISCONN), FALSE);
|
|
Packit |
90a5c9 |
i = 0;
|
|
Packit |
90a5c9 |
while (g_stServices[i].szServiceName != NULL)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
addListBoxItem(hListBox, g_stServices[i].szDisplayName,
|
|
Packit |
90a5c9 |
g_stServices[i].dwPid == 0 ? g_hBmpStop : g_hBmpStart);
|
|
Packit |
90a5c9 |
++i;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
SendMessage(hListBox, LB_SETCURSEL, 0, 0);
|
|
Packit |
90a5c9 |
/* Dirty hack to bring the window to the foreground */
|
|
Packit |
90a5c9 |
SetWindowPos(hDlg, HWND_TOPMOST, 0, 0, 0, 0,
|
|
Packit |
90a5c9 |
SWP_NOSIZE | SWP_NOMOVE | SWP_SHOWWINDOW);
|
|
Packit |
90a5c9 |
SetWindowPos(hDlg, HWND_NOTOPMOST, 0, 0, 0, 0,
|
|
Packit |
90a5c9 |
SWP_NOSIZE | SWP_NOMOVE | SWP_SHOWWINDOW);
|
|
Packit |
90a5c9 |
SetFocus(hListBox);
|
|
Packit |
90a5c9 |
return TRUE;
|
|
Packit |
90a5c9 |
break;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
case WM_MEASUREITEM:
|
|
Packit |
90a5c9 |
lpmis = (LPMEASUREITEMSTRUCT) lParam;
|
|
Packit |
90a5c9 |
lpmis->itemHeight = YBITMAP;
|
|
Packit |
90a5c9 |
return TRUE;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
case WM_SETCURSOR:
|
|
Packit |
90a5c9 |
if (g_bConsoleRun) {
|
|
Packit |
90a5c9 |
SetCursor(g_hCursorHourglass);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
else {
|
|
Packit |
90a5c9 |
SetCursor(g_hCursorArrow);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
return TRUE;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
case WM_DRAWITEM:
|
|
Packit |
90a5c9 |
lpdis = (LPDRAWITEMSTRUCT) lParam;
|
|
Packit |
90a5c9 |
if (lpdis->itemID == -1) {
|
|
Packit |
90a5c9 |
break;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
switch (lpdis->itemAction)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
case ODA_FOCUS:
|
|
Packit |
90a5c9 |
case ODA_SELECT:
|
|
Packit |
90a5c9 |
case ODA_DRAWENTIRE:
|
|
Packit |
90a5c9 |
g_hBmpPicture = (HBITMAP)SendMessage(lpdis->hwndItem,
|
|
Packit |
90a5c9 |
LB_GETITEMDATA,
|
|
Packit |
90a5c9 |
lpdis->itemID, (LPARAM) 0);
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
hdcMem = CreateCompatibleDC(lpdis->hDC);
|
|
Packit |
90a5c9 |
g_hBmpOld = SelectObject(hdcMem, g_hBmpPicture);
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
BitBlt(lpdis->hDC, lpdis->rcItem.left, lpdis->rcItem.top,
|
|
Packit |
90a5c9 |
lpdis->rcItem.right - lpdis->rcItem.left,
|
|
Packit |
90a5c9 |
lpdis->rcItem.bottom - lpdis->rcItem.top,
|
|
Packit |
90a5c9 |
hdcMem, 0, 0, SRCCOPY);
|
|
Packit |
90a5c9 |
SendMessage(lpdis->hwndItem, LB_GETTEXT,
|
|
Packit |
90a5c9 |
lpdis->itemID, (LPARAM) szBuf);
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
GetTextMetrics(lpdis->hDC, &tm;;
|
|
Packit |
90a5c9 |
y = (lpdis->rcItem.bottom + lpdis->rcItem.top - tm.tmHeight) / 2;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
SelectObject(hdcMem, g_hBmpOld);
|
|
Packit |
90a5c9 |
DeleteDC(hdcMem);
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
rcBitmap.left = lpdis->rcItem.left + XBITMAP + 2;
|
|
Packit |
90a5c9 |
rcBitmap.top = lpdis->rcItem.top;
|
|
Packit |
90a5c9 |
rcBitmap.right = lpdis->rcItem.right;
|
|
Packit |
90a5c9 |
rcBitmap.bottom = lpdis->rcItem.top + YBITMAP;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
if (lpdis->itemState & ODS_SELECTED)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
if (g_hBmpPicture == g_hBmpStop)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
Button_Enable(GetDlgItem(hDlg, IDC_SSTART), TRUE);
|
|
Packit |
90a5c9 |
Button_SetStyle(GetDlgItem(hDlg, IDC_SSTART), BS_DEFPUSHBUTTON, TRUE);
|
|
Packit |
90a5c9 |
Button_Enable(GetDlgItem(hDlg, IDC_SSTOP), FALSE);
|
|
Packit |
90a5c9 |
Button_Enable(GetDlgItem(hDlg, IDC_SRESTART), FALSE);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
else if (g_hBmpPicture == g_hBmpStart)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
Button_Enable(GetDlgItem(hDlg, IDC_SSTART), FALSE);
|
|
Packit |
90a5c9 |
Button_Enable(GetDlgItem(hDlg, IDC_SSTOP), TRUE);
|
|
Packit |
90a5c9 |
Button_SetStyle(GetDlgItem(hDlg, IDC_SSTOP), BS_DEFPUSHBUTTON, TRUE);
|
|
Packit |
90a5c9 |
Button_Enable(GetDlgItem(hDlg, IDC_SRESTART), TRUE);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
else {
|
|
Packit |
90a5c9 |
Button_Enable(GetDlgItem(hDlg, IDC_SSTART), FALSE);
|
|
Packit |
90a5c9 |
Button_Enable(GetDlgItem(hDlg, IDC_SSTOP), FALSE);
|
|
Packit |
90a5c9 |
Button_Enable(GetDlgItem(hDlg, IDC_SRESTART), FALSE);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
if (_tcscmp(g_stServices[lpdis->itemID].szComputerName,
|
|
Packit |
90a5c9 |
g_szLocalHost) == 0) {
|
|
Packit |
90a5c9 |
Button_Enable(GetDlgItem(hDlg, IDC_SDISCONN), FALSE);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
else {
|
|
Packit |
90a5c9 |
Button_Enable(GetDlgItem(hDlg, IDC_SDISCONN), TRUE);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
if (g_stServices[lpdis->itemID].szDescription) {
|
|
Packit |
90a5c9 |
SendMessage(hStatusBar, SB_SETTEXT, 0,
|
|
Packit |
90a5c9 |
(LPARAM)g_stServices[lpdis->itemID].szDescription);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
else {
|
|
Packit |
90a5c9 |
SendMessage(hStatusBar, SB_SETTEXT, 0, (LPARAM)_T(""));
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
if (lpdis->itemState & ODS_FOCUS) {
|
|
Packit |
90a5c9 |
SetTextColor(lpdis->hDC, GetSysColor(COLOR_HIGHLIGHTTEXT));
|
|
Packit |
90a5c9 |
SetBkColor(lpdis->hDC, GetSysColor(COLOR_HIGHLIGHT));
|
|
Packit |
90a5c9 |
FillRect(lpdis->hDC, &rcBitmap, (HBRUSH)(COLOR_HIGHLIGHT+1));
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
else {
|
|
Packit |
90a5c9 |
SetTextColor(lpdis->hDC, GetSysColor(COLOR_INACTIVECAPTIONTEXT));
|
|
Packit |
90a5c9 |
SetBkColor(lpdis->hDC, GetSysColor(COLOR_INACTIVECAPTION));
|
|
Packit |
90a5c9 |
FillRect(lpdis->hDC, &rcBitmap, (HBRUSH)(COLOR_INACTIVECAPTION+1));
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
else
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
SetTextColor(lpdis->hDC, GetSysColor(COLOR_MENUTEXT));
|
|
Packit |
90a5c9 |
SetBkColor(lpdis->hDC, GetSysColor(COLOR_WINDOW));
|
|
Packit |
90a5c9 |
FillRect(lpdis->hDC, &rcBitmap, (HBRUSH)(COLOR_WINDOW+1));
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
TextOut(lpdis->hDC, XBITMAP + 6, y, szBuf, (int)_tcslen(szBuf));
|
|
Packit |
90a5c9 |
break;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
return TRUE;
|
|
Packit |
90a5c9 |
case WM_COMMAND:
|
|
Packit |
90a5c9 |
switch (LOWORD(wParam))
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
case IDL_SERVICES:
|
|
Packit |
90a5c9 |
switch (HIWORD(wParam))
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
case LBN_DBLCLK:
|
|
Packit |
90a5c9 |
/* if started then stop, if stopped then start */
|
|
Packit |
90a5c9 |
hListBox = GetDlgItem(hDlg, IDL_SERVICES);
|
|
Packit |
90a5c9 |
nItem = SendMessage(hListBox, LB_GETCURSEL, 0, 0);
|
|
Packit |
90a5c9 |
if (nItem != LB_ERR)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
g_hBmpPicture = (HBITMAP)SendMessage(hListBox,
|
|
Packit |
90a5c9 |
LB_GETITEMDATA,
|
|
Packit |
90a5c9 |
nItem, (LPARAM) 0);
|
|
Packit |
90a5c9 |
if (g_hBmpPicture == g_hBmpStop) {
|
|
Packit |
90a5c9 |
SendMessage(hDlg, WM_MANAGEMESSAGE, nItem,
|
|
Packit |
90a5c9 |
SERVICE_CONTROL_CONTINUE);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
else {
|
|
Packit |
90a5c9 |
SendMessage(hDlg, WM_MANAGEMESSAGE, nItem,
|
|
Packit |
90a5c9 |
SERVICE_CONTROL_STOP);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
return TRUE;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
break;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
case IDCANCEL:
|
|
Packit |
90a5c9 |
EndDialog(hDlg, TRUE);
|
|
Packit |
90a5c9 |
return TRUE;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
case IDC_SSTART:
|
|
Packit |
90a5c9 |
Button_Enable(GetDlgItem(hDlg, IDC_SSTART), FALSE);
|
|
Packit |
90a5c9 |
hListBox = GetDlgItem(hDlg, IDL_SERVICES);
|
|
Packit |
90a5c9 |
nItem = SendMessage(hListBox, LB_GETCURSEL, 0, 0);
|
|
Packit |
90a5c9 |
if (nItem != LB_ERR) {
|
|
Packit |
90a5c9 |
SendMessage(hDlg, WM_MANAGEMESSAGE, nItem,
|
|
Packit |
90a5c9 |
SERVICE_CONTROL_CONTINUE);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
Button_Enable(GetDlgItem(hDlg, IDC_SSTART), TRUE);
|
|
Packit |
90a5c9 |
return TRUE;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
case IDC_SSTOP:
|
|
Packit |
90a5c9 |
Button_Enable(GetDlgItem(hDlg, IDC_SSTOP), FALSE);
|
|
Packit |
90a5c9 |
hListBox = GetDlgItem(hDlg, IDL_SERVICES);
|
|
Packit |
90a5c9 |
nItem = SendMessage(hListBox, LB_GETCURSEL, 0, 0);
|
|
Packit |
90a5c9 |
if (nItem != LB_ERR) {
|
|
Packit |
90a5c9 |
SendMessage(hDlg, WM_MANAGEMESSAGE, nItem,
|
|
Packit |
90a5c9 |
SERVICE_CONTROL_STOP);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
Button_Enable(GetDlgItem(hDlg, IDC_SSTOP), TRUE);
|
|
Packit |
90a5c9 |
return TRUE;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
case IDC_SRESTART:
|
|
Packit |
90a5c9 |
Button_Enable(GetDlgItem(hDlg, IDC_SRESTART), FALSE);
|
|
Packit |
90a5c9 |
hListBox = GetDlgItem(hDlg, IDL_SERVICES);
|
|
Packit |
90a5c9 |
nItem = SendMessage(hListBox, LB_GETCURSEL, 0, 0);
|
|
Packit |
90a5c9 |
if (nItem != LB_ERR) {
|
|
Packit |
90a5c9 |
SendMessage(hDlg, WM_MANAGEMESSAGE, nItem,
|
|
Packit |
90a5c9 |
SERVICE_APACHE_RESTART);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
Button_Enable(GetDlgItem(hDlg, IDC_SRESTART), TRUE);
|
|
Packit |
90a5c9 |
return TRUE;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
case IDC_SMANAGER:
|
|
Packit |
90a5c9 |
if (g_dwOSVersion >= OS_VERSION_WIN2K) {
|
|
Packit |
90a5c9 |
ShellExecute(hDlg, _T("open"), _T("services.msc"), _T("/s"),
|
|
Packit |
90a5c9 |
NULL, SW_NORMAL);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
else {
|
|
Packit |
90a5c9 |
WinExec("Control.exe SrvMgr.cpl Services", SW_NORMAL);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
return TRUE;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
case IDC_SCONNECT:
|
|
Packit |
90a5c9 |
DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_DLGCONNECT),
|
|
Packit |
90a5c9 |
hDlg, (DLGPROC)ConnectDlgProc);
|
|
Packit |
90a5c9 |
return TRUE;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
case IDC_SDISCONN:
|
|
Packit |
90a5c9 |
hListBox = GetDlgItem(hDlg, IDL_SERVICES);
|
|
Packit |
90a5c9 |
nItem = SendMessage(hListBox, LB_GETCURSEL, 0, 0);
|
|
Packit |
90a5c9 |
if (nItem != LB_ERR) {
|
|
Packit |
90a5c9 |
am_DisconnectComputer(g_stServices[nItem].szComputerName);
|
|
Packit |
90a5c9 |
SendMessage(g_hwndMain, WM_TIMER, WM_TIMER_RESCAN, 0);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
return TRUE;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
break;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
case WM_SIZE:
|
|
Packit |
90a5c9 |
switch (LOWORD(wParam))
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
case SIZE_MINIMIZED:
|
|
Packit |
90a5c9 |
EndDialog(hDlg, TRUE);
|
|
Packit |
90a5c9 |
return TRUE;
|
|
Packit |
90a5c9 |
break;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
break;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
case WM_QUIT:
|
|
Packit |
90a5c9 |
case WM_CLOSE:
|
|
Packit |
90a5c9 |
EndDialog(hDlg, TRUE);
|
|
Packit |
90a5c9 |
return TRUE;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
default:
|
|
Packit |
90a5c9 |
return FALSE;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
return FALSE;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
LRESULT CALLBACK WndProc(HWND hWnd, UINT message,
|
|
Packit |
90a5c9 |
WPARAM wParam, LPARAM lParam)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
if (message == g_bUiTaskbarCreated)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
/* restore the tray icon on shell restart */
|
|
Packit |
90a5c9 |
ShowNotifyIcon(hWnd, NIM_ADD);
|
|
Packit |
90a5c9 |
return DefWindowProc(hWnd, message, wParam, lParam);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
switch (message)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
case WM_CREATE:
|
|
Packit |
90a5c9 |
GetApacheServicesStatus();
|
|
Packit |
90a5c9 |
ShowNotifyIcon(hWnd, NIM_ADD);
|
|
Packit |
90a5c9 |
SetTimer(hWnd, WM_TIMER_REFRESH, REFRESH_TIME, NULL);
|
|
Packit |
90a5c9 |
SetTimer(hWnd, WM_TIMER_RESCAN, RESCAN_TIME, NULL);
|
|
Packit |
90a5c9 |
break;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
case WM_TIMER:
|
|
Packit |
90a5c9 |
switch (wParam)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
case WM_TIMER_RESCAN:
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
int nPrev = 0, nNew = 0;
|
|
Packit |
90a5c9 |
EnterCriticalSection(&g_stcSection);
|
|
Packit |
90a5c9 |
if (FindRunningServices() || g_bRescanServices)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
ShowNotifyIcon(hWnd, NIM_MODIFY);
|
|
Packit |
90a5c9 |
if (g_hwndServiceDlg)
|
|
Packit |
90a5c9 |
PostMessage(g_hwndServiceDlg, WM_UPDATEMESSAGE, 0, 0);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
/* check if services list changed */
|
|
Packit |
90a5c9 |
while (g_stServices[nPrev].szServiceName != NULL)
|
|
Packit |
90a5c9 |
++nPrev;
|
|
Packit |
90a5c9 |
GetApacheServicesStatus();
|
|
Packit |
90a5c9 |
while (g_stServices[nNew].szServiceName != NULL)
|
|
Packit |
90a5c9 |
++nNew;
|
|
Packit |
90a5c9 |
if (nPrev != nNew)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
ShowNotifyIcon(hWnd, NIM_MODIFY);
|
|
Packit |
90a5c9 |
if (g_hwndServiceDlg) {
|
|
Packit |
90a5c9 |
PostMessage(g_hwndServiceDlg, WM_UPDATEMESSAGE, 0, 0);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
LeaveCriticalSection(&g_stcSection);
|
|
Packit |
90a5c9 |
break;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
case WM_TIMER_REFRESH:
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
EnterCriticalSection(&g_stcSection);
|
|
Packit |
90a5c9 |
if (g_bRescanServices)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
GetApacheServicesStatus();
|
|
Packit |
90a5c9 |
ShowNotifyIcon(hWnd, NIM_MODIFY);
|
|
Packit |
90a5c9 |
if (g_hwndServiceDlg) {
|
|
Packit |
90a5c9 |
PostMessage(g_hwndServiceDlg, WM_UPDATEMESSAGE, 0, 0);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
else if (FindRunningServices())
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
ShowNotifyIcon(hWnd, NIM_MODIFY);
|
|
Packit |
90a5c9 |
if (g_hwndServiceDlg) {
|
|
Packit |
90a5c9 |
PostMessage(g_hwndServiceDlg, WM_UPDATEMESSAGE, 0, 0);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
LeaveCriticalSection(&g_stcSection);
|
|
Packit |
90a5c9 |
break;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
break;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
case WM_QUIT:
|
|
Packit |
90a5c9 |
ShowNotifyIcon(hWnd, NIM_DELETE);
|
|
Packit |
90a5c9 |
break;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
case WM_TRAYMESSAGE:
|
|
Packit |
90a5c9 |
switch (lParam)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
case WM_LBUTTONDBLCLK:
|
|
Packit |
90a5c9 |
if (!g_bDlgServiceOn)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
g_bDlgServiceOn = TRUE;
|
|
Packit |
90a5c9 |
DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_DLGSERVICES),
|
|
Packit |
90a5c9 |
hWnd, (DLGPROC)ServiceDlgProc);
|
|
Packit |
90a5c9 |
g_bDlgServiceOn = FALSE;
|
|
Packit |
90a5c9 |
g_hwndServiceDlg = NULL;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
else if (IsWindow(g_hwndServiceDlg))
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
/* Dirty hack to bring the window to the foreground */
|
|
Packit |
90a5c9 |
SetWindowPos(g_hwndServiceDlg, HWND_TOPMOST, 0, 0, 0, 0,
|
|
Packit |
90a5c9 |
SWP_NOSIZE | SWP_NOMOVE | SWP_SHOWWINDOW);
|
|
Packit |
90a5c9 |
SetWindowPos(g_hwndServiceDlg, HWND_NOTOPMOST, 0, 0, 0, 0,
|
|
Packit |
90a5c9 |
SWP_NOSIZE | SWP_NOMOVE | SWP_SHOWWINDOW);
|
|
Packit |
90a5c9 |
SetFocus(g_hwndServiceDlg);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
break;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
case WM_LBUTTONUP:
|
|
Packit |
90a5c9 |
ShowTryServicesMenu(hWnd);
|
|
Packit |
90a5c9 |
break;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
case WM_RBUTTONUP:
|
|
Packit |
90a5c9 |
ShowTryPopupMenu(hWnd);
|
|
Packit |
90a5c9 |
break;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
break;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
case WM_COMMAND:
|
|
Packit |
90a5c9 |
if ((LOWORD(wParam) & IDM_SM_START) == IDM_SM_START)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
ApacheManageService(g_stServices[LOWORD(wParam)
|
|
Packit |
90a5c9 |
- IDM_SM_START].szServiceName,
|
|
Packit |
90a5c9 |
g_stServices[LOWORD(wParam)
|
|
Packit |
90a5c9 |
- IDM_SM_START].szImagePath,
|
|
Packit |
90a5c9 |
g_stServices[LOWORD(wParam)
|
|
Packit |
90a5c9 |
- IDM_SM_START].szComputerName,
|
|
Packit |
90a5c9 |
SERVICE_CONTROL_CONTINUE);
|
|
Packit |
90a5c9 |
return TRUE;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
else if ((LOWORD(wParam) & IDM_SM_STOP) == IDM_SM_STOP)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
ApacheManageService(g_stServices[LOWORD(wParam)
|
|
Packit |
90a5c9 |
- IDM_SM_STOP].szServiceName,
|
|
Packit |
90a5c9 |
g_stServices[LOWORD(wParam)
|
|
Packit |
90a5c9 |
- IDM_SM_STOP].szImagePath,
|
|
Packit |
90a5c9 |
g_stServices[LOWORD(wParam)
|
|
Packit |
90a5c9 |
- IDM_SM_STOP].szComputerName,
|
|
Packit |
90a5c9 |
SERVICE_CONTROL_STOP);
|
|
Packit |
90a5c9 |
return TRUE;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
else if ((LOWORD(wParam) & IDM_SM_RESTART) == IDM_SM_RESTART)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
ApacheManageService(g_stServices[LOWORD(wParam)
|
|
Packit |
90a5c9 |
- IDM_SM_RESTART].szServiceName,
|
|
Packit |
90a5c9 |
g_stServices[LOWORD(wParam)
|
|
Packit |
90a5c9 |
- IDM_SM_RESTART].szImagePath,
|
|
Packit |
90a5c9 |
g_stServices[LOWORD(wParam)
|
|
Packit |
90a5c9 |
- IDM_SM_RESTART].szComputerName,
|
|
Packit |
90a5c9 |
SERVICE_APACHE_RESTART);
|
|
Packit |
90a5c9 |
return TRUE;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
switch (LOWORD(wParam))
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
case IDM_RESTORE:
|
|
Packit |
90a5c9 |
if (!g_bDlgServiceOn)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
g_bDlgServiceOn = TRUE;
|
|
Packit |
90a5c9 |
DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_DLGSERVICES),
|
|
Packit |
90a5c9 |
hWnd, (DLGPROC)ServiceDlgProc);
|
|
Packit |
90a5c9 |
g_bDlgServiceOn = FALSE;
|
|
Packit |
90a5c9 |
g_hwndServiceDlg = NULL;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
else if (IsWindow(g_hwndServiceDlg)) {
|
|
Packit |
90a5c9 |
SetFocus(g_hwndServiceDlg);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
break;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
case IDC_SMANAGER:
|
|
Packit |
90a5c9 |
if (g_dwOSVersion >= OS_VERSION_WIN2K) {
|
|
Packit |
90a5c9 |
ShellExecute(NULL, _T("open"), _T("services.msc"), _T("/s"),
|
|
Packit |
90a5c9 |
NULL, SW_NORMAL);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
else {
|
|
Packit |
90a5c9 |
WinExec("Control.exe SrvMgr.cpl Services", SW_NORMAL);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
return TRUE;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
case IDM_EXIT:
|
|
Packit |
90a5c9 |
ShowNotifyIcon(hWnd, NIM_DELETE);
|
|
Packit |
90a5c9 |
PostQuitMessage(0);
|
|
Packit |
90a5c9 |
return TRUE;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
default:
|
|
Packit |
90a5c9 |
return DefWindowProc(hWnd, message, wParam, lParam);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
return FALSE;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
static int KillAWindow(HWND appwindow)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
HANDLE appproc;
|
|
Packit |
90a5c9 |
DWORD procid;
|
|
Packit |
90a5c9 |
BOOL postres;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
SetLastError(0);
|
|
Packit |
90a5c9 |
GetWindowThreadProcessId(appwindow, &procid);
|
|
Packit |
90a5c9 |
if (GetLastError())
|
|
Packit |
90a5c9 |
return(2);
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
appproc = OpenProcess(SYNCHRONIZE, 0, procid);
|
|
Packit |
90a5c9 |
postres = PostMessage(appwindow, WM_COMMAND, IDM_EXIT, 0);
|
|
Packit |
90a5c9 |
if (appproc && postres) {
|
|
Packit |
90a5c9 |
if (WaitForSingleObject(appproc, 10 /* seconds */ * 1000)
|
|
Packit |
90a5c9 |
== WAIT_OBJECT_0) {
|
|
Packit |
90a5c9 |
CloseHandle(appproc);
|
|
Packit |
90a5c9 |
return (0);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
if (appproc)
|
|
Packit |
90a5c9 |
CloseHandle(appproc);
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
if ((appproc = OpenProcess(PROCESS_TERMINATE, 0, procid)) != NULL) {
|
|
Packit |
90a5c9 |
if (TerminateProcess(appproc, 0)) {
|
|
Packit |
90a5c9 |
CloseHandle(appproc);
|
|
Packit |
90a5c9 |
return (0);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
CloseHandle(appproc);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
/* Perhaps we were short of permissions? */
|
|
Packit |
90a5c9 |
return (2);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
static int KillAllMonitors(void)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
HWND appwindow;
|
|
Packit |
90a5c9 |
int exitcode = 0;
|
|
Packit |
90a5c9 |
PWTS_PROCESS_INFO tsProcs;
|
|
Packit |
90a5c9 |
DWORD tsProcCount, i;
|
|
Packit |
90a5c9 |
DWORD thisProcId;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
/* This is graceful, close our own Window, clearing the icon */
|
|
Packit |
90a5c9 |
if ((appwindow = FindWindow(g_szWindowClass, g_szTitle)) != NULL)
|
|
Packit |
90a5c9 |
exitcode = KillAWindow(appwindow);
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
if (g_dwOSVersion < OS_VERSION_WIN2K)
|
|
Packit |
90a5c9 |
return exitcode;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
thisProcId = GetCurrentProcessId();
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
if (!WTSEnumerateProcesses(WTS_CURRENT_SERVER_HANDLE, 0, 1,
|
|
Packit |
90a5c9 |
&tsProcs, &tsProcCount))
|
|
Packit |
90a5c9 |
return exitcode;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
/* This is ungraceful; close other Windows, with a lingering icon.
|
|
Packit |
90a5c9 |
* Since on terminal server it's not possible to post the message
|
|
Packit |
90a5c9 |
* to exit across sessions, we have to suffer this side effect
|
|
Packit |
90a5c9 |
* of a taskbar 'icon' which will evaporate the next time that
|
|
Packit |
90a5c9 |
* the user hovers over it or when the taskbar area is updated.
|
|
Packit |
90a5c9 |
*/
|
|
Packit |
90a5c9 |
for (i = 0; i < tsProcCount; ++i) {
|
|
Packit |
90a5c9 |
if (_tcscmp(tsProcs[i].pProcessName, _T(AM_STRINGIFY(BIN_NAME))) == 0
|
|
Packit |
90a5c9 |
&& tsProcs[i].ProcessId != thisProcId)
|
|
Packit |
90a5c9 |
WTSTerminateProcess(WTS_CURRENT_SERVER_HANDLE,
|
|
Packit |
90a5c9 |
tsProcs[i].ProcessId, 1);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
WTSFreeMemory(tsProcs);
|
|
Packit |
90a5c9 |
return exitcode;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
/* Create main invisible window */
|
|
Packit |
90a5c9 |
HWND CreateMainWindow(HINSTANCE hInstance)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
HWND hWnd = NULL;
|
|
Packit |
90a5c9 |
WNDCLASSEX wcex;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
wcex.cbSize = sizeof(WNDCLASSEX);
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
wcex.style = CS_HREDRAW | CS_VREDRAW;
|
|
Packit |
90a5c9 |
wcex.lpfnWndProc = (WNDPROC)WndProc;
|
|
Packit |
90a5c9 |
wcex.cbClsExtra = 0;
|
|
Packit |
90a5c9 |
wcex.cbWndExtra = 0;
|
|
Packit |
90a5c9 |
wcex.hInstance = hInstance;
|
|
Packit |
90a5c9 |
wcex.hIcon = (HICON)LoadImage(hInstance, MAKEINTRESOURCE(IDI_APSRVMON),
|
|
Packit |
90a5c9 |
IMAGE_ICON, 32, 32, LR_DEFAULTCOLOR);
|
|
Packit |
90a5c9 |
wcex.hCursor = g_hCursorArrow;
|
|
Packit |
90a5c9 |
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
|
|
Packit |
90a5c9 |
wcex.lpszMenuName = 0;
|
|
Packit |
90a5c9 |
wcex.lpszClassName = g_szWindowClass;
|
|
Packit |
90a5c9 |
wcex.hIconSm = (HICON)LoadImage(hInstance, MAKEINTRESOURCE(IDI_APSRVMON),
|
|
Packit |
90a5c9 |
IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
if (RegisterClassEx(&wcex)) {
|
|
Packit |
90a5c9 |
hWnd = CreateWindow(g_szWindowClass, g_szTitle,
|
|
Packit |
90a5c9 |
0, 0, 0, 0, 0,
|
|
Packit |
90a5c9 |
NULL, NULL, hInstance, NULL);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
return hWnd;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
#ifndef UNICODE
|
|
Packit |
90a5c9 |
/* Borrowed from CRT internal.h for _MBCS argc/argv parsing in this GUI app */
|
|
Packit |
90a5c9 |
int __cdecl _setargv(void);
|
|
Packit |
90a5c9 |
#endif
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
|
|
Packit |
90a5c9 |
LPSTR lpCmdLine, int nCmdShow)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
TCHAR szTmp[MAX_LOADSTRING];
|
|
Packit |
90a5c9 |
TCHAR szCmp[MAX_COMPUTERNAME_LENGTH+4];
|
|
Packit |
90a5c9 |
MSG msg;
|
|
Packit |
90a5c9 |
/* existing window */
|
|
Packit |
90a5c9 |
HWND appwindow;
|
|
Packit |
90a5c9 |
DWORD dwControl;
|
|
Packit |
90a5c9 |
int i;
|
|
Packit |
90a5c9 |
DWORD d;
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
if (!GetSystemOSVersion(&g_dwOSVersion))
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
ErrorMessage(NULL, TRUE);
|
|
Packit |
90a5c9 |
return 1;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
g_LangID = GetUserDefaultLangID();
|
|
Packit |
90a5c9 |
if ((g_LangID & 0xFF) != LANG_ENGLISH) {
|
|
Packit |
90a5c9 |
g_LangID = MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
for (i = IDS_MSG_FIRST; i <= IDS_MSG_LAST; ++i) {
|
|
Packit |
90a5c9 |
LoadString(hInstance, i, szTmp, MAX_LOADSTRING);
|
|
Packit |
90a5c9 |
g_lpMsg[i - IDS_MSG_FIRST] = _tcsdup(szTmp);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
LoadString(hInstance, IDS_APMONITORTITLE, szTmp, MAX_LOADSTRING);
|
|
Packit |
90a5c9 |
d = MAX_COMPUTERNAME_LENGTH+1;
|
|
Packit |
90a5c9 |
_tcscpy(szCmp, _T("\\\\"));
|
|
Packit |
90a5c9 |
GetComputerName(szCmp + 2, &d);
|
|
Packit |
90a5c9 |
_tcsupr(szCmp);
|
|
Packit |
90a5c9 |
g_szLocalHost = _tcsdup(szCmp);
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
memset(g_stComputers, 0, sizeof(ST_MONITORED_COMP) * MAX_APACHE_COMPUTERS);
|
|
Packit |
90a5c9 |
g_stComputers[0].szComputerName = _tcsdup(szCmp);
|
|
Packit |
90a5c9 |
g_stComputers[0].hRegistry = HKEY_LOCAL_MACHINE;
|
|
Packit |
90a5c9 |
g_szTitle = _tcsdup(szTmp);
|
|
Packit |
90a5c9 |
LoadString(hInstance, IDS_APMONITORCLASS, szTmp, MAX_LOADSTRING);
|
|
Packit |
90a5c9 |
g_szWindowClass = _tcsdup(szTmp);
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
appwindow = FindWindow(g_szWindowClass, g_szTitle);
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
#ifdef UNICODE
|
|
Packit |
90a5c9 |
__wargv = CommandLineToArgvW(GetCommandLineW(), &__argc);
|
|
Packit |
90a5c9 |
#else
|
|
Packit |
90a5c9 |
#if defined(_MSC_VER) && _MSC_VER < 1800
|
|
Packit |
90a5c9 |
_setargv();
|
|
Packit |
90a5c9 |
#endif
|
|
Packit |
90a5c9 |
#endif
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
if ((__argc == 2) && (_tcscmp(__targv[1], _T("--kill")) == 0))
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
/* Off to chase and close up every ApacheMonitor taskbar window */
|
|
Packit |
90a5c9 |
return KillAllMonitors();
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
else if ((__argc == 4) && (g_dwOSVersion >= OS_VERSION_WIN2K))
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
dwControl = _ttoi(__targv[1]);
|
|
Packit |
90a5c9 |
if ((dwControl != SERVICE_CONTROL_CONTINUE) &&
|
|
Packit |
90a5c9 |
(dwControl != SERVICE_APACHE_RESTART) &&
|
|
Packit |
90a5c9 |
(dwControl != SERVICE_CONTROL_STOP))
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
return 1;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
/* Chase down and close up our session's previous window */
|
|
Packit |
90a5c9 |
if ((appwindow) != NULL)
|
|
Packit |
90a5c9 |
KillAWindow(appwindow);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
else if (__argc != 1) {
|
|
Packit |
90a5c9 |
return 1;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
else if (appwindow)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
ErrorMessage(g_lpMsg[IDS_MSG_APPRUNNING - IDS_MSG_FIRST], FALSE);
|
|
Packit |
90a5c9 |
return 0;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
g_icoStop = LoadImage(hInstance, MAKEINTRESOURCE(IDI_ICOSTOP),
|
|
Packit |
90a5c9 |
IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
|
|
Packit |
90a5c9 |
g_icoRun = LoadImage(hInstance, MAKEINTRESOURCE(IDI_ICORUN),
|
|
Packit |
90a5c9 |
IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
|
|
Packit |
90a5c9 |
g_hCursorHourglass = LoadImage(NULL, MAKEINTRESOURCE(OCR_WAIT),
|
|
Packit |
90a5c9 |
IMAGE_CURSOR, LR_DEFAULTSIZE,
|
|
Packit |
90a5c9 |
LR_DEFAULTSIZE, LR_SHARED);
|
|
Packit |
90a5c9 |
g_hCursorArrow = LoadImage(NULL, MAKEINTRESOURCE(OCR_NORMAL),
|
|
Packit |
90a5c9 |
IMAGE_CURSOR, LR_DEFAULTSIZE,
|
|
Packit |
90a5c9 |
LR_DEFAULTSIZE, LR_SHARED);
|
|
Packit |
90a5c9 |
g_hBmpStart = LoadImage(hInstance, MAKEINTRESOURCE(IDB_BMPRUN),
|
|
Packit |
90a5c9 |
IMAGE_BITMAP, XBITMAP, YBITMAP,
|
|
Packit |
90a5c9 |
LR_DEFAULTCOLOR);
|
|
Packit |
90a5c9 |
g_hBmpStop = LoadImage(hInstance, MAKEINTRESOURCE(IDB_BMPSTOP),
|
|
Packit |
90a5c9 |
IMAGE_BITMAP, XBITMAP, YBITMAP,
|
|
Packit |
90a5c9 |
LR_DEFAULTCOLOR);
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
memset(g_stServices, 0, sizeof(ST_APACHE_SERVICE) * MAX_APACHE_SERVICES);
|
|
Packit |
90a5c9 |
CoInitialize(NULL);
|
|
Packit |
90a5c9 |
InitCommonControls();
|
|
Packit |
90a5c9 |
g_hInstance = hInstance;
|
|
Packit |
90a5c9 |
g_hwndMain = CreateMainWindow(hInstance);
|
|
Packit |
90a5c9 |
g_bUiTaskbarCreated = RegisterWindowMessage(_T("TaskbarCreated"));
|
|
Packit |
90a5c9 |
InitializeCriticalSection(&g_stcSection);
|
|
Packit |
90a5c9 |
g_hwndServiceDlg = NULL;
|
|
Packit |
90a5c9 |
if (g_hwndMain != NULL)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
/* To avoid recursion, pass ImagePath NULL (a noop on NT and later) */
|
|
Packit |
90a5c9 |
if ((__argc == 4) && (g_dwOSVersion >= OS_VERSION_WIN2K))
|
|
Packit |
90a5c9 |
ApacheManageService(__targv[2], NULL, __targv[3], dwControl);
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
while (GetMessage(&msg, NULL, 0, 0) == TRUE)
|
|
Packit |
90a5c9 |
{
|
|
Packit |
90a5c9 |
TranslateMessage(&msg;;
|
|
Packit |
90a5c9 |
DispatchMessage(&msg;;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
am_ClearServicesSt();
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
am_ClearComputersSt();
|
|
Packit |
90a5c9 |
DeleteCriticalSection(&g_stcSection);
|
|
Packit |
90a5c9 |
DestroyIcon(g_icoStop);
|
|
Packit |
90a5c9 |
DestroyIcon(g_icoRun);
|
|
Packit |
90a5c9 |
DestroyCursor(g_hCursorHourglass);
|
|
Packit |
90a5c9 |
DestroyCursor(g_hCursorArrow);
|
|
Packit |
90a5c9 |
DeleteObject(g_hBmpStart);
|
|
Packit |
90a5c9 |
DeleteObject(g_hBmpStop);
|
|
Packit |
90a5c9 |
CoUninitialize();
|
|
Packit |
90a5c9 |
return 0;
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
|