⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 apachemonitor.c

📁 最新apache的源代码
💻 C
📖 第 1 页 / 共 4 页
字号:
        hWnd = FindWindow("ApacheWin95ServiceMonitor", 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 GetApacheServicesStatus(){    CHAR szKey[MAX_PATH];    CHAR achKey[MAX_PATH];    CHAR szImagePath[MAX_PATH];    CHAR szBuf[MAX_PATH];    CHAR szTmp[MAX_PATH];    HKEY hKey, hSubKey, hKeyRemote;    DWORD retCode, rv, dwKeyType;    DWORD dwBufLen = MAX_PATH;    int i, stPos = 0;    int computers = 0;    g_bRescanServices = FALSE;    am_ClearServicesSt();    while (g_stComputers[computers].szComputerName != NULL) {        hKeyRemote = g_stComputers[computers].hRegistry;        retCode = RegOpenKeyEx(hKeyRemote,                               "System\\CurrentControlSet\\Services\\",                               0, KEY_READ, &hKey);        if (retCode != ERROR_SUCCESS)        {            ErrorMessage(NULL, FALSE);            return FALSE;        }        for (i = 0, retCode = ERROR_SUCCESS; retCode == ERROR_SUCCESS; i++)        {            retCode = RegEnumKey(hKey, i, achKey, MAX_PATH);            if (retCode == ERROR_SUCCESS)            {                lstrcpy(szKey, "System\\CurrentControlSet\\Services\\");                lstrcat(szKey, achKey);                if (RegOpenKeyEx(hKeyRemote, szKey, 0,                                  KEY_QUERY_VALUE, &hSubKey) == ERROR_SUCCESS)                {                    dwBufLen = MAX_PATH;                    rv = RegQueryValueEx(hSubKey, "ImagePath", NULL,                                         &dwKeyType, szImagePath, &dwBufLen);                    if (rv == ERROR_SUCCESS                            && (dwKeyType == REG_SZ                              || dwKeyType == REG_EXPAND_SZ)                            && dwBufLen)                    {                        lstrcpy(szBuf, szImagePath);                        CharLower(szBuf);                        /* the service name could be Apache*.exe */                        /* the service name could be httpd*.exe or Apache*.exe */                        if (((strstr(szBuf, "\\apache") != NULL)                             || (strstr(szBuf, "\\httpd") != NULL))                                && strstr(szBuf, ".exe")                                 && (strstr(szBuf, "--ntservice") != NULL                                        || strstr(szBuf, "-k ") != NULL))                        {                            g_stServices[stPos].szServiceName = strdup(achKey);                            g_stServices[stPos].szImagePath =                                                            strdup(szImagePath);                            g_stServices[stPos].szComputerName =                                strdup(g_stComputers[computers].szComputerName);                            dwBufLen = MAX_PATH;                            if (RegQueryValueEx(hSubKey, "Description", NULL,                                                &dwKeyType, szBuf, &dwBufLen)                                     == ERROR_SUCCESS) {                                g_stServices[stPos].szDescription =                                                                  strdup(szBuf);                            }                            dwBufLen = MAX_PATH;                            if (RegQueryValueEx(hSubKey, "DisplayName", NULL,                                                &dwKeyType, szBuf, &dwBufLen)                                     == ERROR_SUCCESS)                             {                                if (strcmp(g_stComputers[computers]                                        .szComputerName, g_szLocalHost) != 0)                                 {                                     strcpy(szTmp, g_stComputers[computers]                                                      .szComputerName + 2);                                    strcat(szTmp, "@");                                    strcat(szTmp, szBuf);                                }                                else {                                    strcpy(szTmp, szBuf);                                }                                g_stServices[stPos].szDisplayName                                                         = strdup(szTmp);                            }                            ++stPos;                            if (stPos >= MAX_APACHE_SERVICES) {                                retCode = !ERROR_SUCCESS;                            }                        }                    }                    RegCloseKey(hSubKey);                }            }        }        ++computers;    }    RegCloseKey(hKey);    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      = "ApacheMonitor :\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;     UINT 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 (GetApacheServicesStatus())        {            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:        ApacheManageService(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)); 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -