From 4ff7f09e530c1df2622b347fef47c55a3520471f Mon Sep 17 00:00:00 2001 From: Adrian Pop Date: Sat, 25 Mar 2006 20:00:31 +0000 Subject: [PATCH] added OMCMonitor to trunk/tools git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@2281 f25d12d1-65f4-0310-ae8a-bbce733d8d8e --- tools/OMCMonitor/LICENSE.txt | 32 + tools/OMCMonitor/OMCMonitor.aps | Bin 0 -> 125868 bytes tools/OMCMonitor/OMCMonitor.c | 1724 ++++++++++++++++++++++++++++ tools/OMCMonitor/OMCMonitor.h | 77 ++ tools/OMCMonitor/OMCMonitor.ico | Bin 0 -> 1078 bytes tools/OMCMonitor/OMCMonitor.rc | 204 ++++ tools/OMCMonitor/OMCMonitor.sln | 21 + tools/OMCMonitor/OMCMonitor.vcproj | 168 +++ tools/OMCMonitor/OMC_header.bmp | Bin 0 -> 29434 bytes tools/OMCMonitor/aprun.ico | Bin 0 -> 1078 bytes tools/OMCMonitor/apstop.ico | Bin 0 -> 1078 bytes tools/OMCMonitor/resource.h | 1259 ++++++++++++++++++++ tools/OMCMonitor/srun.bmp | Bin 0 -> 246 bytes tools/OMCMonitor/sstop.bmp | Bin 0 -> 246 bytes 14 files changed, 3485 insertions(+) create mode 100644 tools/OMCMonitor/LICENSE.txt create mode 100644 tools/OMCMonitor/OMCMonitor.aps create mode 100644 tools/OMCMonitor/OMCMonitor.c create mode 100644 tools/OMCMonitor/OMCMonitor.h create mode 100644 tools/OMCMonitor/OMCMonitor.ico create mode 100644 tools/OMCMonitor/OMCMonitor.rc create mode 100644 tools/OMCMonitor/OMCMonitor.sln create mode 100644 tools/OMCMonitor/OMCMonitor.vcproj create mode 100644 tools/OMCMonitor/OMC_header.bmp create mode 100644 tools/OMCMonitor/aprun.ico create mode 100644 tools/OMCMonitor/apstop.ico create mode 100644 tools/OMCMonitor/resource.h create mode 100644 tools/OMCMonitor/srun.bmp create mode 100644 tools/OMCMonitor/sstop.bmp diff --git a/tools/OMCMonitor/LICENSE.txt b/tools/OMCMonitor/LICENSE.txt new file mode 100644 index 00000000000..4ad952d1568 --- /dev/null +++ b/tools/OMCMonitor/LICENSE.txt @@ -0,0 +1,32 @@ +/* Copyright 2006 Adrian Pop, adrpo@ida.liu.se, http://www.ida.liu.se/~adrpo + * + * This program has been adapted from Apache Monitor to monitor OpenModelica + * compiler. Portions of the code are still from the Apache Monitor and the + * license is below. + * Adrian Pop, adrpo@ida.liu.se + */ + +/* Copyright 2001-2005 The Apache Software Foundation or its licensors, as + * applicable. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ==================================================================== + * ApacheMonitor.c Simple program to manage and monitor Apache services. + * + * Contributed by Mladen Turk + * + * 05 Aug 2001 + * ==================================================================== + */ + diff --git a/tools/OMCMonitor/OMCMonitor.aps b/tools/OMCMonitor/OMCMonitor.aps new file mode 100644 index 0000000000000000000000000000000000000000..57d8ff08be90e286dae773996def7ebbbc257744 GIT binary patch literal 125868 zcmb@vcbu$QQTSbV?PJGU(I;T#Z zDiM*p^WU}C`hWac`R$Op7yoU^uC)38wbvdB_`4nnf5>yba7fNP;Nf~srvvc`nmt1}M zm8Cx~y7G*c`RZ3L*ZFR%YDJ1V?_rR8$d%`=y8MY(o;i2XV}yoHcNbgzZZ0cwJ(|p4 zi{1XPJK6&7De&SZXq&jS3$RQPt$-pg&{)ypgwagw=F(KArV@dl7Yek?w4|n9_k+ zH=E@>9jMftJBW-or;B6xB!X81k;bu1JgDE$Fsb`Ja%tw<=MbeLMf7Txjy*u(JI*Ug0Nhe?QyHeAIx6>c?cjh~a(DJ(1Mf%+| zYF9tSZkVn$`5ptM%2VOSM4xwp}bvq?Ujbp|8-{M37)$g%Ckpgm{G*<7m0 zeQf!7tNr`eL|`|`neCyUWGCEU;dp3bM#)}7=R&*>fTi$sRK$s!w0`=stK zGVe2iaz(9JqGt=ZH|oswo7RBKac>6{IwNaR*QQKQECzW`^EGtUve@VWsU{uLMcW>X zI@>YFD&v?ftf34#RIRXxnIWXs$fHZx#+pBL=-0_o83L_&gSD`evtaqKUbar@nmmB- z$xLVUPcnFoH}io2dy83qT$}YED(u?GJlL4SIO|(;AL6W`!We4uQ0ie}WrN*pj}>Qg zwI&Y(3UA2fv(XIJ5|(aFG6oJdvOCGb0oLDUb{O$E4mH_izyNl‡=cFTFhd<+*3 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 +#include +#include +#include +#include +#include +#include +#include "OMCMonitor.h" +#include +#include "psapi.h" + + +#define OS_VERSION_WIN9X 1 +#define OS_VERSION_WINNT 2 +#define OS_VERSION_WIN2K 3 +/* Should be enough */ +#define MAX_APACHE_SERVICES 128 +#define MAX_APACHE_COMPUTERS 32 + +#define WM_TRAYMESSAGE (WM_APP+1) +#define WM_UPDATEMESSAGE (WM_USER+1) +#define WM_MANAGEMESSAGE (WM_USER+2) +#define WM_TIMER_REFRESH 10 +#define WM_TIMER_RESCAN 11 +#define SERVICE_APACHE_RESTART 128 +#define XBITMAP 16 +#define YBITMAP 16 +#define MAX_LOADSTRING 100 +#define REFRESH_TIME 2000 /* service refresh time (ms) */ +#define RESCAN_TIME 20000 /* registry rescan time (ms) */ + +typedef struct _st_APACHE_SERVICE +{ + LPSTR szServiceName; + LPSTR szDisplayName; + LPSTR szDescription; + LPSTR szImagePath; + LPSTR szComputerName; + DWORD dwPid; +} ST_APACHE_SERVICE; + +typedef struct _st_MONITORED_COMPUTERS +{ + LPSTR szComputerName; + HKEY hRegistry; +} ST_MONITORED_COMP; + +/* Global variables */ +HINSTANCE g_hInstance = NULL; +CHAR *g_szTitle; /* The title bar text */ +CHAR *g_szWindowClass; /* Window Class Name */ +HICON g_icoStop; +HICON g_icoRun; +UINT g_bUiTaskbarCreated; +DWORD g_dwOSVersion; +BOOL g_bDlgServiceOn = FALSE; +BOOL g_bConsoleRun = FALSE; +ST_APACHE_SERVICE g_stServices[MAX_APACHE_SERVICES]; +ST_MONITORED_COMP g_stComputers[MAX_APACHE_COMPUTERS]; + +HBITMAP g_hBmpStart, g_hBmpStop; +HBITMAP g_hBmpPicture, g_hBmpOld; +BOOL g_bRescanServices; +HWND g_hwndServiceDlg; +HWND g_hwndMain; +HWND g_hwndStdoutList; +HWND g_hwndConnectDlg; +HCURSOR g_hCursorHourglass; +HCURSOR g_hCursorArrow; + +HANDLE g_hpipeOutRead; +HANDLE g_hpipeOutWrite; +HANDLE g_hpipeInRead; +HANDLE g_hpipeInWrite; +HANDLE g_hpipeStdError; +LANGID g_LangID; +PROCESS_INFORMATION g_lpRedirectProc; +CRITICAL_SECTION g_stcSection; +LPSTR g_szLocalHost; + +/* locale language support */ +static CHAR *g_lpMsg[IDS_MSG_LAST - IDS_MSG_FIRST + 1]; + +void populateProcesses(void); +TCHAR* getProcessName( DWORD processID ); + +void am_ClearServicesSt() +{ + int i; + for (i = 0; i < MAX_APACHE_SERVICES; i++) + { + if (g_stServices[i].szServiceName) { + free(g_stServices[i].szServiceName); + } + if (g_stServices[i].szDisplayName) { + free(g_stServices[i].szDisplayName); + } + if (g_stServices[i].szDescription) { + free(g_stServices[i].szDescription); + } + if (g_stServices[i].szImagePath) { + free(g_stServices[i].szImagePath); + } + if (g_stServices[i].szComputerName) { + free(g_stServices[i].szComputerName); + } + + } + memset(g_stServices, 0, sizeof(ST_APACHE_SERVICE) * MAX_APACHE_SERVICES); + +} + + +void am_ClearComputersSt() +{ + int i; + for (i = 0; i < MAX_APACHE_COMPUTERS; i++) { + if (g_stComputers[i].szComputerName) { + free(g_stComputers[i].szComputerName); + RegCloseKey(g_stComputers[i].hRegistry); + } + } + memset(g_stComputers, 0, sizeof(ST_MONITORED_COMP) * MAX_APACHE_COMPUTERS); + +} + + +BOOL am_IsComputerConnected(LPSTR szComputerName) +{ + int i = 0; + while (g_stComputers[i].szComputerName != NULL) { + if (strcmp(g_stComputers[i].szComputerName, szComputerName) == 0) { + return TRUE; + } + ++i; + } + return FALSE; +} + + +void am_DisconnectComputer(LPSTR szComputerName) +{ + int i = 0, j; + while (g_stComputers[i].szComputerName != NULL) { + if (strcmp(g_stComputers[i].szComputerName, szComputerName) == 0) { + break; + } + ++i; + } + if (g_stComputers[i].szComputerName != NULL) { + free(g_stComputers[i].szComputerName); + RegCloseKey(g_stComputers[i].hRegistry); + for (j = i; j < MAX_APACHE_COMPUTERS - 1; j++) { + g_stComputers[i].szComputerName= g_stComputers[i+1].szComputerName; + g_stComputers[i].hRegistry = g_stComputers[i+1].hRegistry; + } + for (i = j; i < MAX_APACHE_COMPUTERS; i++) { + g_stComputers[i].szComputerName = NULL; + g_stComputers[i].hRegistry = NULL; + } + } + +} + + +void ErrorMessage(LPCSTR szError, BOOL bFatal) +{ + LPVOID lpMsgBuf = NULL; + if (szError) { + MessageBox(NULL, szError, g_lpMsg[IDS_MSG_ERROR - IDS_MSG_FIRST], + MB_OK | (bFatal ? MB_ICONERROR : MB_ICONEXCLAMATION)); + } + else { + FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | + FORMAT_MESSAGE_FROM_SYSTEM | + FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, GetLastError(), g_LangID, + (LPSTR) &lpMsgBuf, 0, NULL); + MessageBox(NULL, (LPCSTR)lpMsgBuf, + g_lpMsg[IDS_MSG_ERROR - IDS_MSG_FIRST], + MB_OK | (bFatal ? MB_ICONERROR : MB_ICONEXCLAMATION)); + LocalFree(lpMsgBuf); + } + if (bFatal) { + PostQuitMessage(0); + } +} + + +BOOL am_ConnectComputer(LPSTR szComputerName) +{ + int i = 0; + HKEY hKeyRemote; + char szTmp[MAX_PATH]; + + while (g_stComputers[i].szComputerName != NULL) { + if (strcmp(g_stComputers[i].szComputerName, szComputerName) == 0) { + return FALSE; + } + ++i; + } + if (i > MAX_APACHE_COMPUTERS - 1) { + return FALSE; + } + if (RegConnectRegistry(szComputerName, HKEY_LOCAL_MACHINE, &hKeyRemote) + != ERROR_SUCCESS) { + sprintf(szTmp, g_lpMsg[IDS_MSG_ECONNECT - IDS_MSG_FIRST], + szComputerName); + ErrorMessage(szTmp, FALSE); + return FALSE; + } + else { + g_stComputers[i].szComputerName = _strdup(szComputerName); + g_stComputers[i].hRegistry = hKeyRemote; + return TRUE; + } +} + + +LPSTR GetStringRes(int id) +{ + static CHAR buffer[MAX_PATH]; + + buffer[0] = 0; + LoadString(GetModuleHandle(NULL), id, buffer, MAX_PATH); + return buffer; +} + + +BOOL GetSystemOSVersion(LPDWORD dwVersion) +{ + OSVERSIONINFO osvi; + /* + Try calling GetVersionEx using the OSVERSIONINFOEX structure. + If that fails, try using the OSVERSIONINFO structure. + */ + memset(&osvi, 0, sizeof(OSVERSIONINFO)); + osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + + if (!GetVersionEx(&osvi)) { + return FALSE; + } + + switch (osvi.dwPlatformId) + { + case VER_PLATFORM_WIN32_NT: + if (osvi.dwMajorVersion <= 4) { + *dwVersion = OS_VERSION_WINNT; + } + else if (osvi.dwMajorVersion == 5) { + *dwVersion = OS_VERSION_WIN2K; + } + else { + return FALSE; + } + break; + + case VER_PLATFORM_WIN32_WINDOWS: + *dwVersion = OS_VERSION_WIN9X; + break; + + case VER_PLATFORM_WIN32s: + default: + *dwVersion = 0; + return FALSE; + } + return TRUE; +} + + +static VOID ShowNotifyIcon(HWND hWnd, DWORD dwMessage) +{ + NOTIFYICONDATA nid; + int i = 0, n = 0; + + memset(&nid, 0, sizeof(nid)); + nid.cbSize = sizeof(NOTIFYICONDATA); + nid.hWnd = hWnd; + nid.uID = 0xFF; + nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; + nid.uCallbackMessage = WM_TRAYMESSAGE; + + while (g_stServices[i].szServiceName != NULL) + { + if (g_stServices[i].dwPid != 0) { + ++n; + } + ++i; + } + if (dwMessage != NIM_DELETE) + { + if (n) { + nid.hIcon = g_icoRun; + } + else { + nid.hIcon = g_icoStop; + } + } + else { + nid.hIcon = NULL; + } + if (n == i && n > 0) { + lstrcpy(nid.szTip, g_lpMsg[IDS_MSG_RUNNINGALL - IDS_MSG_FIRST]); + } + else if (n) { + sprintf(nid.szTip, g_lpMsg[IDS_MSG_RUNNING - IDS_MSG_FIRST], n, i); + } + else if (i) { + sprintf(nid.szTip, g_lpMsg[IDS_MSG_RUNNINGNONE - IDS_MSG_FIRST], i); + } + else { + lstrcpy(nid.szTip, g_lpMsg[IDS_MSG_NOSERVICES - IDS_MSG_FIRST]); + } + Shell_NotifyIcon(dwMessage, &nid); +} + + +void appendMenuItem(HMENU hMenu, UINT uMenuId, LPSTR szName, + BOOL fDefault, BOOL fEnabled) +{ + MENUITEMINFO mii; + + memset(&mii, 0, sizeof(MENUITEMINFO)); + mii.cbSize = sizeof(MENUITEMINFO); + mii.fMask = MIIM_ID | MIIM_TYPE | MIIM_STATE; + if (lstrlen(szName)) + { + mii.fType = MFT_STRING; + mii.wID = uMenuId; + if (fDefault) { + mii.fState = MFS_DEFAULT; + } + if (!fEnabled) { + mii.fState |= MFS_DISABLED; + } + mii.dwTypeData = szName; + } + else { + mii.fType = MFT_SEPARATOR; + } + InsertMenuItem(hMenu, uMenuId, FALSE, &mii); +} + + +void appendServiceMenu(HMENU hMenu, UINT uMenuId, + LPSTR szServiceName, BOOL fRunning) +{ + MENUITEMINFO mii; + HMENU smh; + + smh = CreatePopupMenu(); + + appendMenuItem(smh, IDM_SM_START + uMenuId, + g_lpMsg[IDS_MSG_SSTART - IDS_MSG_FIRST], FALSE, !fRunning); + appendMenuItem(smh, IDM_SM_STOP + uMenuId, + g_lpMsg[IDS_MSG_SSTOP - IDS_MSG_FIRST], FALSE, fRunning); + appendMenuItem(smh, IDM_SM_RESTART + uMenuId, + g_lpMsg[IDS_MSG_SRESTART - IDS_MSG_FIRST], FALSE, fRunning); + + memset(&mii, 0, sizeof(MENUITEMINFO)); + mii.cbSize = sizeof(MENUITEMINFO); + mii.fMask = MIIM_ID | MIIM_TYPE | MIIM_STATE | MIIM_SUBMENU + | MIIM_CHECKMARKS; + mii.fType = MFT_STRING; + mii.wID = uMenuId; + mii.hbmpChecked = g_hBmpStart; + mii.hbmpUnchecked = g_hBmpStop; + mii.dwTypeData = szServiceName; + mii.hSubMenu = smh; + mii.fState = fRunning ? MFS_CHECKED : MFS_UNCHECKED; + InsertMenuItem(hMenu, IDM_SM_SERVICE + uMenuId, FALSE, &mii); +} + + +void ShowTryPopupMenu(HWND hWnd) +{ + /* create popup menu */ + HMENU hMenu = CreatePopupMenu(); + POINT pt; + + if (hMenu) + { + appendMenuItem(hMenu, IDM_RESTORE, + g_lpMsg[IDS_MSG_MNUSHOW - IDS_MSG_FIRST], + TRUE, TRUE); + if (g_dwOSVersion >= OS_VERSION_WINNT) { + appendMenuItem(hMenu, IDC_SMANAGER, + g_lpMsg[IDS_MSG_MNUSERVICES - IDS_MSG_FIRST], + FALSE, TRUE); + } + appendMenuItem(hMenu, 0, "", FALSE, TRUE); + appendMenuItem(hMenu, IDM_EXIT, + g_lpMsg[IDS_MSG_MNUEXIT - IDS_MSG_FIRST], + FALSE, TRUE); + + if (!SetForegroundWindow(hWnd)) { + SetForegroundWindow(NULL); + } + GetCursorPos(&pt); + TrackPopupMenu(hMenu, TPM_LEFTALIGN|TPM_RIGHTBUTTON, + pt.x, pt.y, 0, hWnd, NULL); + DestroyMenu(hMenu); + } +} + + +void ShowTryServicesMenu(HWND hWnd) +{ + /* create services list popup menu and submenus */ + HMENU hMenu = CreatePopupMenu(); + POINT pt; + int i = 0; + + if (hMenu) + { + while (g_stServices[i].szServiceName != NULL) + { + appendServiceMenu(hMenu, i, g_stServices[i].szDisplayName, + g_stServices[i].dwPid != 0); + ++i; + } + if (i) + { + if (!SetForegroundWindow(hWnd)) { + SetForegroundWindow(NULL); + } + GetCursorPos(&pt); + TrackPopupMenu(hMenu, TPM_LEFTALIGN|TPM_RIGHTBUTTON, + pt.x, pt.y, 0, hWnd, NULL); + DestroyMenu(hMenu); + } + } +} + + +BOOL CenterWindow(HWND hwndChild) +{ + RECT rChild, rWorkArea; + int wChild, hChild; + int xNew, yNew; + BOOL bResult; + + /* Get the Height and Width of the child window */ + GetWindowRect(hwndChild, &rChild); + wChild = rChild.right - rChild.left; + hChild = rChild.bottom - rChild.top; + + /* Get the limits of the 'workarea' */ + bResult = SystemParametersInfo(SPI_GETWORKAREA, sizeof(RECT), + &rWorkArea, 0); + if (!bResult) { + rWorkArea.left = rWorkArea.top = 0; + rWorkArea.right = GetSystemMetrics(SM_CXSCREEN); + rWorkArea.bottom = GetSystemMetrics(SM_CYSCREEN); + } + + /* Calculate new X and Y position*/ + xNew = (rWorkArea.right - wChild) / 2; + yNew = (rWorkArea.bottom - hChild) / 2; + return SetWindowPos(hwndChild, HWND_TOP, xNew, yNew, 0, 0, + SWP_NOSIZE | SWP_SHOWWINDOW); +} + + +static void addListBoxItem(HWND hDlg, LPSTR lpStr, HBITMAP hBmp) +{ + LRESULT nItem; + + nItem = SendMessage(hDlg, LB_ADDSTRING, 0, (LPARAM)lpStr); + SendMessage(hDlg, LB_SETITEMDATA, nItem, (LPARAM)hBmp); +} + + +static void addListBoxString(HWND hListBox, LPSTR lpStr) +{ + static int nItems = 0; + if (!g_bDlgServiceOn) { + return; + } + ++nItems; + if (nItems > MAX_LOADSTRING) + { + SendMessage(hListBox, LB_RESETCONTENT, 0, 0); + nItems = 1; + } + ListBox_SetCurSel(hListBox, + ListBox_AddString(hListBox, lpStr)); + +} + + +static DWORD WINAPI ConsoleOutputThread(LPVOID lpThreadParameter) +{ + static BYTE lpBuffer[MAX_PATH+1]; + int nPtr = 0; + BYTE ch; + DWORD dwReaded; + + while (ReadFile(g_hpipeOutRead, &ch, 1, &dwReaded, NULL) == TRUE) + { + if (dwReaded > 0) + { + if (ch == '\n' || nPtr >= MAX_PATH) + { + lpBuffer[nPtr] = '\0'; + addListBoxString(g_hwndStdoutList, lpBuffer); + nPtr = 0; + } + else if (ch == '\t' && nPtr < (MAX_PATH - 4)) + { + int i; + for (i = 0; i < 4; ++i) { + lpBuffer[nPtr++] = ' '; + } + } + else if (ch != '\r') { + lpBuffer[nPtr++] = ch; + } + } + } + CloseHandle(g_hpipeInWrite); + CloseHandle(g_hpipeOutRead); + CloseHandle(g_hpipeStdError); + return 0; +} + + +DWORD WINAPI ConsoleWaitingThread(LPVOID lpThreadParameter) +{ + WaitForSingleObject(g_lpRedirectProc.hThread, INFINITE); + CloseHandle(g_lpRedirectProc.hThread); + MessageBeep(100); + g_bConsoleRun = FALSE; + SetCursor(g_hCursorArrow); + return 0; +} + + +BOOL RunRedirectedConsole(LPSTR szCmdLine) +{ + DWORD dwThreadId; + HANDLE hProc; + STARTUPINFO stInfo; + BOOL bResult; + + memset(&stInfo, 0, sizeof(stInfo)); + stInfo.cb = sizeof(stInfo); + stInfo.dwFlags = STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW; + stInfo.wShowWindow = SW_HIDE; + + hProc = GetCurrentProcess(); + + if (!CreatePipe(&g_hpipeInRead, &g_hpipeInWrite, NULL, MAX_PATH)) { + ErrorMessage(NULL, TRUE); + } + if (!CreatePipe(&g_hpipeOutRead, &g_hpipeOutWrite, NULL, MAX_PATH*8)) { + ErrorMessage(NULL, TRUE); + } + DuplicateHandle(hProc, g_hpipeInRead, hProc, &g_hpipeInRead, 0, TRUE, + DUPLICATE_CLOSE_SOURCE|DUPLICATE_SAME_ACCESS); + DuplicateHandle(hProc, g_hpipeOutWrite, hProc, &g_hpipeOutWrite, 0, TRUE, + DUPLICATE_CLOSE_SOURCE|DUPLICATE_SAME_ACCESS); + DuplicateHandle(hProc, g_hpipeOutWrite, hProc, &g_hpipeStdError, 0, TRUE, + DUPLICATE_SAME_ACCESS); + if (!g_hpipeInRead && !g_hpipeOutWrite && !g_hpipeStdError) { + ErrorMessage(NULL, TRUE); + } + stInfo.hStdInput = g_hpipeInRead; + stInfo.hStdOutput = g_hpipeOutWrite; + stInfo.hStdError = g_hpipeStdError; + + bResult = CreateProcess(NULL, + szCmdLine, + NULL, + NULL, + TRUE, + CREATE_SUSPENDED, + NULL, + NULL, + &stInfo, + &g_lpRedirectProc); + + + CloseHandle(g_hpipeInRead); + CloseHandle(g_hpipeOutWrite); + CloseHandle(g_hpipeStdError); + + if (!bResult) + { + CloseHandle(g_hpipeInWrite); + CloseHandle(g_hpipeOutRead); + CloseHandle(g_hpipeStdError); + return FALSE; + } + + CloseHandle(CreateThread(NULL, 0, ConsoleOutputThread, + 0, 0, &dwThreadId)); + ResumeThread(g_lpRedirectProc.hThread); + CloseHandle(CreateThread(NULL, 0, ConsoleWaitingThread, + 0, 0, &dwThreadId)); + + return TRUE; +} + + +BOOL RunAndForgetConsole(LPSTR szCmdLine, BOOL bRedirectConsole) +{ + STARTUPINFO stInfo; + PROCESS_INFORMATION prInfo; + BOOL bResult; + + if (bRedirectConsole) { + return RunRedirectedConsole(szCmdLine); + } + + memset(&stInfo, 0, sizeof(stInfo)); + stInfo.cb = sizeof(stInfo); + stInfo.dwFlags = STARTF_USESHOWWINDOW; + stInfo.wShowWindow = SW_HIDE; + + bResult = CreateProcess(NULL, + szCmdLine, + NULL, + NULL, + TRUE, + CREATE_NEW_CONSOLE, + NULL, + NULL, + &stInfo, + &prInfo); + + if (!bResult) { + return FALSE; + } + if (g_dwOSVersion == OS_VERSION_WIN9X) { + /* give some time to rescan the status */ + Sleep(2000); + } + CloseHandle(prInfo.hThread); + CloseHandle(prInfo.hProcess); + return TRUE; +} + + +BOOL OMCManageService(LPCSTR szServiceName, LPCSTR szImagePath, + LPSTR szComputerName, DWORD dwCommand) +{ + CHAR szBuf[MAX_PATH]; + CHAR szMsg[MAX_PATH]; + LPSTR sPos; + BOOL retValue; + BOOL serviceFlag = TRUE; + SC_HANDLE schService; + SC_HANDLE schSCManager; + SERVICE_STATUS schSStatus; + int ticks; + + if (g_dwOSVersion == OS_VERSION_WIN9X) + { + sPos = strstr(szImagePath, "-k start"); + if (sPos) + { + lstrcpyn(szBuf, szImagePath, (int)(sPos - szImagePath)); + switch (dwCommand) + { + case SERVICE_CONTROL_STOP: + lstrcat(szBuf, " -k shutdown -n "); + break; + + case SERVICE_CONTROL_CONTINUE: + sprintf(szMsg, g_lpMsg[IDS_MSG_SRVSTART - IDS_MSG_FIRST], + szServiceName); + addListBoxString(g_hwndStdoutList, szMsg); + lstrcat(szBuf, " -k start -n "); + serviceFlag = FALSE; + break; + + case SERVICE_APACHE_RESTART: + lstrcat(szBuf, " -k restart -n "); + break; + + default: + return FALSE; + } + lstrcat(szBuf, szServiceName); + } + else { + return FALSE; + } + g_bConsoleRun = TRUE; + SetCursor(g_hCursorHourglass); + if (!RunAndForgetConsole(szBuf, serviceFlag)) + { + ErrorMessage(NULL, FALSE); + g_bConsoleRun = FALSE; + SetCursor(g_hCursorArrow); + return FALSE; + } + else if (!serviceFlag) + { + sprintf(szMsg, g_lpMsg[IDS_MSG_SRVSTARTED - IDS_MSG_FIRST], + szServiceName); + addListBoxString(g_hwndStdoutList, szMsg); + g_bConsoleRun = FALSE; + SetCursor(g_hCursorArrow); + return TRUE; + } + } + else + { + schSCManager = OpenSCManager(szComputerName, NULL, + SC_MANAGER_CONNECT); + if (!schSCManager) { + return FALSE; + } + + schService = OpenService(schSCManager, szServiceName, + SERVICE_QUERY_STATUS | SERVICE_START | + SERVICE_STOP | SERVICE_USER_DEFINED_CONTROL); + if (schService != NULL) + { + retValue = FALSE; + g_bConsoleRun = TRUE; + SetCursor(g_hCursorHourglass); + switch (dwCommand) + { + case SERVICE_CONTROL_STOP: + sprintf(szMsg, g_lpMsg[IDS_MSG_SRVSTOP - IDS_MSG_FIRST], + szServiceName); + addListBoxString(g_hwndStdoutList, szMsg); + if (ControlService(schService, SERVICE_CONTROL_STOP, + &schSStatus)) { + Sleep(1000); + while (QueryServiceStatus(schService, &schSStatus)) + { + if (schSStatus.dwCurrentState == SERVICE_STOP_PENDING) + { + Sleep(1000); + } + else { + break; + } + } + } + if (QueryServiceStatus(schService, &schSStatus)) + { + if (schSStatus.dwCurrentState == SERVICE_STOPPED) + { + retValue = TRUE; + sprintf(szMsg, + g_lpMsg[IDS_MSG_SRVSTOPPED - IDS_MSG_FIRST], + szServiceName); + addListBoxString(g_hwndStdoutList, szMsg); + } + } + break; + + case SERVICE_CONTROL_CONTINUE: + sprintf(szMsg, g_lpMsg[IDS_MSG_SRVSTART - IDS_MSG_FIRST], + szServiceName); + addListBoxString(g_hwndStdoutList, szMsg); + + if (StartService(schService, 0, NULL)) + { + Sleep(1000); + while (QueryServiceStatus(schService, &schSStatus)) + { + if (schSStatus.dwCurrentState == SERVICE_START_PENDING) + { + Sleep(1000); + } + else { + break; + } + } + } + if (QueryServiceStatus(schService, &schSStatus)) + { + if (schSStatus.dwCurrentState == SERVICE_RUNNING) + { + retValue = TRUE; + sprintf(szMsg, + g_lpMsg[IDS_MSG_SRVSTARTED - IDS_MSG_FIRST], + szServiceName); + addListBoxString(g_hwndStdoutList, szMsg); + } + } + break; + + case SERVICE_APACHE_RESTART: + sprintf(szMsg, g_lpMsg[IDS_MSG_SRVRESTART - IDS_MSG_FIRST], + szServiceName); + addListBoxString(g_hwndStdoutList, szMsg); + if (ControlService(schService, SERVICE_APACHE_RESTART, + &schSStatus)) + { + ticks = 60; + while (schSStatus.dwCurrentState == SERVICE_START_PENDING) + { + Sleep(1000); + if (!QueryServiceStatus(schService, &schSStatus)) + { + CloseServiceHandle(schService); + CloseServiceHandle(schSCManager); + g_bConsoleRun = FALSE; + SetCursor(g_hCursorArrow); + return FALSE; + } + if (!--ticks) { + break; + } + } + } + if (schSStatus.dwCurrentState == SERVICE_RUNNING) + { + retValue = TRUE; + sprintf(szMsg, + g_lpMsg[IDS_MSG_SRVRESTARTED - IDS_MSG_FIRST], + szServiceName); + addListBoxString(g_hwndStdoutList, szMsg); + } + break; + } + CloseServiceHandle(schService); + CloseServiceHandle(schSCManager); + if (!retValue) { + ErrorMessage(g_lpMsg[IDS_MSG_SRVFAILED - IDS_MSG_FIRST], + FALSE); + } + g_bConsoleRun = FALSE; + SetCursor(g_hCursorArrow); + return retValue; + } + else { + g_bRescanServices = TRUE; + } + CloseServiceHandle(schSCManager); + return FALSE; + } + + return FALSE; +} + + +BOOL IsServiceRunning(LPCSTR szServiceName, LPCSTR szComputerName, + LPDWORD lpdwPid) +{ + DWORD dwPid; + HWND hWnd; + SC_HANDLE schService; + SC_HANDLE schSCManager; + SERVICE_STATUS schSStatus; + + return TRUE; + + if (g_dwOSVersion == OS_VERSION_WIN9X) + { + hWnd = FindWindow("OMCWin95ServiceMonitor", szServiceName); + if (hWnd && GetWindowThreadProcessId(hWnd, &dwPid)) + { + *lpdwPid = 1; + return TRUE; + } + else { + return FALSE; + } + } + else + { + dwPid = 0; + schSCManager = OpenSCManager(szComputerName, NULL, + SC_MANAGER_CONNECT); + if (!schSCManager) { + return FALSE; + } + + schService = OpenService(schSCManager, szServiceName, + SERVICE_QUERY_STATUS); + if (schService != NULL) + { + if (QueryServiceStatus(schService, &schSStatus)) + { + dwPid = schSStatus.dwCurrentState; + if (lpdwPid) { + *lpdwPid = 1; + } + } + CloseServiceHandle(schService); + CloseServiceHandle(schSCManager); + return dwPid == SERVICE_RUNNING ? TRUE : FALSE; + } + else { + g_bRescanServices = TRUE; + } + CloseServiceHandle(schSCManager); + return FALSE; + + } + + return FALSE; +} + + +BOOL FindRunningServices(void) +{ + int i = 0; + DWORD dwPid; + BOOL rv = FALSE; + while (g_stServices[i].szServiceName != NULL) + { + if (!IsServiceRunning(g_stServices[i].szServiceName, + g_stServices[i].szComputerName, &dwPid)) { + dwPid = 0; + } + if (g_stServices[i].dwPid != dwPid) { + rv = TRUE; + } + g_stServices[i].dwPid = dwPid; + ++i; + } + return rv; +} + + +BOOL GetOMCServicesStatus() +{ + am_ClearServicesSt(); + populateProcesses(); + FindRunningServices(); + return TRUE; +} + + +LRESULT CALLBACK ConnectDlgProc(HWND hDlg, UINT message, + WPARAM wParam, LPARAM lParam) +{ + CHAR szCmp[MAX_COMPUTERNAME_LENGTH+4]; + switch (message) + { + case WM_INITDIALOG: + ShowWindow(hDlg, SW_HIDE); + g_hwndConnectDlg = hDlg; + CenterWindow(hDlg); + ShowWindow(hDlg, SW_SHOW); + SetFocus(GetDlgItem(hDlg, IDC_COMPUTER)); + return TRUE; + + case WM_COMMAND: + switch (LOWORD(wParam)) + { + case IDOK: + memset(szCmp, 0, MAX_COMPUTERNAME_LENGTH+4); + strcpy(szCmp, "\\\\"); + SendMessage(GetDlgItem(hDlg, IDC_COMPUTER), WM_GETTEXT, + (WPARAM) MAX_COMPUTERNAME_LENGTH, + (LPARAM) szCmp+2); + + _strupr(szCmp); + if (strlen(szCmp) < 3) { + EndDialog(hDlg, TRUE); + return TRUE; + } + am_ConnectComputer(szCmp); + SendMessage(g_hwndMain, WM_TIMER, WM_TIMER_RESCAN, 0); + + case IDCANCEL: + EndDialog(hDlg, TRUE); + return TRUE; + + case IDC_LBROWSE: + { + BROWSEINFO bi; + ITEMIDLIST *il; + LPMALLOC pMalloc; + memset(&bi, 0, sizeof(BROWSEINFO)); + SHGetSpecialFolderLocation(hDlg, CSIDL_NETWORK, &il); + + bi.lpszTitle = "OMCMonitor :\nSelect Network Computer!"; + bi.pszDisplayName = szCmp; + bi.hwndOwner = hDlg; + bi.ulFlags = BIF_BROWSEFORCOMPUTER; + bi.lpfn = NULL; + bi.lParam = 0; + bi.iImage = 0; + bi.pidlRoot = il; + + if (SHBrowseForFolder(&bi) != NULL) { + SendMessage(GetDlgItem(hDlg, IDC_COMPUTER), + WM_SETTEXT, + (WPARAM) NULL, (LPARAM) szCmp); + } + if (SHGetMalloc(&pMalloc)) { + pMalloc->lpVtbl->Free(pMalloc, il); + pMalloc->lpVtbl->Release(pMalloc); + } + return TRUE; + } + } + break; + + case WM_QUIT: + case WM_CLOSE: + EndDialog(hDlg, TRUE); + return TRUE; + + default: + return FALSE; + } + return FALSE; + +} + + +LRESULT CALLBACK ServiceDlgProc(HWND hDlg, UINT message, + WPARAM wParam, LPARAM lParam) +{ + CHAR szBuf[MAX_PATH]; + HWND hListBox; + static HWND hStatusBar; + TEXTMETRIC tm; + int i, y; + HDC hdcMem; + RECT rcBitmap; + LRESULT nItem; + LPMEASUREITEMSTRUCT lpmis; + LPDRAWITEMSTRUCT lpdis; + + memset(szBuf, 0, MAX_PATH); + switch (message) + { + case WM_INITDIALOG: + ShowWindow(hDlg, SW_HIDE); + g_hwndServiceDlg = hDlg; + SetWindowText(hDlg, g_szTitle); + Button_Enable(GetDlgItem(hDlg, IDC_SSTART), FALSE); + Button_Enable(GetDlgItem(hDlg, IDC_SSTOP), FALSE); + Button_Enable(GetDlgItem(hDlg, IDC_SRESTART), FALSE); + Button_Enable(GetDlgItem(hDlg, IDC_SDISCONN), FALSE); + SetWindowText(GetDlgItem(hDlg, IDC_SSTART), + g_lpMsg[IDS_MSG_SSTART - IDS_MSG_FIRST]); + SetWindowText(GetDlgItem(hDlg, IDC_SSTOP), + g_lpMsg[IDS_MSG_SSTOP - IDS_MSG_FIRST]); + SetWindowText(GetDlgItem(hDlg, IDC_SRESTART), + g_lpMsg[IDS_MSG_SRESTART - IDS_MSG_FIRST]); + SetWindowText(GetDlgItem(hDlg, IDC_SMANAGER), + g_lpMsg[IDS_MSG_SERVICES - IDS_MSG_FIRST]); + SetWindowText(GetDlgItem(hDlg, IDC_SCONNECT), + g_lpMsg[IDS_MSG_CONNECT - IDS_MSG_FIRST]); + SetWindowText(GetDlgItem(hDlg, IDC_SEXIT), + g_lpMsg[IDS_MSG_MNUEXIT - IDS_MSG_FIRST]); + if (g_dwOSVersion < OS_VERSION_WINNT) + { + ShowWindow(GetDlgItem(hDlg, IDC_SMANAGER), SW_HIDE); + ShowWindow(GetDlgItem(hDlg, IDC_SCONNECT), SW_HIDE); + ShowWindow(GetDlgItem(hDlg, IDC_SDISCONN), SW_HIDE); + } + hListBox = GetDlgItem(hDlg, IDL_SERVICES); + g_hwndStdoutList = GetDlgItem(hDlg, IDL_STDOUT); + hStatusBar = CreateStatusWindow(0x0800 /* SBT_TOOLTIPS */ + | WS_CHILD | WS_VISIBLE, + "", hDlg, IDC_STATBAR); + if (GetOMCServicesStatus()) + { + i = 0; + while (g_stServices[i].szServiceName != NULL) + { + addListBoxItem(hListBox, g_stServices[i].szDisplayName, + g_stServices[i].dwPid == 0 ? g_hBmpStop + : g_hBmpStart); + ++i; + } + } + CenterWindow(hDlg); + ShowWindow(hDlg, SW_SHOW); + SetFocus(hListBox); + SendMessage(hListBox, LB_SETCURSEL, 0, 0); + return TRUE; + break; + + case WM_MANAGEMESSAGE: + OMCManageService(g_stServices[LOWORD(wParam)].szServiceName, + g_stServices[LOWORD(wParam)].szImagePath, + g_stServices[LOWORD(wParam)].szComputerName, + LOWORD(lParam)); + + return TRUE; + break; + + case WM_UPDATEMESSAGE: + hListBox = GetDlgItem(hDlg, IDL_SERVICES); + SendMessage(hListBox, LB_RESETCONTENT, 0, 0); + SendMessage(hStatusBar, SB_SETTEXT, 0, (LPARAM)""); + Button_Enable(GetDlgItem(hDlg, IDC_SSTART), FALSE); + Button_Enable(GetDlgItem(hDlg, IDC_SSTOP), FALSE); + Button_Enable(GetDlgItem(hDlg, IDC_SRESTART), FALSE); + Button_Enable(GetDlgItem(hDlg, IDC_SDISCONN), FALSE); + i = 0; + while (g_stServices[i].szServiceName != NULL) + { + addListBoxItem(hListBox, g_stServices[i].szDisplayName, + g_stServices[i].dwPid == 0 ? g_hBmpStop : g_hBmpStart); + ++i; + } + SendMessage(hListBox, LB_SETCURSEL, 0, 0); + /* Dirty hack to bring the window to the foreground */ + SetWindowPos(hDlg, HWND_TOPMOST, 0, 0, 0, 0, + SWP_NOSIZE | SWP_NOMOVE | SWP_SHOWWINDOW); + SetWindowPos(hDlg, HWND_NOTOPMOST, 0, 0, 0, 0, + SWP_NOSIZE | SWP_NOMOVE | SWP_SHOWWINDOW); + SetFocus(hListBox); + return TRUE; + break; + + case WM_MEASUREITEM: + lpmis = (LPMEASUREITEMSTRUCT) lParam; + lpmis->itemHeight = YBITMAP; + return TRUE; + + case WM_SETCURSOR: + if (g_bConsoleRun) { + SetCursor(g_hCursorHourglass); + } + else { + SetCursor(g_hCursorArrow); + } + return TRUE; + + case WM_DRAWITEM: + lpdis = (LPDRAWITEMSTRUCT) lParam; + if (lpdis->itemID == -1) { + break; + } + switch (lpdis->itemAction) + { + case ODA_SELECT: + case ODA_DRAWENTIRE: + g_hBmpPicture = (HBITMAP)SendMessage(lpdis->hwndItem, + LB_GETITEMDATA, + lpdis->itemID, (LPARAM) 0); + + hdcMem = CreateCompatibleDC(lpdis->hDC); + g_hBmpOld = SelectObject(hdcMem, g_hBmpPicture); + + BitBlt(lpdis->hDC, lpdis->rcItem.left, lpdis->rcItem.top, + lpdis->rcItem.right - lpdis->rcItem.left, + lpdis->rcItem.bottom - lpdis->rcItem.top, + hdcMem, 0, 0, SRCCOPY); + SendMessage(lpdis->hwndItem, LB_GETTEXT, + lpdis->itemID, (LPARAM) szBuf); + + GetTextMetrics(lpdis->hDC, &tm); + y = (lpdis->rcItem.bottom + lpdis->rcItem.top - tm.tmHeight) / 2; + + SelectObject(hdcMem, g_hBmpOld); + DeleteDC(hdcMem); + + rcBitmap.left = lpdis->rcItem.left + XBITMAP + 2; + rcBitmap.top = lpdis->rcItem.top; + rcBitmap.right = lpdis->rcItem.right; + rcBitmap.bottom = lpdis->rcItem.top + YBITMAP; + + if (lpdis->itemState & ODS_SELECTED) + { + if (g_hBmpPicture == g_hBmpStop) + { + Button_Enable(GetDlgItem(hDlg, IDC_SSTART), TRUE); + Button_Enable(GetDlgItem(hDlg, IDC_SSTOP), FALSE); + Button_Enable(GetDlgItem(hDlg, IDC_SRESTART), FALSE); + } + else if (g_hBmpPicture == g_hBmpStart) + { + Button_Enable(GetDlgItem(hDlg, IDC_SSTART), FALSE); + Button_Enable(GetDlgItem(hDlg, IDC_SSTOP), TRUE); + Button_Enable(GetDlgItem(hDlg, IDC_SRESTART), TRUE); + } + else { + Button_Enable(GetDlgItem(hDlg, IDC_SSTART), FALSE); + Button_Enable(GetDlgItem(hDlg, IDC_SSTOP), FALSE); + Button_Enable(GetDlgItem(hDlg, IDC_SRESTART), FALSE); + } + if (strcmp(g_stServices[lpdis->itemID].szComputerName, + g_szLocalHost) == 0) { + Button_Enable(GetDlgItem(hDlg, IDC_SDISCONN), FALSE); + } + else { + Button_Enable(GetDlgItem(hDlg, IDC_SDISCONN), TRUE); + } + + if (g_stServices[lpdis->itemID].szDescription) { + SendMessage(hStatusBar, SB_SETTEXT, 0, + (LPARAM)g_stServices[lpdis->itemID].szDescription); + } + else { + SendMessage(hStatusBar, SB_SETTEXT, 0, (LPARAM)""); + } + SetTextColor(lpdis->hDC, GetSysColor(COLOR_HIGHLIGHTTEXT)); + SetBkColor(lpdis->hDC, GetSysColor(COLOR_HIGHLIGHT)); + FillRect(lpdis->hDC, &rcBitmap, (HBRUSH)(COLOR_HIGHLIGHTTEXT)); + } + else + { + SetTextColor(lpdis->hDC, GetSysColor(COLOR_MENUTEXT)); + SetBkColor(lpdis->hDC, GetSysColor(COLOR_WINDOW)); + FillRect(lpdis->hDC, &rcBitmap, (HBRUSH)(COLOR_WINDOW+1)); + } + TextOut(lpdis->hDC, XBITMAP + 6, y, szBuf, (int)strlen(szBuf)); + break; + + case ODA_FOCUS: + break; + } + return TRUE; + case WM_COMMAND: + switch (LOWORD(wParam)) + { + case IDL_SERVICES: + switch (HIWORD(wParam)) + { + case LBN_DBLCLK: + /* if started then stop, if stopped then start */ + hListBox = GetDlgItem(hDlg, IDL_SERVICES); + nItem = SendMessage(hListBox, LB_GETCURSEL, 0, 0); + if (nItem != LB_ERR) + { + g_hBmpPicture = (HBITMAP)SendMessage(hListBox, + LB_GETITEMDATA, + nItem, (LPARAM) 0); + if (g_hBmpPicture == g_hBmpStop) { + SendMessage(hDlg, WM_MANAGEMESSAGE, nItem, + SERVICE_CONTROL_CONTINUE); + } + else { + SendMessage(hDlg, WM_MANAGEMESSAGE, nItem, + SERVICE_CONTROL_STOP); + } + + } + return TRUE; + } + break; + + case IDOK: + EndDialog(hDlg, TRUE); + return TRUE; + + case IDC_SSTART: + Button_Enable(GetDlgItem(hDlg, IDC_SSTART), FALSE); + hListBox = GetDlgItem(hDlg, IDL_SERVICES); + nItem = SendMessage(hListBox, LB_GETCURSEL, 0, 0); + if (nItem != LB_ERR) { + SendMessage(hDlg, WM_MANAGEMESSAGE, nItem, + SERVICE_CONTROL_CONTINUE); + } + Button_Enable(GetDlgItem(hDlg, IDC_SSTART), TRUE); + return TRUE; + + case IDC_SSTOP: + Button_Enable(GetDlgItem(hDlg, IDC_SSTOP), FALSE); + hListBox = GetDlgItem(hDlg, IDL_SERVICES); + nItem = SendMessage(hListBox, LB_GETCURSEL, 0, 0); + if (nItem != LB_ERR) { + SendMessage(hDlg, WM_MANAGEMESSAGE, nItem, + SERVICE_CONTROL_STOP); + } + Button_Enable(GetDlgItem(hDlg, IDC_SSTOP), TRUE); + return TRUE; + + case IDC_SRESTART: + Button_Enable(GetDlgItem(hDlg, IDC_SRESTART), FALSE); + hListBox = GetDlgItem(hDlg, IDL_SERVICES); + nItem = SendMessage(hListBox, LB_GETCURSEL, 0, 0); + if (nItem != LB_ERR) { + SendMessage(hDlg, WM_MANAGEMESSAGE, nItem, + SERVICE_APACHE_RESTART); + } + Button_Enable(GetDlgItem(hDlg, IDC_SRESTART), TRUE); + return TRUE; + + case IDC_SMANAGER: + if (g_dwOSVersion >= OS_VERSION_WIN2K) { + ShellExecute(hDlg, "open", "services.msc", "/s", + NULL, SW_NORMAL); + } + else { + WinExec("Control.exe SrvMgr.cpl Services", SW_NORMAL); + } + return TRUE; + + case IDC_SEXIT: + EndDialog(hDlg, TRUE); + SendMessage(g_hwndMain, WM_COMMAND, (WPARAM)IDM_EXIT, 0); + return TRUE; + + case IDC_SCONNECT: + DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_DLGCONNECT), + hDlg, (DLGPROC)ConnectDlgProc); + return TRUE; + + case IDC_SDISCONN: + hListBox = GetDlgItem(hDlg, IDL_SERVICES); + nItem = SendMessage(hListBox, LB_GETCURSEL, 0, 0); + if (nItem != LB_ERR) { + am_DisconnectComputer(g_stServices[nItem].szComputerName); + SendMessage(g_hwndMain, WM_TIMER, WM_TIMER_RESCAN, 0); + } + return TRUE; + } + break; + + case WM_SIZE: + switch (LOWORD(wParam)) + { + case SIZE_MINIMIZED: + EndDialog(hDlg, TRUE); + return TRUE; + break; + } + break; + + case WM_QUIT: + case WM_CLOSE: + EndDialog(hDlg, TRUE); + return TRUE; + + default: + return FALSE; + } + return FALSE; +} + + +LRESULT CALLBACK WndProc(HWND hWnd, UINT message, + WPARAM wParam, LPARAM lParam) +{ + if (message == g_bUiTaskbarCreated) + { + /* restore the tray icon on shell restart */ + ShowNotifyIcon(hWnd, NIM_ADD); + return DefWindowProc(hWnd, message, wParam, lParam); + } + switch (message) + { + case WM_CREATE: + GetOMCServicesStatus(); + ShowNotifyIcon(hWnd, NIM_ADD); + SetTimer(hWnd, WM_TIMER_REFRESH, REFRESH_TIME, NULL); + SetTimer(hWnd, WM_TIMER_RESCAN, RESCAN_TIME, NULL); + break; + + case WM_TIMER: + switch (wParam) + { + case WM_TIMER_RESCAN: + { + int nPrev = 0, nNew = 0; + EnterCriticalSection(&g_stcSection); + if (FindRunningServices() || g_bRescanServices) + { + ShowNotifyIcon(hWnd, NIM_MODIFY); + if (g_hwndServiceDlg) + PostMessage(g_hwndServiceDlg, WM_UPDATEMESSAGE, 0, 0); + } + /* check if services list changed */ + while (g_stServices[nPrev].szServiceName != NULL) + ++nPrev; + GetOMCServicesStatus(); + while (g_stServices[nNew].szServiceName != NULL) + ++nNew; + if (nPrev != nNew) + { + ShowNotifyIcon(hWnd, NIM_MODIFY); + if (g_hwndServiceDlg) { + PostMessage(g_hwndServiceDlg, WM_UPDATEMESSAGE, 0, 0); + } + } + LeaveCriticalSection(&g_stcSection); + break; + } + + case WM_TIMER_REFRESH: + { + int nPrev = 0, nNew = 0; + EnterCriticalSection(&g_stcSection); + if (g_bRescanServices) + { + GetOMCServicesStatus(); + ShowNotifyIcon(hWnd, NIM_MODIFY); + if (g_hwndServiceDlg) { + PostMessage(g_hwndServiceDlg, WM_UPDATEMESSAGE, 0, 0); + } + } + else if (FindRunningServices()) + { + ShowNotifyIcon(hWnd, NIM_MODIFY); + if (g_hwndServiceDlg) { + PostMessage(g_hwndServiceDlg, WM_UPDATEMESSAGE, 0, 0); + } + } + LeaveCriticalSection(&g_stcSection); + break; + } + } + break; + + case WM_QUIT: + ShowNotifyIcon(hWnd, NIM_DELETE); + break; + + case WM_TRAYMESSAGE: + switch (lParam) + { + case WM_LBUTTONDBLCLK: + if (!g_bDlgServiceOn) + { + g_bDlgServiceOn = TRUE; + DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_DLGSERVICES), + hWnd, (DLGPROC)ServiceDlgProc); + g_bDlgServiceOn = FALSE; + g_hwndServiceDlg = NULL; + } + else if (IsWindow(g_hwndServiceDlg)) + { + /* Dirty hack to bring the window to the foreground */ + SetWindowPos(g_hwndServiceDlg, HWND_TOPMOST, 0, 0, 0, 0, + SWP_NOSIZE | SWP_NOMOVE | SWP_SHOWWINDOW); + SetWindowPos(g_hwndServiceDlg, HWND_NOTOPMOST, 0, 0, 0, 0, + SWP_NOSIZE | SWP_NOMOVE | SWP_SHOWWINDOW); + SetFocus(g_hwndServiceDlg); + } + break; + + case WM_LBUTTONUP: + ShowTryServicesMenu(hWnd); + break; + + case WM_RBUTTONUP: + ShowTryPopupMenu(hWnd); + break; + } + break; + + case WM_COMMAND: + if ((LOWORD(wParam) & IDM_SM_START) == IDM_SM_START) + { + OMCManageService(g_stServices[LOWORD(wParam) + - IDM_SM_START].szServiceName, + g_stServices[LOWORD(wParam) + - IDM_SM_START].szImagePath, + g_stServices[LOWORD(wParam) + - IDM_SM_START].szComputerName, + SERVICE_CONTROL_CONTINUE); + return TRUE; + } + else if ((LOWORD(wParam) & IDM_SM_STOP) == IDM_SM_STOP) + { + OMCManageService(g_stServices[LOWORD(wParam) + - IDM_SM_STOP].szServiceName, + g_stServices[LOWORD(wParam) + - IDM_SM_STOP].szImagePath, + g_stServices[LOWORD(wParam) + - IDM_SM_STOP].szComputerName, + SERVICE_CONTROL_STOP); + return TRUE; + } + else if ((LOWORD(wParam) & IDM_SM_RESTART) == IDM_SM_RESTART) + { + OMCManageService(g_stServices[LOWORD(wParam) + - IDM_SM_RESTART].szServiceName, + g_stServices[LOWORD(wParam) + - IDM_SM_RESTART].szImagePath, + g_stServices[LOWORD(wParam) + - IDM_SM_RESTART].szComputerName, + SERVICE_APACHE_RESTART); + return TRUE; + } + switch (LOWORD(wParam)) + { + case IDM_RESTORE: + if (!g_bDlgServiceOn) + { + g_bDlgServiceOn = TRUE; + DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_DLGSERVICES), + hWnd, (DLGPROC)ServiceDlgProc); + g_bDlgServiceOn = FALSE; + g_hwndServiceDlg = NULL; + } + else if (IsWindow(g_hwndServiceDlg)) { + SetFocus(g_hwndServiceDlg); + } + break; + + case IDC_SMANAGER: + if (g_dwOSVersion >= OS_VERSION_WIN2K) { + ShellExecute(NULL, "open", "services.msc", "/s", + NULL, SW_NORMAL); + } + else { + WinExec("Control.exe SrvMgr.cpl Services", SW_NORMAL); + } + return TRUE; + + case IDM_EXIT: + ShowNotifyIcon(hWnd, NIM_DELETE); + PostQuitMessage(0); + return TRUE; + } + + default: + return DefWindowProc(hWnd, message, wParam, lParam); + } + + return FALSE; +} + + +/* Create main invisible window */ +HWND CreateMainWindow(HINSTANCE hInstance) +{ + HWND hWnd = NULL; + WNDCLASSEX wcex; + + if (!GetSystemOSVersion(&g_dwOSVersion)) + { + ErrorMessage(NULL, TRUE); + return hWnd; + } + + wcex.cbSize = sizeof(WNDCLASSEX); + + wcex.style = CS_HREDRAW | CS_VREDRAW; + wcex.lpfnWndProc = (WNDPROC)WndProc; + wcex.cbClsExtra = 0; + wcex.cbWndExtra = 0; + wcex.hInstance = hInstance; + wcex.hIcon = (HICON)LoadImage(hInstance, MAKEINTRESOURCE(IDI_APSRVMON), + IMAGE_ICON, 32, 32, LR_DEFAULTCOLOR); + wcex.hCursor = g_hCursorArrow; + wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); + wcex.lpszMenuName = 0; + wcex.lpszClassName = g_szWindowClass; + wcex.hIconSm = (HICON)LoadImage(hInstance, MAKEINTRESOURCE(IDI_APSRVMON), + IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR); + + if (RegisterClassEx(&wcex)) { + hWnd = CreateWindow(g_szWindowClass, g_szTitle, + 0, 0, 0, 0, 0, + NULL, NULL, hInstance, NULL); + } + return hWnd; + +} + + +int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, + LPSTR lpCmdLine, int nCmdShow) +{ + CHAR szTmp[MAX_LOADSTRING]; + CHAR szCmp[MAX_COMPUTERNAME_LENGTH+4]; + MSG msg; + /* single instance mutex */ + HANDLE hMutex; + int i; + DWORD d; + + g_LangID = GetUserDefaultLangID(); + if ((g_LangID & 0xFF) != LANG_ENGLISH) { + g_LangID = MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL); + } + for (i = IDS_MSG_FIRST; i <= IDS_MSG_LAST; ++i) { + LoadString(hInstance, i, szTmp, MAX_LOADSTRING); + g_lpMsg[i - IDS_MSG_FIRST] = _strdup(szTmp); + } + LoadString(hInstance, IDS_APMONITORTITLE, szTmp, MAX_LOADSTRING); + d = MAX_COMPUTERNAME_LENGTH+1; + strcpy(szCmp, "\\\\"); + GetComputerName(szCmp + 2, &d); + _strupr(szCmp); + g_szLocalHost = _strdup(szCmp); + + memset(g_stComputers, 0, sizeof(ST_MONITORED_COMP) * MAX_APACHE_COMPUTERS); + g_stComputers[0].szComputerName = _strdup(szCmp); + g_stComputers[0].hRegistry = HKEY_LOCAL_MACHINE; + g_szTitle = _strdup(szTmp); + LoadString(hInstance, IDS_APMONITORCLASS, szTmp, MAX_LOADSTRING); + g_szWindowClass = _strdup(szTmp); + + g_icoStop = LoadImage(hInstance, MAKEINTRESOURCE(IDI_ICOSTOP), + IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR); + g_icoRun = LoadImage(hInstance, MAKEINTRESOURCE(IDI_ICORUN), + IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR); + g_hCursorHourglass = LoadImage(NULL, MAKEINTRESOURCE(OCR_WAIT), + IMAGE_CURSOR, LR_DEFAULTSIZE, + LR_DEFAULTSIZE, LR_SHARED); + g_hCursorArrow = LoadImage(NULL, MAKEINTRESOURCE(OCR_NORMAL), + IMAGE_CURSOR, LR_DEFAULTSIZE, + LR_DEFAULTSIZE, LR_SHARED); + g_hBmpStart = LoadImage(hInstance, MAKEINTRESOURCE(IDB_BMPRUN), + IMAGE_BITMAP, XBITMAP, YBITMAP, + LR_DEFAULTCOLOR); + g_hBmpStop = LoadImage(hInstance, MAKEINTRESOURCE(IDB_BMPSTOP), + IMAGE_BITMAP, XBITMAP, YBITMAP, + LR_DEFAULTCOLOR); + + hMutex = CreateMutex(NULL, FALSE, "APSRVMON_MUTEX"); + if ((hMutex == NULL) || (GetLastError() == ERROR_ALREADY_EXISTS)) + { + ErrorMessage(g_lpMsg[IDS_MSG_APPRUNNING - IDS_MSG_FIRST], FALSE); + if (hMutex) { + CloseHandle(hMutex); + } + return 0; + } + + memset(g_stServices, 0, sizeof(ST_APACHE_SERVICE) * MAX_APACHE_SERVICES); + CoInitialize(NULL); + InitCommonControls(); + g_hInstance = hInstance; + g_hwndMain = CreateMainWindow(hInstance); + g_bUiTaskbarCreated = RegisterWindowMessage("TaskbarCreated"); + InitializeCriticalSection(&g_stcSection); + g_hwndServiceDlg = NULL; + if (g_hwndMain != NULL) + { + while (GetMessage(&msg, NULL, 0, 0) == TRUE) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + am_ClearServicesSt(); + } + am_ClearComputersSt(); + DeleteCriticalSection(&g_stcSection); + CloseHandle(hMutex); + DestroyIcon(g_icoStop); + DestroyIcon(g_icoRun); + DestroyCursor(g_hCursorHourglass); + DestroyCursor(g_hCursorArrow); + DeleteObject(g_hBmpStart); + DeleteObject(g_hBmpStop); + CoUninitialize(); + return 0; +} + + + +TCHAR* getProcessName( DWORD processID ) +{ + TCHAR szProcessName[MAX_PATH] = TEXT(""); + + // Get a handle to the process. + + HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | + PROCESS_VM_READ, + FALSE, processID ); + + // Get the process name. + + if (NULL != hProcess ) + { + HMODULE hMod; + DWORD cbNeeded; + + if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod), + &cbNeeded) ) + { + GetModuleBaseName( hProcess, hMod, szProcessName, + sizeof(szProcessName)/sizeof(TCHAR) ); + } + } + + // Print the process name and identifier. + + /* + _tprintf( TEXT("%s (PID: %u)\n"), szProcessName, processID ); + */ + CloseHandle( hProcess ); + return _strdup(szProcessName); +} + +void populateProcesses(void) +{ + // Get the list of process identifiers. + + DWORD aProcesses[1024], cbNeeded, cProcesses; + unsigned int i, j=0; + + if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) ) + return; + + // Calculate how many process identifiers were returned. + + cProcesses = cbNeeded / sizeof(DWORD); + + // Print the name and process identifier for each process. + + for ( i = 0; i < cProcesses; i++ ) + { + TCHAR* szPName = getProcessName( aProcesses[i] ); + if (stricmp(szPName, "omc.exe") == 0) + { + g_stServices[j].dwPid = aProcesses[i]; + g_stServices[j].szComputerName = _strdup(g_stComputers[0].szComputerName); + g_stServices[j].szDisplayName = _strdup(szPName); + g_stServices[j].szDescription = _strdup(szPName); + g_stServices[j].szImagePath = _strdup(szPName); + g_stServices[j].szServiceName = _strdup(szPName); + j++; + } + } +} diff --git a/tools/OMCMonitor/OMCMonitor.h b/tools/OMCMonitor/OMCMonitor.h new file mode 100644 index 00000000000..0efcaee2dd1 --- /dev/null +++ b/tools/OMCMonitor/OMCMonitor.h @@ -0,0 +1,77 @@ +/* Copyright 2001-2005 The Apache Software Foundation or its licensors, as + * applicable. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file ApacheMonitor.h + * @brief Resource definitions for ApacheMonitor.rc and ApacheMonitor.c + */ + +#define IDD_DLGSERVICES 101 +#define IDS_APMONITORTITLE 102 +#define IDS_APMONITORCLASS 103 +#define IDM_RESTORE 104 +#define IDM_EXIT 105 +#define IDI_APSRVMON 106 +#define IDI_ICOSTOP 107 +#define IDI_ICORUN 108 +#define IDC_STATBAR 109 +#define IDC_SSTATUS 110 +#define IDB_BMPSTOP 111 +#define IDB_BMPRUN 112 +#define IDB_BMPHEADER 114 +#define IDL_SERVICES 115 +#define IDL_STDOUT 116 +#define IDC_SSTART 117 +#define IDC_SSTOP 118 +#define IDC_SRESTART 119 +#define IDC_SEXIT 120 +#define IDC_SMANAGER 121 +#define IDD_DLGCONNECT 122 +#define IDC_LREMOTE 123 +#define IDC_LBROWSE 124 +#define IDC_COMPUTER 125 +#define IDC_SCONNECT 126 +#define IDC_SDISCONN 127 +#define IDS_MSG_FIRST 256 +#define IDS_MSG_APPRUNNING 256 +#define IDS_MSG_ERROR 257 +#define IDS_MSG_RUNNINGALL 258 +#define IDS_MSG_RUNNING 259 +#define IDS_MSG_RUNNINGNONE 260 +#define IDS_MSG_NOSERVICES 261 +#define IDS_MSG_MNUSERVICES 262 +#define IDS_MSG_MNUSHOW 263 +#define IDS_MSG_MNUEXIT 264 +#define IDS_MSG_SRVSTART 265 +#define IDS_MSG_SRVSTARTED 266 +#define IDS_MSG_SRVSTOP 267 +#define IDS_MSG_SRVSTOPPED 268 +#define IDS_MSG_SRVRESTART 269 +#define IDS_MSG_SRVRESTARTED 270 +#define IDS_MSG_SRVFAILED 271 +#define IDS_MSG_SSTART 272 +#define IDS_MSG_SSTOP 273 +#define IDS_MSG_SRESTART 274 +#define IDS_MSG_SERVICES 275 +#define IDS_MSG_CONNECT 276 +#define IDS_MSG_ECONNECT 277 +#define IDS_MSG_LAST 277 +#define IDM_SM_SERVICE 0x1100 +#define IDM_SM_START 0x1200 +#define IDM_SM_STOP 0x1400 +#define IDM_SM_RESTART 0x1800 +#define IDC_STATIC -1 + diff --git a/tools/OMCMonitor/OMCMonitor.ico b/tools/OMCMonitor/OMCMonitor.ico new file mode 100644 index 0000000000000000000000000000000000000000..059d7334bc45182cd3c8cc6caedb1277ff100fa0 GIT binary patch literal 1078 zcmc&yF;c`Z4BQ;dI2BGxx>U?PgD08FM|JKfkCxx$Ih5{_tHiENxJ!x~W++f1%PXyv zSQgM=hhgXd+~acxJaN}`74IA1;SSi-H&CCc4S7Y#T|{hYl?3obO4V@X7UMY5Dq!V> znRZk@atYs*ZFqz87W;KIZ1Fn0O<&Xbqu1$(FxbZ7FFk$(DgT5z52#Q(e;tIi)2J4*Q-zcs#%~}AS zC;NH}>Z6W3yHH~%VY8{V3!v+7{U}d0F49fiA*l k^BOd7-s^s8Q7wC3aB{M|3h{I^$IQ!`RB%1r4E;&I02fQ*vH$=8 literal 0 HcmV?d00001 diff --git a/tools/OMCMonitor/OMCMonitor.rc b/tools/OMCMonitor/OMCMonitor.rc new file mode 100644 index 00000000000..569fb765a8e --- /dev/null +++ b/tools/OMCMonitor/OMCMonitor.rc @@ -0,0 +1,204 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "afxres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// Swedish resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_SVE) +#ifdef _WIN32 +LANGUAGE LANG_SWEDISH, SUBLANG_DEFAULT +#pragma code_page(1252) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_APSRVMON ICON "OMCMonitor.ico" +IDI_ICOSTOP ICON "apstop.ico" +IDI_ICORUN ICON "aprun.ico" + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_DLGSERVICES DIALOGEX 0, 0, 341, 158 +STYLE DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | WS_MINIMIZEBOX | + WS_VISIBLE | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_CONTROLPARENT +CAPTION "OpenModelica OMC Monitor" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + DEFPUSHBUTTON "&OK",IDOK,262,46,50,14 + LTEXT "OMC St&atus :",IDC_SSTATUS,1,1,228,8 + LISTBOX IDL_SERVICES,1,11,230,73,LBS_OWNERDRAWFIXED | + LBS_HASSTRINGS | LBS_USETABSTOPS | LBS_NOINTEGRALHEIGHT | + LBS_DISABLENOSCROLL | WS_VSCROLL | WS_TABSTOP + LISTBOX IDL_STDOUT,0,89,231,51,LBS_NOINTEGRALHEIGHT | + LBS_DISABLENOSCROLL | LBS_NOSEL | WS_VSCROLL + PUSHBUTTON "&Start",IDC_SSTART,262,67,50,14 + PUSHBUTTON "S&top",IDC_SSTOP,262,86,50,14 + PUSHBUTTON "&Restart",IDC_SRESTART,262,104,50,14 + CONTROL 114,IDC_STATIC,"Static",SS_BITMAP,238,0,100,40 + PUSHBUTTON "E&xit",IDC_SEXIT,262,126,50,14 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Bitmap +// + +IDB_BMPSTOP BITMAP "sstop.bmp" +IDB_BMPRUN BITMAP "srun.bmp" +IDB_BMPHEADER BITMAP "OMC_header.bmp" + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +1 VERSIONINFO + FILEVERSION 1,0,0,0 + PRODUCTVERSION 1,0,0,0 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE 0x1L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "Comments", "Copyright 2006, Adrian Pop [http://www.ida.liu.se/~adrpo, adrpo@ida.liu.se]." + VALUE "CompanyName", "PELAB/IDA/LiU, Linköping University" + VALUE "FileDescription", "OMC HTTP Server Monitor" + VALUE "FileVersion", "1.0" + VALUE "InternalName", "OMCMonitor.exe" + VALUE "LegalCopyright", "Copyright 2006, Adrian Pop, [http://www.ida.liu.se/~adrpo, adrpo@ida.liu.se]. Portions of the code belong to Apache Software Foundation." + VALUE "OriginalFilename", "OMCMonitor.exe" + VALUE "ProductName", "OMC Monitor" + VALUE "ProductVersion", "1.0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END + + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" +END + +2 TEXTINCLUDE +BEGIN + "#include ""afxres.h""\r\n" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO +BEGIN + IDD_DLGSERVICES, DIALOG + BEGIN + RIGHTMARGIN, 338 + BOTTOMMARGIN, 155 + END +END +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE +BEGIN + IDS_APMONITORTITLE "OMC Service Monitor" + IDS_APMONITORCLASS "OMCServiceMonitorClass" +END + +STRINGTABLE +BEGIN + IDS_MSG_APPRUNNING "OMC monitor is already started" + IDS_MSG_ERROR "Error" + IDS_MSG_RUNNINGALL "OpenModelica OMC is running" + IDS_MSG_RUNNING "OpenModelica OMC is running" + IDS_MSG_RUNNINGNONE "OpenModelica OMC is stoped" + IDS_MSG_NOSERVICES "No OMC running" + IDS_MSG_MNUSERVICES "Open &Services" + IDS_MSG_MNUSHOW "&Open OpenModelica OMC Monitor" + IDS_MSG_MNUEXIT "E&xit" + IDS_MSG_SRVSTART " %s is starting." + IDS_MSG_SRVSTARTED "%s has started." + IDS_MSG_SRVSTOP "%s is stopping." + IDS_MSG_SRVSTOPPED "%s has stopped." + IDS_MSG_SRVRESTART "%s is restarting." + IDS_MSG_SRVRESTARTED "%s has restarted." + IDS_MSG_SRVFAILED "The requested operation has failed!" +END + +STRINGTABLE +BEGIN + IDS_MSG_SSTART "&Start" + IDS_MSG_SSTOP "S&top" + IDS_MSG_SRESTART "&Restart" +END + +#endif // Swedish resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/tools/OMCMonitor/OMCMonitor.sln b/tools/OMCMonitor/OMCMonitor.sln new file mode 100644 index 00000000000..b64ce2aa271 --- /dev/null +++ b/tools/OMCMonitor/OMCMonitor.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OMCMonitor", "OMCMonitor.vcproj", "{04D8E975-04D5-4CD2-8D58-464E05CD6863}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {04D8E975-04D5-4CD2-8D58-464E05CD6863}.Debug.ActiveCfg = Debug|Win32 + {04D8E975-04D5-4CD2-8D58-464E05CD6863}.Debug.Build.0 = Debug|Win32 + {04D8E975-04D5-4CD2-8D58-464E05CD6863}.Release.ActiveCfg = Release|Win32 + {04D8E975-04D5-4CD2-8D58-464E05CD6863}.Release.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/tools/OMCMonitor/OMCMonitor.vcproj b/tools/OMCMonitor/OMCMonitor.vcproj new file mode 100644 index 00000000000..6a4612e0a2e --- /dev/null +++ b/tools/OMCMonitor/OMCMonitor.vcproj @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tools/OMCMonitor/OMC_header.bmp b/tools/OMCMonitor/OMC_header.bmp new file mode 100644 index 0000000000000000000000000000000000000000..63bc02afa31621468769e33d602e067bb0a110ff GIT binary patch literal 29434 zcmd^I2V7Lg)?ca>q}m%Qpa|G|if9xIHjFJMnxHWzQD2O`MzMDjjhbo_jWHU#*t=K| z>@?|BdS?q|m+wDwc85z96EWZWy$KF8=bnD%OxwGp-?02IWxRAp-4_3L;hzis>B$d6ND3tD{)vHVjRrrjmM3Xd6`q76lYv65R#Pn+q6^4> zFHmZlut*9d>nbx)qY;FJT!I|Y%ge)$^wEoXO1v#4tW1!OX$k2%J~COUc$eye2<7hq zF)&E>-yXa`BQ~Xe(BdzhTC3G=X}E+SDe%Sq2DWY%EgM5E`M*Dx(z+;? z-cns|16$eA5I7YAk%4)63Z+t&r_9aCWm9QZes-EXJvA*oJ|i*?=oz2PZ{NPD*-Wc4|s|!t<1*#F+T_ z$e6g0(3sH3r#V?U1x1)vt9Ks&PY4mzF53mU|3d9vZXp>$VMc7G@7*J)Uepl zu&Bteh=|7le*RAb1N_;44}9;$M8|20ijaR&*9w1=`qD?jpsE0+ID)4X_)^>|R|ZR> zHiq2yK&~c1g0pB;XAH?`*rF*?r)T6+`UO0B92gMz=#j6V&(+&ce0&~yC#Lc+N`{^A zH*xse&X5uco>HJz!`I^Pe`rg&S=;6bMk8a=c zy?yTbrXF^1gQGj<@%nn>T##-nen&a!y9^@n86xeEbq#mn1XyJ6mQ;k(cULE`n{c zC^A)up(;0*xK++ms3eeIN+l^d5x#~P>b%HQ)~FL>qx^iYUH86s_SVf?cYS?sUA}(q z;@K-_eeOR{Waa=@sv{%Ok(0gzsUlG78$m7wz7#h?u8dr;+aqh2SDpYZm+p085jnuqUj1ohuP zaFASS4W^~KB<8;qNNT^vJcPFpLacd3nxgpFs4HjAojZT_{Mj>SPkNm^ed?^&nFEJ@ zKYRIFR$2-IO~|igm}=$f26U-z2XO>|!sPvTQf9_AyuC|q53 za06mK`?R`%eVVJY01e=X8VxF(lw+a=PW*>`4$N9~*$qT=)Zvkl=g*%xcKn2w*QpaH zP98XV^7QEwS8rTRPEN&bIQHp4Vluc~VyhFveiJtdPc0A-RX(=)j1Y2xhgwQrAz@(& zwLzGdpU340wTtC4@hD6~9S|S4<>s=EuHZSEqGn1!CHN4W;Slu8!{j8)K@3wzPEmj? zMhH3`DKRgZhq#R{EJTI*44EJXkD7saVV`L03M7burGu%#Rfk*pw+2THzT9C{U}41L z=h4w8PaOa2=!p}jPx|>iEKuf`rjhhXoDfv5bTv}EqN3BhTtaA85gp({sIV6!T;OwG zmE#H_2n~T;szICuCc02l;0ST7A(2Q_;;Al%@I7G9<6|a_dw<1>mH6=EE6N$BcY; z)F}5MLqR!onA^zVBZj&T8*uabRd|4?gqdJ<^3<6@0|sp0zP(VbeV;}s12n<}1QLqW zMfYz#{LhRTob7O?(!fC@hYf!k7>Kb9&P1rK6{@WpHxKAH;Lkq~Bb>-xgb!(nyxRNw zFa6$j`EB1XU`|v-B8ee14GZ%(w>GI$yH0FuEGZ6?VfYubzrc%)jT$xzj|_+UQa2DA z;tG;Gj~_L$YYt@ddX{hZadGY2f9L>Ln^x>a$-!gX^0E|#%#YeIVxC4+m8nWhW1zi$ z?{0ld?MsvnZQHxLyaU=E-Mbm+8(NxMUA}OQRAT-qvo1j;JbmKt-`Kh_WYxE_9@xKM z-~KLx`VM%bXRofEoqc>BApfyvVzPDQ%srei;%Q_{+ZG@+tzBneUzZ{M2KIlmZ~wjn z+Bvk{v+G-igfXsD8$O4unV-%8zKu=W=$J%OOt^weU~3RDKY#9mwUsrHEv+qF-t6o8 z);q3m_ix|U{<|GJa4M!5l~e*BWr}K`>i{5k@6;ndSB1CcRM5GgASNWfm5mMHqehQp z9@I_5AS@Zf`1tr1t(#g{SjNT073)<{uypY<1ATo*Tf4~Uietz#cF~IEGDDf3p5DgI zo8);YxtNMBUb$jrW(E1Tuie%ZKzO=z79{4?L;DYbiN3z!H=DOY92R-d5@E?0#>K|AtZ!p(VU8GLhM|QQFEcG(x=>~y zYtyn-WK=lmD;Q|ygC8HzYuB$fGB7kWGQ4=@BIIKY2A@;=51X2p8r3kmbm=?@5wT)& zKAs>5Z0|nwwX?N@rYlx2!~BEA8-WcD4DQ&mBY>ZL@tH<}SLE2>E+*%GMVA3Jnuy2{ zyVi`u%H^KOaqMn5d$z)mo?1+u^%y}+ZM8b^aaf| zD29s{EdaiA`?jHB&$v(6_#$MgSr^C}_00K8fa&DiAtpWr3=tX~o-O$|J0x{$) zu~-ynBibqMpb zk+I>`YZsZhWyr}Zw;%YmX~QD0{Hvvfay7PvpbZQPbaHkE@YC5dG`VauBqWkt)F{Lu zBp}qbr7e)RY~D;xqM8&WOer}di6JTtUYAt8gI;Eb^&&r>c~u-E`u zuCH%lVq#g>q<%d!V?BK^>Di-OUJhH2bels)C^=i8hh?yNv!=+y*w`3YuPDf4C+@t$ z#S52#flbSnQBmPQ!;}QEq&3yN%LdiP&1-8I)-W{C`|I3sU@CbGj~qE4BFe;hVi+yY#uUqu+Jwnt2|d58{$8s3+K;abYd<=eeCGrI(6zA z)-bqo@rnjhoMb%&6=^G6)csh5%QeZlDa*j@X4nj)7vY0{~a3bSEUHbL~ z)ek@X4F7M~vkl*wv8-nq8XCkn=%xlDDVc|eVWZYo%^Ek4i;W*KVkCGVpKo8gxpwtx zv~6u#BM;g1P);850iB~+H-48KIO6;4)70g za%A59^vlnfqj<`Z10WO))T}{y7#3=4!`8z!E7rmd(o&2mvWuVkp$wA}64v2OClI=i z8keK2QXVdv&Gt0y+O@-Z7#t`9qzu(eA{$%g2sl|yp~1kt>?U&2)>x$FMjYYu&n% z7(x;3OINMiU?4L>%AGlVN~FQgA9rIEAh74oorbwQnr*v8n^LQ@k~3n1!?F0n!(=^xq<=(ssC{dDAa7l@QAnqT82F_f zM*Gs(u=a0sgpFg|$Gb2 z^z1QX$Jeb>yLYc1*r1Lc>V_i)q7P%GnCO;_VRUp<6RY|NU^mAGLC^g8FwFP8cehK= z&Hy%R(kwbUg7g)fB>dQbzIDr|&s%Ihw70RFGG*$AQ#>ZU_mM?YcEE3BZ5_7(!NZ^wI2Y#>|F>z$B zf=vo|gd)sDg9?B|GH32g2x@O*8yyrzJ|TP^A`^syM+c7{Zptr#dUbtc+O+8&Q>Kg^ z_uiI`oATsr159Yt5F#KMcWfIrZPLSDhL;6v`TFvL7-B9;PD&m%a+ICD(~*;>F=C)B zEBOV-j~simSI^$vdWM7qbA5|P15^-_p%9Yn-c$eod@-+gryiYpIdyh&?(FE?p{L^; zZ@l^I-k*^=Y%-VlhT0GUw)X>qCVEWn)2;U#J>KZt!MU@ubEn=;U7R}h>ixz?Gd*JC zqLumTT#?nk40cJI->SJy5*J9c*H*tKJ4 z`(|z0cj*|DngEN~c8p)u2pvF*U0O^y`^HA%PK%u_Sb-i~9~~ycR%!As-MZ~DX==9)ojW?T@7cMhU5n-;MvY3(R%nPGrh0#YL<%){ZlG4B4z5D%%vnEfT`1!!gJ*c0tf8iva_>b zNkl|Mp_1K}l)|L0bYu_LY0e&58Q||Cfjm3 zU?ip|CLK89m5|I5Qs85hLOAbg2{C8^0k^Um5+p#fc zyoJo5ao4VIZT;p)ID_~Lax_q+23AFoz$avIK!a-0D3ymLg)pJK2u?Zx`%OSJvNDz7 z;i-uUIRYpiF+3gSKLfI14R6KAB`#UKbf~M__(@|&jTkm+;HaVR3|_N#jWS1j_=ROc z5H&=NMnRr(&(1wtc5VeL)}`V4LJhgw%G!buLR@@oXyewnFK=Ai*u7q@FAZeFjAbsz z4xizRWU+{{<2&#drL5ZY2=k;ushB-?*7x5bRkSmz zP#8EuX90vY_^3g5%Ur@1x=Gyk#~CA|zE-t7>(&0Dw#iXb%Of=m_fGrlFwUpg(B&ekY+=QQ`Z~_X56bEez zqdYrn-G(ispt{uBDqvG3C#F-YlQsh_;5W3*U{_nWFbN8+f z=I2uT58#Ue9T4-}1jW&lr=F*zV6*~)l@JK*5!(T>-Q!;eed`)eH#OOBY#wZ37G-G_ zuBUf(`cz+JDX<8$1Wz6LKL--?D#Q@;4Q_||J2qIA*$E9@P!j`6Jon*;WwJ$o9thxr zn_0$9WKlvPOz^=EIM5GYwzW)vPy7j!)jEhEr$^{g7;{vLHJ+=wb?NT*&S00fUHZS> z57(+2H*L;^ZcI>#0V0^7L18?0`fR_UL-DOvLKFX zDHM51C4P`;Y(j&}$xnzOlpW`OL?&Cf@0TZdiob&)SEzWP@ENeymykxwze0)2uL68U znm7{^pfS!$0JZpd3J89D{Y$?_OrWBk>4*}Bz|_g7O-+}dJpK$gIXUbg^w*z(rlwy_oy;!mxQNn| z65;^o;XAmiR<7vKv18AkJ-c=9*0EE^4(*(G{JM(`hVrtJlwmPctCPcHakV#V-b#qT z9VQP9i@7M|As}P&iHr>H(7D^8Lta2eCW{yX8Eu>;0GH?FWu?opA;m(AE()6xbkQcZ z)O}Sz;!|-9NztIdl%|ch;m+Jxwzh_B9exaC_#A4nYu^LNCAc3cg!F zWH@V4<9!I3Y}xLeey{<7fp&IvLn2MLVy8ND+D(8!g zX5Zc?GTD+AO~1KuJsO(Q;1}K{&%r}juavp+HLF(HwXy5giN(;NokOcet+s95!dys6 zEXhV9L`^g5dGE6|YZ-6aumQ-F@ufs)1@XPqp%eQZ@riF_I78;Ac!5m5!g>jFFbr_4 z55v1KL4h2TjTcd>Cx&FGFjsUD9JpZP+FSTs-B^Fkt{r}{F`4-J?Bg?bHs8YK1N!dE z$;sm@A6%(!XtuSE!TJY&&*NgV?)%2S)$`ZZ&34LUOTA8oz=>No-a)%jgKbE*=*Wzi z=*+i!{krE{KNtrov9XzrEZ9g14@<*{P%83~=VM0vg`4-CU*BU8KFz`bqCh!Li!d^$ zt?*o7Wo_NDeMcu}r`D}nw`$RH@4oNhLa{cMHIU6Rh3Zdde1iMPUw-?M`I~1W*pd|C z3Uo1r0%6wN`8~S#z@Pj;tS|>@@k$;|NU@0UXVa(83J8A8!>FBp!AHtdYKwUEQb6KX zaUMd=v{X4#tCr#VpT2(xT||kE$?E9zJ!0$9XJ33=7K~0!k(<@rSjS*PQeqC!=(1$g zP^|RJMh-cI7_MLKt*19{*}|)W2{qsega~zglP$IM*C!-oQw;HR;=9LWvIPhBJw+Q! zD2#(3QK(C%V{OEp)K_a(wrJYS&d$!Uy<;1P)@|&Y|Mv4fy1WLJAQyyiC}f3)MYU~h zU$1VxKaL!SARzJ|CP!eR4e_XxQZt&`GH1_>2!u>1lGSx?AcQZ^DX%Y(Zv%NTtk!f~hIFmL{7qH%9Qx z$;?o+Z@s&g{yMB?ur^P{)(rorNtPyC5Ne#Gwr#qrr?DsCAnHX-Q(ka{RUv$1fH}umclGoP}PCN zt>Qey7)1=NO}3gCZNyxME}Tt61PURHUwnREU*B`f#yfa~P+T|{j*#yE^$EIID&YvA zH#FN;+h{$MTJ_Zp1k<7x!j5$k@0Z|py=9m@*Lr$`6-clF0=##Zz35_t3UbV!*dgi3 zR%7cUm0s>JB@cmi#p<>7jOw&%(Y&dneSK4_`VA}(pFaUOy^sl7C?l=W#Q+&K(j7Bu z?V7a?ALqy=FRg_{_zbK*n#MkqT{Le2+ITmJTrPMLGBB~g$mPm5_O=UFFw7EfWO5w{ zQxKA3F9jr$N@Iv*!&U})D3`OnB4S9gkymIu3r8f;Tike`vBF=g6R)0(CYO)VO=X;aInR?}8ZZ``^8 zj+9``yF8L0VO0Fp)`N%k>l+y$GEJK_dgSK|WS+W&qK!ErV+{B{3b1O_uvTrOZ@y(a zCvXrvNj)ON=>nek;rkzr^$maB`zyo5sh|0f6=4V|BWeLBoXRojX~i*wnA{xIFxP{% zjn*7L%3qA+hdl^^(g@V8n=y!C7pEW5Mmc{b%+O$U-P-FXO*oE|0e-M+LDuzub6;{2 z3(LYeml3g+4Zp#*=B!ufnbV;kPdPQ~AFr0Qv}t+y`W3Agx&MT3;C{5zUDB zr*;GhhG-CBDe|fS38&&1;_wcc7ugKCpjYR;Xwy9!WMXx}To>>(S;P>@@as>H5RkeC z8)ULoAicr7t&|-E)J@-EsYZ$Eonhs%UvxeV1e8ApyKYbEuyr@CFt@TZ| z@@W?2ixG3o*ceJ|X09j?CEkEd@EoQEl}b5zk_X&uQKxP_QxhY7eOsGWw{G8t4!B|f z8Vb>&f%kg=zj)ztt(vv))&r=THfr|R_W?uZ-+PltU`rpmabXem4(vtNTE<4(zx@H2 z2n0P6$lweJ9v%4Y4}F=QT_^jHxG+2gP)H|a>i!KNkyIQ*K0_4VxE5tvccY=qsFtxBcTsA9-)g(UcVYyv&ffBT69SZl*{xWyTDk;j1O6R(dYxMzCXN2~6n6UYk_)>+1rvX;Y^%KzY%w z$QB?Ah5|flJee9o*3un8%F`nSE0YZ$J@hGY9?_WCWRc>v2T z>?uuOd?_e{gBPionmV|4E!B1DBWH#n6h~WhD+2Q4zq(LWlg|GNw|=RF^SJBj~qT=RMQxkdiv}& zdJm78ISMwkk=5jO(hXAJf#n-k0@0$5Y3Q?XbfuzSXp2rq_M3PLtEo}(*@B*9GJ#%L z`poKW!j`3dn?3d|ceQJ^yIu`Mby)-Rtw~Av@+)p1*~tTwEq-7w&LX_6UBIC-xKWJ; zp%D&{0YL!@;MkI*O$eyLlRql187eQOc$NZ^xrii`-}n2^mS&cSOpQA14NH`zix*{P zWa1I!7-*q1YJ439=?4Vl7EP*nC27IDg~}X`43WGLa%fmc)22-sGE$Le<8b#;;oXz-+SRVWj=S}=gqr-C5|t5 zp15>dwCK{~hlvOv>?cgrP(jrHIuNdbbKulFckgxS*cC3s+l0*JGFh))eXifUhDWTh z7poXrWN2_}o7T+LydcAXj^=Pz7w`K%9F7Q~08PM$WI z($B=WPB-VyseUMTR8XbZC||gjHNvxHfHKalNf@YmKzuv8nQgc1?+_P$6vc~ zjc$nx)I~RMc{@9>?;xPK^m-fqeC>Hi0|m(@B1zF>Qy-fHij(l43@OmQa&poQHH8ss z|Mb&u4Vv4MJE^uXw{Yp-_uX-$I&|nj5QNd%($eRS_m4Y%wBhfC3VeJMcBtFnk)wyV zZKI6|vfA3*de0BL2lnqT(9p1~XEA7q+r$q&#=Q4|1)s?c4A_p>eeCFeBM;#Nku!)S zo1jp$#^0R9!BEPRx>Ubfo`M@j2Mv9MF(4#j#>~%6EKH;>r#7NzV8}e(=Z!vT8Re)g%gW$}V09N*U2?y}D{yb-EY;mhQ#T)1?8 zlE^Pm3ZCsxhbyYi(9=I_sDOvhh05GpY*@FLYy z2dmP~f(ZYYVhH!}9T+>WQgEI;e!O$n){)~z^z7Et$T5n-ua!&!2XVojxCxuZ_%WA z&+fgp?fJGKOF^p-`TnKCMaZS1{XZE)9!8c4Y--h=X|avO|3xJ`HC3g=D*@fRXlGzGvZu`9YtuJECJw)5VE1Bi_7Ig zt3vV@DaqsEqm<&u%V1{rtPHK45-Q&VJe(SGd1_#s?irnniIFi=O^mr9KwR>pgYEs( zOvJU~HjeSyA?NAYS z>W);MlQZ*!kmu1-{e@6_u02-MxaWcXD5~jX3EXjd+-Wz|bbqzy+OlJjckO+h?fD@4 vkpny3?B|#(*AxLG2({=iRQXXl;Uy% zV&0pzA!$wmo;|bk=3{rYGeCkJ^!q&kyZF5W9MkIcA|E8cj}#ct*QflXB+N4~w}Y}J z5gyp(juEd8*7%~WmhEPrD*x>%gI8}@vwA_>5(sif}3?$l82N0R(@e^|BFau)> zxBLuD$lt4xLk_!HSHRU#Vu8I>M?Ny>&Rn~tk8WqFCF`6Xx>VFM+PFQcx2@y*tIWms zZr$?y2b_T|6c@`?bGKY<$uwOwx9Os&l2zgH^0!7Id8WKl)-}%8r<%69Zaqq$(#^T2-9a%)gtvBnWzN~Y zP&w%kejUU$YIRyrhXsv-`PjpXZ4H{XTx7%*qflk^afm8***mCZ0Xc_lM6ZP>>i;(4 I{lBi?0H<{Q`Tzg` literal 0 HcmV?d00001 diff --git a/tools/OMCMonitor/resource.h b/tools/OMCMonitor/resource.h new file mode 100644 index 00000000000..8d410dc9b8e --- /dev/null +++ b/tools/OMCMonitor/resource.h @@ -0,0 +1,1259 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by OMCMonitor.rc +// +#define SW_HIDE 0 +#define HIDE_WINDOW 0 +#define WM_NULL 0x0000 +#define WA_INACTIVE 0 +#define HTNOWHERE 0 +#define SMTO_NORMAL 0x0000 +#define ICON_SMALL 0 +#define SIZE_RESTORED 0 +#define BN_CLICKED 0 +#define BST_UNCHECKED 0x0000 +#define HDS_HORZ 0x0000 +#define TBS_HORZ 0x0000 +#define TBS_BOTTOM 0x0000 +#define TBS_RIGHT 0x0000 +#define LVS_ICON 0x0000 +#define LVS_ALIGNTOP 0x0000 +#define TCS_TABS 0x0000 +#define TCS_SINGLELINE 0x0000 +#define TCS_RIGHTJUSTIFY 0x0000 +#define DTS_SHORTDATEFORMAT 0x0000 +#define PGS_VERT 0x00000000 +#define LANG_NEUTRAL 0x00 +#define SUBLANG_NEUTRAL 0x00 +#define SORT_DEFAULT 0x0 +#define SORT_JAPANESE_XJIS 0x0 +#define SORT_CHINESE_BIG5 0x0 +#define SORT_CHINESE_PRCP 0x0 +#define SORT_KOREAN_KSC 0x0 +#define SORT_HUNGARIAN_DEFAULT 0x0 +#define SORT_GEORGIAN_TRADITIONAL 0x0 +#define AP_SERVER_PATCHLEVEL_NUMBER 0 +#define CREATEPROCESS_MANIFEST_RESOURCE_ID 1 +#define MINIMUM_RESERVED_MANIFEST_RESOURCE_ID 1 +#define SW_SHOWNORMAL 1 +#define SW_NORMAL 1 +#define SHOW_OPENWINDOW 1 +#define SW_PARENTCLOSING 1 +#define VK_LBUTTON 0x01 +#define WM_CREATE 0x0001 +#define WA_ACTIVE 1 +#define PWR_OK 1 +#define PWR_SUSPENDREQUEST 1 +#define NFR_ANSI 1 +#define UIS_SET 1 +#define UISF_HIDEFOCUS 0x1 +#define XBUTTON1 0x0001 +#define WMSZ_LEFT 1 +#define HTCLIENT 1 +#define SMTO_BLOCK 0x0001 +#define MA_ACTIVATE 1 +#define ICON_BIG 1 +#define SIZE_MINIMIZED 1 +#define MK_LBUTTON 0x0001 +#define TME_HOVER 0x00000001 +#define CS_VREDRAW 0x0001 +#define CF_TEXT 1 +#define IDOK 1 +#define BN_PAINT 1 +#define BST_CHECKED 0x0001 +#define TTS_ALWAYSTIP 0x01 +#define TBS_AUTOTICKS 0x0001 +#define UDS_WRAP 0x0001 +#define PBS_SMOOTH 0x01 +#define LVS_REPORT 0x0001 +#define TVS_HASBUTTONS 0x0001 +#define TCS_SCROLLOPPOSITE 0x0001 +#define ACS_CENTER 0x0001 +#define MCS_DAYSTATE 0x0001 +#define DTS_UPDOWN 0x0001 +#define PGS_HORZ 0x00000001 +#define NFS_EDIT 0x0001 +#define LANG_ARABIC 0x01 +#define SUBLANG_DEFAULT 0x01 +#define SUBLANG_ARABIC_SAUDI_ARABIA 0x01 +#define SUBLANG_AZERI_LATIN 0x01 +#define SUBLANG_CHINESE_TRADITIONAL 0x01 +#define SUBLANG_DUTCH 0x01 +#define SUBLANG_ENGLISH_US 0x01 +#define SUBLANG_FRENCH 0x01 +#define SUBLANG_GERMAN 0x01 +#define SUBLANG_ITALIAN 0x01 +#define SUBLANG_KOREAN 0x01 +#define SUBLANG_LITHUANIAN 0x01 +#define SUBLANG_MALAY_MALAYSIA 0x01 +#define SUBLANG_NORWEGIAN_BOKMAL 0x01 +#define SUBLANG_PORTUGUESE_BRAZILIAN 0x01 +#define SUBLANG_SPANISH 0x01 +#define SUBLANG_SWEDISH 0x01 +#define SUBLANG_URDU_PAKISTAN 0x01 +#define SUBLANG_UZBEK_LATIN 0x01 +#define SORT_JAPANESE_UNICODE 0x1 +#define SORT_CHINESE_UNICODE 0x1 +#define SORT_KOREAN_UNICODE 0x1 +#define SORT_GERMAN_PHONE_BOOK 0x1 +#define SORT_HUNGARIAN_TECHNICAL 0x1 +#define SORT_GEORGIAN_MODERN 0x1 +#define VS_VERSION_INFO 1 +#define VFFF_ISSHAREDFILE 0x0001 +#define VFF_CURNEDEST 0x0001 +#define VIFF_FORCEINSTALL 0x0001 +#define ISOLATIONAWARE_MANIFEST_RESOURCE_ID 2 +#define SW_SHOWMINIMIZED 2 +#define SHOW_ICONWINDOW 2 +#define SW_OTHERZOOM 2 +#define VK_RBUTTON 0x02 +#define WM_DESTROY 0x0002 +#define WA_CLICKACTIVE 2 +#define PWR_SUSPENDRESUME 2 +#define NFR_UNICODE 2 +#define UIS_CLEAR 2 +#define UISF_HIDEACCEL 0x2 +#define XBUTTON2 0x0002 +#define WMSZ_RIGHT 2 +#define HTCAPTION 2 +#define SMTO_ABORTIFHUNG 0x0002 +#define MA_ACTIVATEANDEAT 2 +#define SIZE_MAXIMIZED 2 +#define MK_RBUTTON 0x0002 +#define TME_LEAVE 0x00000002 +#define CS_HREDRAW 0x0002 +#define CF_BITMAP 2 +#define BN_HILITE 2 +#define BST_INDETERMINATE 0x0002 +#define HDS_BUTTONS 0x0002 +#define TTS_NOPREFIX 0x02 +#define TBS_VERT 0x0002 +#define UDS_SETBUDDYINT 0x0002 +#define LVS_SMALLICON 0x0002 +#define TVS_HASLINES 0x0002 +#define TCS_BOTTOM 0x0002 +#define TCS_RIGHT 0x0002 +#define ACS_TRANSPARENT 0x0002 +#define MCS_MULTISELECT 0x0002 +#define DTS_SHOWNONE 0x0002 +#define PGS_AUTOSCROLL 0x00000002 +#define NFS_STATIC 0x0002 +#define LANG_BULGARIAN 0x02 +#define SUBLANG_SYS_DEFAULT 0x02 +#define SUBLANG_ARABIC_IRAQ 0x02 +#define SUBLANG_AZERI_CYRILLIC 0x02 +#define SUBLANG_CHINESE_SIMPLIFIED 0x02 +#define SUBLANG_DUTCH_BELGIAN 0x02 +#define SUBLANG_ENGLISH_UK 0x02 +#define SUBLANG_FRENCH_BELGIAN 0x02 +#define SUBLANG_GERMAN_SWISS 0x02 +#define SUBLANG_ITALIAN_SWISS 0x02 +#define SUBLANG_KASHMIRI_INDIA 0x02 +#define SUBLANG_MALAY_BRUNEI_DARUSSALAM 0x02 +#define SUBLANG_NEPALI_INDIA 0x02 +#define SUBLANG_NORWEGIAN_NYNORSK 0x02 +#define SUBLANG_PORTUGUESE 0x02 +#define SUBLANG_SERBIAN_LATIN 0x02 +#define SUBLANG_SPANISH_MEXICAN 0x02 +#define SUBLANG_SWEDISH_FINLAND 0x02 +#define SUBLANG_URDU_INDIA 0x02 +#define SUBLANG_UZBEK_CYRILLIC 0x02 +#define SORT_CHINESE_PRC 0x2 +#define VFF_FILEINUSE 0x0002 +#define VIFF_DONTDELETEOLD 0x0002 +#define AP_SERVER_MAJORVERSION_NUMBER 2 +#define AP_SERVER_MINORVERSION_NUMBER 2 +#define ISOLATIONAWARE_NOSTATICIMPORT_MANIFEST_RESOURCE_ID 3 +#define SW_SHOWMAXIMIZED 3 +#define SW_MAXIMIZE 3 +#define SHOW_FULLSCREEN 3 +#define SW_PARENTOPENING 3 +#define VK_CANCEL 0x03 +#define WM_MOVE 0x0003 +#define PWR_CRITICALRESUME 3 +#define NF_QUERY 3 +#define UIS_INITIALIZE 3 +#define WMSZ_TOP 3 +#define HTSYSMENU 3 +#define MA_NOACTIVATE 3 +#define SIZE_MAXSHOW 3 +#define CF_METAFILEPICT 3 +#define IDABORT 3 +#define BN_UNHILITE 3 +#define LVS_LIST 0x0003 +#define LVS_TYPEMASK 0x0003 +#define LANG_CATALAN 0x03 +#define SUBLANG_ARABIC_EGYPT 0x03 +#define SUBLANG_CHINESE_HONGKONG 0x03 +#define SUBLANG_ENGLISH_AUS 0x03 +#define SUBLANG_FRENCH_CANADIAN 0x03 +#define SUBLANG_GERMAN_AUSTRIAN 0x03 +#define SUBLANG_SERBIAN_CYRILLIC 0x03 +#define SUBLANG_SPANISH_MODERN 0x03 +#define SORT_CHINESE_BOPOMOFO 0x3 +#define SW_SHOWNOACTIVATE 4 +#define SHOW_OPENNOACTIVATE 4 +#define SW_OTHERUNZOOM 4 +#define VK_MBUTTON 0x04 +#define NF_REQUERY 4 +#define WMSZ_TOPLEFT 4 +#define HTGROWBOX 4 +#define MA_NOACTIVATEANDEAT 4 +#define SIZE_MAXHIDE 4 +#define MK_SHIFT 0x0004 +#define CF_SYLK 4 +#define IDRETRY 4 +#define BN_DISABLE 4 +#define BST_PUSHED 0x0004 +#define HDS_HOTTRACK 0x0004 +#define TBS_TOP 0x0004 +#define TBS_LEFT 0x0004 +#define UDS_ALIGNRIGHT 0x0004 +#define PBS_VERTICAL 0x04 +#define LVS_SINGLESEL 0x0004 +#define TVS_LINESATROOT 0x0004 +#define TCS_MULTISELECT 0x0004 +#define ACS_AUTOPLAY 0x0004 +#define MCS_WEEKNUMBERS 0x0004 +#define DTS_LONGDATEFORMAT 0x0004 +#define PGS_DRAGNDROP 0x00000004 +#define NFS_LISTCOMBO 0x0004 +#define LANG_CHINESE 0x04 +#define SUBLANG_ARABIC_LIBYA 0x04 +#define SUBLANG_CHINESE_SINGAPORE 0x04 +#define SUBLANG_ENGLISH_CAN 0x04 +#define SUBLANG_FRENCH_SWISS 0x04 +#define SUBLANG_GERMAN_LUXEMBOURG 0x04 +#define SUBLANG_SPANISH_GUATEMALA 0x04 +#define VFF_BUFFTOOSMALL 0x0004 +#define SW_SHOW 5 +#define VK_XBUTTON1 0x05 +#define WM_SIZE 0x0005 +#define WMSZ_TOPRIGHT 5 +#define HTMENU 5 +#define CF_DIF 5 +#define IDIGNORE 5 +#define BN_DOUBLECLICKED 5 +#define LANG_CZECH 0x05 +#define SUBLANG_ARABIC_ALGERIA 0x05 +#define SUBLANG_CHINESE_MACAU 0x05 +#define SUBLANG_ENGLISH_NZ 0x05 +#define SUBLANG_FRENCH_LUXEMBOURG 0x05 +#define SUBLANG_GERMAN_LIECHTENSTEIN 0x05 +#define SUBLANG_SPANISH_COSTA_RICA 0x05 +#define SW_MINIMIZE 6 +#define VK_XBUTTON2 0x06 +#define WM_ACTIVATE 0x0006 +#define WMSZ_BOTTOM 6 +#define HTHSCROLL 6 +#define CF_TIFF 6 +#define IDYES 6 +#define BN_SETFOCUS 6 +#define LANG_DANISH 0x06 +#define SUBLANG_ARABIC_MOROCCO 0x06 +#define SUBLANG_ENGLISH_EIRE 0x06 +#define SUBLANG_FRENCH_MONACO 0x06 +#define SUBLANG_SPANISH_PANAMA 0x06 +#define SW_SHOWMINNOACTIVE 7 +#define WM_SETFOCUS 0x0007 +#define WMSZ_BOTTOMLEFT 7 +#define HTVSCROLL 7 +#define CF_OEMTEXT 7 +#define IDNO 7 +#define BN_KILLFOCUS 7 +#define LANG_GERMAN 0x07 +#define SUBLANG_ARABIC_TUNISIA 0x07 +#define SUBLANG_ENGLISH_SOUTH_AFRICA 0x07 +#define SUBLANG_SPANISH_DOMINICAN_REPUBLIC 0x07 +#define SW_SHOWNA 8 +#define VK_BACK 0x08 +#define WM_KILLFOCUS 0x0008 +#define WMSZ_BOTTOMRIGHT 8 +#define HTMINBUTTON 8 +#define SMTO_NOTIMEOUTIFNOTHUNG 0x0008 +#define MK_CONTROL 0x0008 +#define CS_DBLCLKS 0x0008 +#define CF_DIB 8 +#define IDCLOSE 8 +#define BST_FOCUS 0x0008 +#define HDS_HIDDEN 0x0008 +#define TBS_BOTH 0x0008 +#define UDS_ALIGNLEFT 0x0008 +#define LVS_SHOWSELALWAYS 0x0008 +#define TVS_EDITLABELS 0x0008 +#define TCS_FLATBUTTONS 0x0008 +#define ACS_TIMER 0x0008 +#define MCS_NOTODAYCIRCLE 0x0008 +#define NFS_BUTTON 0x0008 +#define LANG_GREEK 0x08 +#define SUBLANG_ARABIC_OMAN 0x08 +#define SUBLANG_ENGLISH_JAMAICA 0x08 +#define SUBLANG_SPANISH_VENEZUELA 0x08 +#define SW_RESTORE 9 +#define VK_TAB 0x09 +#define HTMAXBUTTON 9 +#define CF_PALETTE 9 +#define IDHELP 9 +#define DTS_TIMEFORMAT 0x0009 +#define LANG_ENGLISH 0x09 +#define SUBLANG_ARABIC_YEMEN 0x09 +#define SUBLANG_ENGLISH_CARIBBEAN 0x09 +#define SUBLANG_SPANISH_COLOMBIA 0x09 +#define SW_SHOWDEFAULT 10 +#define WM_ENABLE 0x000A +#define HTLEFT 10 +#define CF_PENDATA 10 +#define IDTRYAGAIN 10 +#define HELP_CONTEXTMENU 0x000a +#define LANG_SPANISH 0x0a +#define SUBLANG_ARABIC_SYRIA 0x0a +#define SUBLANG_ENGLISH_BELIZE 0x0a +#define SUBLANG_SPANISH_PERU 0x0a +#define SW_FORCEMINIMIZE 11 +#define SW_MAX 11 +#define WM_SETREDRAW 0x000B +#define HTRIGHT 11 +#define CF_RIFF 11 +#define IDCONTINUE 11 +#define HELP_FINDER 0x000b +#define LANG_FINNISH 0x0b +#define SUBLANG_ARABIC_JORDAN 0x0b +#define SUBLANG_ENGLISH_TRINIDAD 0x0b +#define SUBLANG_SPANISH_ARGENTINA 0x0b +#define VK_CLEAR 0x0C +#define WM_SETTEXT 0x000C +#define HTTOP 12 +#define CF_WAVE 12 +#define HELP_WM_HELP 0x000c +#define DTS_SHORTDATECENTURYFORMAT 0x000C +#define LANG_FRENCH 0x0c +#define SUBLANG_ARABIC_LEBANON 0x0c +#define SUBLANG_ENGLISH_ZIMBABWE 0x0c +#define SUBLANG_SPANISH_ECUADOR 0x0c +#define VK_RETURN 0x0D +#define WM_GETTEXT 0x000D +#define HTTOPLEFT 13 +#define CF_UNICODETEXT 13 +#define HELP_SETPOPUP_POS 0x000d +#define LANG_HEBREW 0x0d +#define SUBLANG_ARABIC_KUWAIT 0x0d +#define SUBLANG_ENGLISH_PHILIPPINES 0x0d +#define SUBLANG_SPANISH_CHILE 0x0d +#define WM_GETTEXTLENGTH 0x000E +#define HTTOPRIGHT 14 +#define CF_ENHMETAFILE 14 +#define LANG_HUNGARIAN 0x0e +#define SUBLANG_ARABIC_UAE 0x0e +#define SUBLANG_SPANISH_URUGUAY 0x0e +#define WM_PAINT 0x000F +#define HTBOTTOM 15 +#define CF_HDROP 15 +#define LANG_ICELANDIC 0x0f +#define SUBLANG_ARABIC_BAHRAIN 0x0f +#define SUBLANG_SPANISH_PARAGUAY 0x0f +#define MAXIMUM_RESERVED_MANIFEST_RESOURCE_ID 16 +#define VK_SHIFT 0x10 +#define WM_CLOSE 0x0010 +#define HTBOTTOMLEFT 16 +#define WVR_ALIGNTOP 0x0010 +#define MK_MBUTTON 0x0010 +#define TME_NONCLIENT 0x00000010 +#define CF_LOCALE 16 +#define HELP_TCARD_DATA 0x0010 +#define TTS_NOANIMATE 0x10 +#define TBS_NOTICKS 0x0010 +#define UDS_AUTOBUDDY 0x0010 +#define LVS_SORTASCENDING 0x0010 +#define TVS_DISABLEDRAGDROP 0x0010 +#define TCS_FORCEICONLEFT 0x0010 +#define MCS_NOTODAY 0x0010 +#define DTS_APPCANPARSE 0x0010 +#define NFS_ALL 0x0010 +#define LANG_ITALIAN 0x10 +#define SUBLANG_ARABIC_QATAR 0x10 +#define SUBLANG_SPANISH_BOLIVIA 0x10 +#define VK_CONTROL 0x11 +#define WM_QUERYENDSESSION 0x0011 +#define HTBOTTOMRIGHT 17 +#define CF_DIBV5 17 +#define HELP_TCARD_OTHER_CALLER 0x0011 +#define LANG_JAPANESE 0x11 +#define SUBLANG_SPANISH_EL_SALVADOR 0x11 +#define VK_MENU 0x12 +#define WM_QUIT 0x0012 +#define HTBORDER 18 +#define CF_MAX 18 +#define LANG_KOREAN 0x12 +#define SUBLANG_SPANISH_HONDURAS 0x12 +#define VK_PAUSE 0x13 +#define WM_QUERYOPEN 0x0013 +#define HTOBJECT 19 +#define LANG_DUTCH 0x13 +#define SUBLANG_SPANISH_NICARAGUA 0x13 +#define VK_CAPITAL 0x14 +#define WM_ERASEBKGND 0x0014 +#define HTCLOSE 20 +#define LANG_NORWEGIAN 0x14 +#define SUBLANG_SPANISH_PUERTO_RICO 0x14 +#define VK_KANA 0x15 +#define VK_HANGEUL 0x15 +#define VK_HANGUL 0x15 +#define WM_SYSCOLORCHANGE 0x0015 +#define HTHELP 21 +#define LANG_POLISH 0x15 +#define WM_ENDSESSION 0x0016 +#define LANG_PORTUGUESE 0x16 +#define VK_JUNJA 0x17 +#define RT_MANIFEST 24 +#define VK_FINAL 0x18 +#define WM_SHOWWINDOW 0x0018 +#define LANG_ROMANIAN 0x18 +#define VK_HANJA 0x19 +#define VK_KANJI 0x19 +#define LANG_RUSSIAN 0x19 +#define WM_WININICHANGE 0x001A +#define LANG_CROATIAN 0x1a +#define LANG_SERBIAN 0x1a +#define VK_ESCAPE 0x1B +#define WM_DEVMODECHANGE 0x001B +#define LANG_SLOVAK 0x1b +#define VK_CONVERT 0x1C +#define WM_ACTIVATEAPP 0x001C +#define LANG_ALBANIAN 0x1c +#define VK_NONCONVERT 0x1D +#define WM_FONTCHANGE 0x001D +#define LANG_SWEDISH 0x1d +#define VK_ACCEPT 0x1E +#define WM_TIMECHANGE 0x001E +#define LANG_THAI 0x1e +#define VK_MODECHANGE 0x1F +#define WM_CANCELMODE 0x001F +#define LANG_TURKISH 0x1f +#define VK_SPACE 0x20 +#define WM_SETCURSOR 0x0020 +#define WVR_ALIGNLEFT 0x0020 +#define MK_XBUTTON1 0x0020 +#define CS_OWNDC 0x0020 +#define TTS_NOFADE 0x20 +#define TBS_ENABLESELRANGE 0x0020 +#define UDS_ARROWKEYS 0x0020 +#define LVS_SORTDESCENDING 0x0020 +#define TVS_SHOWSELALWAYS 0x0020 +#define TCS_FORCELABELLEFT 0x0020 +#define DTS_RIGHTALIGN 0x0020 +#define NFS_USEFONTASSOC 0x0020 +#define LANG_URDU 0x20 +#define VK_PRIOR 0x21 +#define WM_MOUSEACTIVATE 0x0021 +#define LANG_INDONESIAN 0x21 +#define VK_NEXT 0x22 +#define WM_CHILDACTIVATE 0x0022 +#define LANG_UKRAINIAN 0x22 +#define VK_END 0x23 +#define WM_QUEUESYNC 0x0023 +#define LANG_BELARUSIAN 0x23 +#define VK_HOME 0x24 +#define WM_GETMINMAXINFO 0x0024 +#define LANG_SLOVENIAN 0x24 +#define VK_LEFT 0x25 +#define LANG_ESTONIAN 0x25 +#define VK_UP 0x26 +#define WM_PAINTICON 0x0026 +#define LANG_LATVIAN 0x26 +#define VK_RIGHT 0x27 +#define WM_ICONERASEBKGND 0x0027 +#define LANG_LITHUANIAN 0x27 +#define VK_DOWN 0x28 +#define WM_NEXTDLGCTL 0x0028 +#define VK_SELECT 0x29 +#define LANG_FARSI 0x29 +#define VK_PRINT 0x2A +#define WM_SPOOLERSTATUS 0x002A +#define LANG_VIETNAMESE 0x2a +#define VK_EXECUTE 0x2B +#define WM_DRAWITEM 0x002B +#define LANG_ARMENIAN 0x2b +#define VK_SNAPSHOT 0x2C +#define WM_MEASUREITEM 0x002C +#define LANG_AZERI 0x2c +#define VK_INSERT 0x2D +#define WM_DELETEITEM 0x002D +#define LANG_BASQUE 0x2d +#define VK_DELETE 0x2E +#define WM_VKEYTOITEM 0x002E +#define VK_HELP 0x2F +#define WM_CHARTOITEM 0x002F +#define LANG_MACEDONIAN 0x2f +#define WM_SETFONT 0x0030 +#define WM_GETFONT 0x0031 +#define WM_SETHOTKEY 0x0032 +#define WM_GETHOTKEY 0x0033 +#define LANG_AFRIKAANS 0x36 +#define WM_QUERYDRAGICON 0x0037 +#define LANG_GEORGIAN 0x37 +#define LANG_FAEROESE 0x38 +#define WM_COMPAREITEM 0x0039 +#define LANG_HINDI 0x39 +#define WM_GETOBJECT 0x003D +#define LANG_MALAY 0x3e +#define LANG_KAZAK 0x3f +#define WVR_ALIGNBOTTOM 0x0040 +#define MK_XBUTTON2 0x0040 +#define CS_CLASSDC 0x0040 +#define HDS_DRAGDROP 0x0040 +#define TTS_BALLOON 0x40 +#define TBS_FIXEDLENGTH 0x0040 +#define UDS_HORZ 0x0040 +#define LVS_SHAREIMAGELISTS 0x0040 +#define TVS_RTLREADING 0x0040 +#define TCS_HOTTRACK 0x0040 +#define LANG_KYRGYZ 0x40 +#define WM_COMPACTING 0x0041 +#define LANG_SWAHILI 0x41 +#define LANG_UZBEK 0x43 +#define WM_COMMNOTIFY 0x0044 +#define LANG_TATAR 0x44 +#define LANG_BENGALI 0x45 +#define WM_WINDOWPOSCHANGING 0x0046 +#define LANG_PUNJABI 0x46 +#define WM_WINDOWPOSCHANGED 0x0047 +#define LANG_GUJARATI 0x47 +#define WM_POWER 0x0048 +#define LANG_ORIYA 0x48 +#define LANG_TAMIL 0x49 +#define WM_COPYDATA 0x004A +#define LANG_TELUGU 0x4a +#define WM_CANCELJOURNAL 0x004B +#define LANG_KANNADA 0x4b +#define LANG_MALAYALAM 0x4c +#define LANG_ASSAMESE 0x4d +#define WM_NOTIFY 0x004E +#define LANG_MARATHI 0x4e +#define LANG_SANSKRIT 0x4f +#define WM_INPUTLANGCHANGEREQUEST 0x0050 +#define LANG_MONGOLIAN 0x50 +#define WM_INPUTLANGCHANGE 0x0051 +#define WM_TCARD 0x0052 +#define WM_HELP 0x0053 +#define WM_USERCHANGED 0x0054 +#define WM_NOTIFYFORMAT 0x0055 +#define LANG_GALICIAN 0x56 +#define LANG_KONKANI 0x57 +#define LANG_MANIPURI 0x58 +#define LANG_SINDHI 0x59 +#define LANG_SYRIAC 0x5a +#define VK_LWIN 0x5B +#define VK_RWIN 0x5C +#define VK_APPS 0x5D +#define VK_SLEEP 0x5F +#define VK_NUMPAD0 0x60 +#define LANG_KASHMIRI 0x60 +#define VK_NUMPAD1 0x61 +#define LANG_NEPALI 0x61 +#define VK_NUMPAD2 0x62 +#define VK_NUMPAD3 0x63 +#define VK_NUMPAD4 0x64 +#define VS_USER_DEFINED 100 +#define VK_NUMPAD5 0x65 +#define LANG_DIVEHI 0x65 +#define IDD_DLGSERVICES 101 +#define VK_NUMPAD6 0x66 +#define IDS_APMONITORTITLE 102 +#define VK_NUMPAD7 0x67 +#define IDS_APMONITORCLASS 103 +#define VK_NUMPAD8 0x68 +#define IDM_RESTORE 104 +#define VK_NUMPAD9 0x69 +#define IDM_EXIT 105 +#define VK_MULTIPLY 0x6A +#define IDI_APSRVMON 106 +#define VK_ADD 0x6B +#define IDI_ICOSTOP 107 +#define VK_SEPARATOR 0x6C +#define IDI_ICORUN 108 +#define VK_SUBTRACT 0x6D +#define IDC_STATBAR 109 +#define VK_DECIMAL 0x6E +#define IDC_SSTATUS 110 +#define VK_DIVIDE 0x6F +#define IDB_BMPSTOP 111 +#define VK_F1 0x70 +#define IDB_BMPRUN 112 +#define VK_F2 0x71 +#define VK_F3 0x72 +#define IDB_BMPHEADER 114 +#define VK_F4 0x73 +#define IDL_SERVICES 115 +#define VK_F5 0x74 +#define IDL_STDOUT 116 +#define VK_F6 0x75 +#define IDC_SSTART 117 +#define VK_F7 0x76 +#define IDC_SSTOP 118 +#define VK_F8 0x77 +#define IDC_SRESTART 119 +#define VK_F9 0x78 +#define WHEEL_DELTA 120 +#define IDC_SEXIT 120 +#define VK_F10 0x79 +#define IDC_SMANAGER 121 +#define VK_F11 0x7A +#define VK_F12 0x7B +#define WM_CONTEXTMENU 0x007B +#define VK_F13 0x7C +#define WM_STYLECHANGING 0x007C +#define VK_F14 0x7D +#define WM_STYLECHANGED 0x007D +#define VK_F15 0x7E +#define WM_DISPLAYCHANGE 0x007E +#define IDC_SCONNECT 126 +#define VK_F16 0x7F +#define WM_GETICON 0x007F +#define LANG_INVARIANT 0x7f +#define IDC_SDISCONN 127 +#define VK_F17 0x80 +#define WM_SETICON 0x0080 +#define WVR_ALIGNRIGHT 0x0080 +#define CS_PARENTDC 0x0080 +#define CF_OWNERDISPLAY 0x0080 +#define HDS_FULLDRAG 0x0080 +#define TTS_CLOSE 0x80 +#define TBS_NOTHUMB 0x0080 +#define UDS_NOTHOUSANDS 0x0080 +#define LVS_NOLABELWRAP 0x0080 +#define TVS_NOTOOLTIPS 0x0080 +#define TCS_VERTICAL 0x0080 +#define VK_F18 0x81 +#define WM_NCCREATE 0x0081 +#define CF_DSPTEXT 0x0081 +#define VK_F19 0x82 +#define WM_NCDESTROY 0x0082 +#define CF_DSPBITMAP 0x0082 +#define VK_F20 0x83 +#define WM_NCCALCSIZE 0x0083 +#define CF_DSPMETAFILEPICT 0x0083 +#define VK_F21 0x84 +#define WM_NCHITTEST 0x0084 +#define VK_F22 0x85 +#define WM_NCPAINT 0x0085 +#define VK_F23 0x86 +#define WM_NCACTIVATE 0x0086 +#define VK_F24 0x87 +#define WM_GETDLGCODE 0x0087 +#define WM_SYNCPAINT 0x0088 +#define CF_DSPENHMETAFILE 0x008E +#define VK_NUMLOCK 0x90 +#define VK_SCROLL 0x91 +#define VK_OEM_NEC_EQUAL 0x92 +#define VK_OEM_FJ_JISHO 0x92 +#define VK_OEM_FJ_MASSHOU 0x93 +#define VK_OEM_FJ_TOUROKU 0x94 +#define VK_OEM_FJ_LOYA 0x95 +#define VK_OEM_FJ_ROYA 0x96 +#define VK_LSHIFT 0xA0 +#define WM_NCMOUSEMOVE 0x00A0 +#define VK_RSHIFT 0xA1 +#define WM_NCLBUTTONDOWN 0x00A1 +#define VK_LCONTROL 0xA2 +#define WM_NCLBUTTONUP 0x00A2 +#define VK_RCONTROL 0xA3 +#define WM_NCLBUTTONDBLCLK 0x00A3 +#define VK_LMENU 0xA4 +#define WM_NCRBUTTONDOWN 0x00A4 +#define VK_RMENU 0xA5 +#define WM_NCRBUTTONUP 0x00A5 +#define VK_BROWSER_BACK 0xA6 +#define WM_NCRBUTTONDBLCLK 0x00A6 +#define VK_BROWSER_FORWARD 0xA7 +#define WM_NCMBUTTONDOWN 0x00A7 +#define VK_BROWSER_REFRESH 0xA8 +#define WM_NCMBUTTONUP 0x00A8 +#define VK_BROWSER_STOP 0xA9 +#define WM_NCMBUTTONDBLCLK 0x00A9 +#define VK_BROWSER_SEARCH 0xAA +#define VK_BROWSER_FAVORITES 0xAB +#define WM_NCXBUTTONDOWN 0x00AB +#define VK_BROWSER_HOME 0xAC +#define WM_NCXBUTTONUP 0x00AC +#define VK_VOLUME_MUTE 0xAD +#define WM_NCXBUTTONDBLCLK 0x00AD +#define VK_VOLUME_DOWN 0xAE +#define VK_VOLUME_UP 0xAF +#define VK_MEDIA_NEXT_TRACK 0xB0 +#define EM_GETSEL 0x00B0 +#define VK_MEDIA_PREV_TRACK 0xB1 +#define EM_SETSEL 0x00B1 +#define VK_MEDIA_STOP 0xB2 +#define EM_GETRECT 0x00B2 +#define VK_MEDIA_PLAY_PAUSE 0xB3 +#define EM_SETRECT 0x00B3 +#define VK_LAUNCH_MAIL 0xB4 +#define EM_SETRECTNP 0x00B4 +#define VK_LAUNCH_MEDIA_SELECT 0xB5 +#define EM_SCROLL 0x00B5 +#define VK_LAUNCH_APP1 0xB6 +#define EM_LINESCROLL 0x00B6 +#define VK_LAUNCH_APP2 0xB7 +#define EM_SCROLLCARET 0x00B7 +#define EM_GETMODIFY 0x00B8 +#define EM_SETMODIFY 0x00B9 +#define VK_OEM_1 0xBA +#define EM_GETLINECOUNT 0x00BA +#define VK_OEM_PLUS 0xBB +#define EM_LINEINDEX 0x00BB +#define VK_OEM_COMMA 0xBC +#define EM_SETHANDLE 0x00BC +#define VK_OEM_MINUS 0xBD +#define EM_GETHANDLE 0x00BD +#define VK_OEM_PERIOD 0xBE +#define EM_GETTHUMB 0x00BE +#define VK_OEM_2 0xBF +#define VK_OEM_3 0xC0 +#define EM_LINELENGTH 0x00C1 +#define EM_REPLACESEL 0x00C2 +#define EM_GETLINE 0x00C4 +#define EM_LIMITTEXT 0x00C5 +#define EM_CANUNDO 0x00C6 +#define EM_UNDO 0x00C7 +#define EM_FMTLINES 0x00C8 +#define EM_LINEFROMCHAR 0x00C9 +#define EM_SETTABSTOPS 0x00CB +#define EM_SETPASSWORDCHAR 0x00CC +#define EM_EMPTYUNDOBUFFER 0x00CD +#define EM_GETFIRSTVISIBLELINE 0x00CE +#define EM_SETREADONLY 0x00CF +#define EM_SETWORDBREAKPROC 0x00D0 +#define EM_GETWORDBREAKPROC 0x00D1 +#define EM_GETPASSWORDCHAR 0x00D2 +#define EM_SETMARGINS 0x00D3 +#define EM_GETMARGINS 0x00D4 +#define EM_GETLIMITTEXT 0x00D5 +#define EM_POSFROMCHAR 0x00D6 +#define EM_CHARFROMPOS 0x00D7 +#define EM_SETIMESTATUS 0x00D8 +#define EM_GETIMESTATUS 0x00D9 +#define VK_OEM_4 0xDB +#define VK_OEM_5 0xDC +#define VK_OEM_6 0xDD +#define VK_OEM_7 0xDE +#define VK_OEM_8 0xDF +#define VK_OEM_AX 0xE1 +#define VK_OEM_102 0xE2 +#define VK_ICO_HELP 0xE3 +#define VK_ICO_00 0xE4 +#define VK_PROCESSKEY 0xE5 +#define VK_ICO_CLEAR 0xE6 +#define VK_PACKET 0xE7 +#define VK_OEM_RESET 0xE9 +#define VK_OEM_JUMP 0xEA +#define VK_OEM_PA1 0xEB +#define VK_OEM_PA2 0xEC +#define VK_OEM_PA3 0xED +#define VK_OEM_WSCTRL 0xEE +#define VK_OEM_CUSEL 0xEF +#define VK_OEM_ATTN 0xF0 +#define BM_GETCHECK 0x00F0 +#define VK_OEM_FINISH 0xF1 +#define BM_SETCHECK 0x00F1 +#define VK_OEM_COPY 0xF2 +#define BM_GETSTATE 0x00F2 +#define VK_OEM_AUTO 0xF3 +#define BM_SETSTATE 0x00F3 +#define VK_OEM_ENLW 0xF4 +#define BM_SETSTYLE 0x00F4 +#define VK_OEM_BACKTAB 0xF5 +#define BM_CLICK 0x00F5 +#define VK_ATTN 0xF6 +#define BM_GETIMAGE 0x00F6 +#define VK_CRSEL 0xF7 +#define BM_SETIMAGE 0x00F7 +#define VK_EXSEL 0xF8 +#define VK_EREOF 0xF9 +#define VK_PLAY 0xFA +#define VK_ZOOM 0xFB +#define VK_NONAME 0xFC +#define VK_PA1 0xFD +#define VK_OEM_CLEAR 0xFE +#define WM_KEYFIRST 0x0100 +#define WM_KEYDOWN 0x0100 +#define WVR_HREDRAW 0x0100 +#define HDS_FILTERBAR 0x0100 +#define RBS_TOOLTIPS 0x0100 +#define SBARS_SIZEGRIP 0x0100 +#define TBS_TOOLTIPS 0x0100 +#define UDS_HOTTRACK 0x0100 +#define LVS_AUTOARRANGE 0x0100 +#define TVS_CHECKBOXES 0x0100 +#define TCS_BUTTONS 0x0100 +#define IDS_MSG_FIRST 256 +#define IDS_MSG_APPRUNNING 256 +#define WM_KEYUP 0x0101 +#define IDS_MSG_ERROR 257 +#define WM_CHAR 0x0102 +#define IDS_MSG_RUNNINGALL 258 +#define WM_DEADCHAR 0x0103 +#define IDS_MSG_RUNNING 259 +#define WM_SYSKEYDOWN 0x0104 +#define IDS_MSG_RUNNINGNONE 260 +#define WM_SYSKEYUP 0x0105 +#define IDS_MSG_NOSERVICES 261 +#define WM_SYSCHAR 0x0106 +#define IDS_MSG_MNUSERVICES 262 +#define WM_SYSDEADCHAR 0x0107 +#define IDS_MSG_MNUSHOW 263 +#define WM_KEYLAST 0x0108 +#define IDS_MSG_MNUEXIT 264 +#define IDS_MSG_SRVSTART 265 +#define IDS_MSG_SRVSTARTED 266 +#define IDS_MSG_SRVSTOP 267 +#define IDS_MSG_SRVSTOPPED 268 +#define WM_IME_STARTCOMPOSITION 0x010D +#define IDS_MSG_SRVRESTART 269 +#define WM_IME_ENDCOMPOSITION 0x010E +#define IDS_MSG_SRVRESTARTED 270 +#define WM_IME_COMPOSITION 0x010F +#define WM_IME_KEYLAST 0x010F +#define IDS_MSG_SRVFAILED 271 +#define WM_INITDIALOG 0x0110 +#define IDS_MSG_SSTART 272 +#define WM_COMMAND 0x0111 +#define IDS_MSG_SSTOP 273 +#define WM_SYSCOMMAND 0x0112 +#define IDS_MSG_SRESTART 274 +#define WM_TIMER 0x0113 +#define IDS_MSG_SERVICES 275 +#define WM_HSCROLL 0x0114 +#define IDS_MSG_CONNECT 276 +#define WM_VSCROLL 0x0115 +#define IDS_MSG_ECONNECT 277 +#define IDS_MSG_LAST 277 +#define WM_INITMENU 0x0116 +#define WM_INITMENUPOPUP 0x0117 +#define WM_MENUSELECT 0x011F +#define WM_MENUCHAR 0x0120 +#define WM_ENTERIDLE 0x0121 +#define WM_MENURBUTTONUP 0x0122 +#define WM_MENUDRAG 0x0123 +#define WM_MENUGETOBJECT 0x0124 +#define WM_UNINITMENUPOPUP 0x0125 +#define WM_MENUCOMMAND 0x0126 +#define WM_CHANGEUISTATE 0x0127 +#define WM_UPDATEUISTATE 0x0128 +#define WM_QUERYUISTATE 0x0129 +#define WM_CTLCOLORMSGBOX 0x0132 +#define WM_CTLCOLOREDIT 0x0133 +#define WM_CTLCOLORLISTBOX 0x0134 +#define WM_CTLCOLORBTN 0x0135 +#define WM_CTLCOLORDLG 0x0136 +#define WM_CTLCOLORSCROLLBAR 0x0137 +#define WM_CTLCOLORSTATIC 0x0138 +#define MN_GETHMENU 0x01E1 +#define WM_MOUSEFIRST 0x0200 +#define WM_MOUSEMOVE 0x0200 +#define WVR_VREDRAW 0x0200 +#define CS_NOCLOSE 0x0200 +#define CF_PRIVATEFIRST 0x0200 +#define RBS_VARHEIGHT 0x0200 +#define TBS_REVERSED 0x0200 +#define LVS_EDITLABELS 0x0200 +#define TVS_TRACKSELECT 0x0200 +#define TCS_MULTILINE 0x0200 +#define WM_LBUTTONDOWN 0x0201 +#define WM_LBUTTONUP 0x0202 +#define WM_LBUTTONDBLCLK 0x0203 +#define WM_RBUTTONDOWN 0x0204 +#define WM_RBUTTONUP 0x0205 +#define WM_RBUTTONDBLCLK 0x0206 +#define WM_MBUTTONDOWN 0x0207 +#define WM_MBUTTONUP 0x0208 +#define WM_MBUTTONDBLCLK 0x0209 +#define WM_MOUSEWHEEL 0x020A +#define WM_XBUTTONDOWN 0x020B +#define WM_XBUTTONUP 0x020C +#define WM_XBUTTONDBLCLK 0x020D +#define WM_MOUSELAST 0x020D +#define WM_PARENTNOTIFY 0x0210 +#define WM_ENTERMENULOOP 0x0211 +#define WM_EXITMENULOOP 0x0212 +#define WM_NEXTMENU 0x0213 +#define WM_SIZING 0x0214 +#define WM_CAPTURECHANGED 0x0215 +#define WM_MOVING 0x0216 +#define WM_POWERBROADCAST 0x0218 +#define WM_DEVICECHANGE 0x0219 +#define WM_MDICREATE 0x0220 +#define WM_MDIDESTROY 0x0221 +#define WM_MDIACTIVATE 0x0222 +#define WM_MDIRESTORE 0x0223 +#define WM_MDINEXT 0x0224 +#define WM_MDIMAXIMIZE 0x0225 +#define WM_MDITILE 0x0226 +#define WM_MDICASCADE 0x0227 +#define WM_MDIICONARRANGE 0x0228 +#define WM_MDIGETACTIVE 0x0229 +#define WM_MDISETMENU 0x0230 +#define WM_ENTERSIZEMOVE 0x0231 +#define WM_EXITSIZEMOVE 0x0232 +#define WM_DROPFILES 0x0233 +#define WM_MDIREFRESHMENU 0x0234 +#define WM_IME_SETCONTEXT 0x0281 +#define WM_IME_NOTIFY 0x0282 +#define WM_IME_CONTROL 0x0283 +#define WM_IME_COMPOSITIONFULL 0x0284 +#define WM_IME_SELECT 0x0285 +#define WM_IME_CHAR 0x0286 +#define WM_IME_REQUEST 0x0288 +#define WM_IME_KEYDOWN 0x0290 +#define WM_IME_KEYUP 0x0291 +#define WM_NCMOUSEHOVER 0x02A0 +#define WM_MOUSEHOVER 0x02A1 +#define WM_NCMOUSELEAVE 0x02A2 +#define WM_MOUSELEAVE 0x02A3 +#define CF_PRIVATELAST 0x02FF +#define WM_CUT 0x0300 +#define CF_GDIOBJFIRST 0x0300 +#define WM_COPY 0x0301 +#define WM_PASTE 0x0302 +#define WM_CLEAR 0x0303 +#define WM_UNDO 0x0304 +#define WM_RENDERFORMAT 0x0305 +#define WM_RENDERALLFORMATS 0x0306 +#define WM_DESTROYCLIPBOARD 0x0307 +#define WM_DRAWCLIPBOARD 0x0308 +#define WM_PAINTCLIPBOARD 0x0309 +#define WM_VSCROLLCLIPBOARD 0x030A +#define WM_SIZECLIPBOARD 0x030B +#define WM_ASKCBFORMATNAME 0x030C +#define WM_CHANGECBCHAIN 0x030D +#define WM_HSCROLLCLIPBOARD 0x030E +#define WM_QUERYNEWPALETTE 0x030F +#define WM_PALETTEISCHANGING 0x0310 +#define WM_PALETTECHANGED 0x0311 +#define WM_HOTKEY 0x0312 +#define WM_PRINT 0x0317 +#define WM_PRINTCLIENT 0x0318 +#define WM_APPCOMMAND 0x0319 +#define WM_HANDHELDFIRST 0x0358 +#define WM_HANDHELDLAST 0x035F +#define WM_AFXFIRST 0x0360 +#define WM_AFXLAST 0x037F +#define WM_PENWINFIRST 0x0380 +#define WM_PENWINLAST 0x038F +#define WM_DDE_FIRST 0x03E0 +#define CF_GDIOBJLAST 0x03FF +#define WM_USER 0x0400 +#define WVR_VALIDRECTS 0x0400 +#define RBS_BANDBORDERS 0x0400 +#define TBS_DOWNISLEFT 0x0400 +#define LVS_OWNERDRAWFIXED 0x0400 +#define TVS_SINGLEEXPAND 0x0400 +#define TCS_FIXEDWIDTH 0x0400 +#define ctlFirst 0x0400 +#define psh1 0x0400 +#define psh2 0x0401 +#define psh3 0x0402 +#define psh4 0x0403 +#define psh5 0x0404 +#define psh6 0x0405 +#define psh7 0x0406 +#define psh8 0x0407 +#define psh9 0x0408 +#define psh10 0x0409 +#define psh11 0x040a +#define psh12 0x040b +#define psh13 0x040c +#define psh14 0x040d +#define psh15 0x040e +#define psh16 0x040f +#define _WIN32_WINDOWS 0x0410 +#define chx1 0x0410 +#define chx2 0x0411 +#define chx3 0x0412 +#define chx4 0x0413 +#define chx5 0x0414 +#define chx6 0x0415 +#define chx7 0x0416 +#define chx8 0x0417 +#define chx9 0x0418 +#define chx10 0x0419 +#define chx11 0x041a +#define chx12 0x041b +#define chx13 0x041c +#define chx14 0x041d +#define chx15 0x041e +#define chx16 0x041f +#define rad1 0x0420 +#define rad2 0x0421 +#define rad3 0x0422 +#define rad4 0x0423 +#define rad5 0x0424 +#define rad6 0x0425 +#define rad7 0x0426 +#define rad8 0x0427 +#define rad9 0x0428 +#define rad10 0x0429 +#define rad11 0x042a +#define rad12 0x042b +#define rad13 0x042c +#define rad14 0x042d +#define rad15 0x042e +#define rad16 0x042f +#define grp1 0x0430 +#define grp2 0x0431 +#define grp3 0x0432 +#define grp4 0x0433 +#define frm1 0x0434 +#define frm2 0x0435 +#define frm3 0x0436 +#define frm4 0x0437 +#define rct1 0x0438 +#define rct2 0x0439 +#define rct3 0x043a +#define rct4 0x043b +#define ico1 0x043c +#define ico2 0x043d +#define ico3 0x043e +#define ico4 0x043f +#define stc1 0x0440 +#define stc2 0x0441 +#define stc3 0x0442 +#define stc4 0x0443 +#define stc5 0x0444 +#define stc6 0x0445 +#define stc7 0x0446 +#define stc8 0x0447 +#define stc9 0x0448 +#define stc10 0x0449 +#define stc11 0x044a +#define stc12 0x044b +#define stc13 0x044c +#define stc14 0x044d +#define stc15 0x044e +#define stc16 0x044f +#define stc17 0x0450 +#define stc18 0x0451 +#define stc19 0x0452 +#define stc20 0x0453 +#define stc21 0x0454 +#define stc22 0x0455 +#define stc23 0x0456 +#define stc24 0x0457 +#define stc25 0x0458 +#define stc26 0x0459 +#define stc27 0x045a +#define stc28 0x045b +#define stc29 0x045c +#define stc30 0x045d +#define stc31 0x045e +#define stc32 0x045f +#define lst1 0x0460 +#define lst2 0x0461 +#define lst3 0x0462 +#define lst4 0x0463 +#define lst5 0x0464 +#define lst6 0x0465 +#define lst7 0x0466 +#define lst8 0x0467 +#define lst9 0x0468 +#define lst10 0x0469 +#define lst11 0x046a +#define lst12 0x046b +#define lst13 0x046c +#define lst14 0x046d +#define lst15 0x046e +#define lst16 0x046f +#define cmb1 0x0470 +#define cmb2 0x0471 +#define cmb3 0x0472 +#define cmb4 0x0473 +#define cmb5 0x0474 +#define cmb6 0x0475 +#define cmb7 0x0476 +#define cmb8 0x0477 +#define cmb9 0x0478 +#define cmb10 0x0479 +#define cmb11 0x047a +#define cmb12 0x047b +#define cmb13 0x047c +#define cmb14 0x047d +#define cmb15 0x047e +#define cmb16 0x047f +#define edt1 0x0480 +#define edt2 0x0481 +#define edt3 0x0482 +#define edt4 0x0483 +#define edt5 0x0484 +#define edt6 0x0485 +#define edt7 0x0486 +#define edt8 0x0487 +#define edt9 0x0488 +#define edt10 0x0489 +#define edt11 0x048a +#define edt12 0x048b +#define edt13 0x048c +#define edt14 0x048d +#define edt15 0x048e +#define edt16 0x048f +#define scr1 0x0490 +#define scr2 0x0491 +#define scr3 0x0492 +#define scr4 0x0493 +#define scr5 0x0494 +#define scr6 0x0495 +#define scr7 0x0496 +#define scr8 0x0497 +#define ctl1 0x04A0 +#define ctlLast 0x04ff +#define _WIN32_WINNT 0x0500 +#define WINVER 0x0501 +#define _WIN32_IE 0x0501 +#define FILEOPENORD 1536 +#define MULTIFILEOPENORD 1537 +#define PRINTDLGORD 1538 +#define PRNSETUPDLGORD 1539 +#define FINDDLGORD 1540 +#define REPLACEDLGORD 1541 +#define FONTDLGORD 1542 +#define FORMATDLGORD31 1543 +#define FORMATDLGORD30 1544 +#define RUNDLGORD 1545 +#define PAGESETUPDLGORD 1546 +#define NEWFILEOPENORD 1547 +#define PRINTDLGEXORD 1549 +#define PAGESETUPDLGORDMOTIF 1550 +#define COLORMGMTDLGORD 1551 +#define NEWFILEOPENV2ORD 1552 +#define CS_SAVEBITS 0x0800 +#define RBS_FIXEDORDER 0x0800 +#define SBARS_TOOLTIPS 0x0800 +#define SBT_TOOLTIPS 0x0800 +#define LVS_ALIGNLEFT 0x0800 +#define TVS_INFOTIP 0x0800 +#define TCS_RAGGEDRIGHT 0x0800 +#define LVS_ALIGNMASK 0x0c00 +#define CS_BYTEALIGNCLIENT 0x1000 +#define RBS_REGISTERDROP 0x1000 +#define LVS_OWNERDATA 0x1000 +#define TVS_FULLROWSELECT 0x1000 +#define TCS_FOCUSONBUTTONDOWN 0x1000 +#define IDM_SM_SERVICE 0x1100 +#define IDM_SM_START 0x1200 +#define IDM_SM_STOP 0x1400 +#define IDM_SM_RESTART 0x1800 +#define CS_BYTEALIGNWINDOW 0x2000 +#define RBS_AUTOSIZE 0x2000 +#define LVS_NOSCROLL 0x2000 +#define TVS_NOSCROLL 0x2000 +#define TCS_OWNERDRAWFIXED 0x2000 +#define CS_GLOBALCLASS 0x4000 +#define RBS_VERTICALGRIPPER 0x4000 +#define LVS_NOCOLUMNHEADER 0x4000 +#define TVS_NONEVENHEIGHT 0x4000 +#define TCS_TOOLTIPS 0x4000 +#define IDH_NO_HELP 28440 +#define IDH_MISSING_CONTEXT 28441 +#define IDH_GENERIC_HELP_BUTTON 28442 +#define IDH_OK 28443 +#define IDH_CANCEL 28444 +#define IDH_HELP 28445 +#define IDTIMEOUT 32000 +#define OCR_NORMAL 32512 +#define OIC_SAMPLE 32512 +#define IDI_APPLICATION 32512 +#define OCR_IBEAM 32513 +#define OIC_HAND 32513 +#define IDI_HAND 32513 +#define OCR_WAIT 32514 +#define OIC_QUES 32514 +#define IDI_QUESTION 32514 +#define OCR_CROSS 32515 +#define OIC_BANG 32515 +#define IDI_EXCLAMATION 32515 +#define OCR_UP 32516 +#define OIC_NOTE 32516 +#define IDI_ASTERISK 32516 +#define OIC_WINLOGO 32517 +#define IDI_WINLOGO 32517 +#define OCR_SIZE 32640 +#define OCR_ICON 32641 +#define OCR_SIZENWSE 32642 +#define OCR_SIZENESW 32643 +#define OCR_SIZEWE 32644 +#define OCR_SIZENS 32645 +#define OCR_SIZEALL 32646 +#define OCR_ICOCUR 32647 +#define OCR_NO 32648 +#define OCR_HAND 32649 +#define OCR_APPSTARTING 32650 +#define OBM_LFARROWI 32734 +#define OBM_RGARROWI 32735 +#define OBM_DNARROWI 32736 +#define OBM_UPARROWI 32737 +#define OBM_COMBO 32738 +#define OBM_MNARROW 32739 +#define OBM_LFARROWD 32740 +#define OBM_RGARROWD 32741 +#define OBM_DNARROWD 32742 +#define OBM_UPARROWD 32743 +#define OBM_RESTORED 32744 +#define OBM_ZOOMD 32745 +#define OBM_REDUCED 32746 +#define OBM_RESTORE 32747 +#define OBM_ZOOM 32748 +#define OBM_REDUCE 32749 +#define OBM_LFARROW 32750 +#define OBM_RGARROW 32751 +#define OBM_DNARROW 32752 +#define OBM_UPARROW 32753 +#define OBM_CLOSE 32754 +#define OBM_OLD_RESTORE 32755 +#define OBM_OLD_ZOOM 32756 +#define OBM_OLD_REDUCE 32757 +#define OBM_BTNCORNERS 32758 +#define OBM_CHECKBOXES 32759 +#define OBM_CHECK 32760 +#define OBM_BTSIZE 32761 +#define OBM_OLD_LFARROW 32762 +#define OBM_OLD_RGARROW 32763 +#define OBM_OLD_DNARROW 32764 +#define OBM_OLD_UPARROW 32765 +#define OBM_SIZE 32766 +#define OBM_OLD_CLOSE 32767 +#define WM_APP 0x8000 +#define HELP_TCARD 0x8000 +#define RBS_DBLCLKTOGGLE 0x8000 +#define LVS_NOSORTHEADER 0x8000 +#define TVS_NOHSCROLL 0x8000 +#define TCS_FOCUSNEVER 0x8000 +#define SC_SIZE 0xF000 +#define SC_SEPARATOR 0xF00F +#define SC_MOVE 0xF010 +#define SC_MINIMIZE 0xF020 +#define SC_MAXIMIZE 0xF030 +#define SC_NEXTWINDOW 0xF040 +#define SC_PREVWINDOW 0xF050 +#define SC_CLOSE 0xF060 +#define SC_VSCROLL 0xF070 +#define SC_HSCROLL 0xF080 +#define SC_MOUSEMENU 0xF090 +#define SC_KEYMENU 0xF100 +#define SC_ARRANGE 0xF110 +#define SC_RESTORE 0xF120 +#define SC_TASKLIST 0xF130 +#define SC_SCREENSAVE 0xF140 +#define SC_HOTKEY 0xF150 +#define SC_DEFAULT 0xF160 +#define SC_MONITORPOWER 0xF170 +#define SC_CONTEXTHELP 0xF180 +#define LVS_TYPESTYLEMASK 0xfc00 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 101 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1000 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/tools/OMCMonitor/srun.bmp b/tools/OMCMonitor/srun.bmp new file mode 100644 index 0000000000000000000000000000000000000000..90ecd46f178a3444a81a1ef511b643d5b1400a3e GIT binary patch literal 246 zcmZupF%p0<2*W$~`V6=J!QJmT^PVn#p-=KUIJm?B?YT%B5(u#Ew?rJIl~_6^ncYy& ze~FHnszJ<@gi5WI2K)&q+xxh1{}np-1Z}0R)>Wr literal 0 HcmV?d00001 diff --git a/tools/OMCMonitor/sstop.bmp b/tools/OMCMonitor/sstop.bmp new file mode 100644 index 0000000000000000000000000000000000000000..ba73d87aecb8d15cf2270fa70d185c05e980234d GIT binary patch literal 246 zcmZ?r{l)+RWk5;;hy|dSk%0v)(Eui~5kMJ`WJ3dl0+K)`5H~O!IB)