servman.c

来自「一个类似windows」· C语言 代码 · 共 775 行 · 第 1/2 页

C
775
字号
                    SendMessage(hTool, TB_SETSTATE, ID_PROP,
                        (LPARAM)MAKELONG(TBSTATE_ENABLED, 0));

			    }
			    break;

                case TTN_GETDISPINFO:
                {
                    LPTOOLTIPTEXT lpttt;
                    UINT idButton;

                    lpttt = (LPTOOLTIPTEXT) lParam;

                    /* Specify the resource identifier of the descriptive
                     * text for the given button. */
                    idButton = (UINT)lpttt->hdr.idFrom;
                    switch (idButton)
                    {
                        case ID_PROP:
                            lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_PROP);
                        break;

                        case ID_REFRESH:
                            lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_REFRESH);
                        break;

                        case ID_EXPORT:
                            lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_EXPORT);
                        break;

                        case ID_CREATE:
                            lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_NEW);
                        break;

                        case ID_START:
                            lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_START);
                        break;

                        case ID_STOP:
                            lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_STOP);
                        break;

                        case ID_PAUSE:
                            lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_PAUSE);
                        break;

                        case ID_RESTART:
                            lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_RESTART);
                        break;

                        case ID_HELP:
                            lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_HELP);
                        break;

                        case ID_EXIT:
                            lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_EXIT);
                        break;

                    }
                }
                break;

                default:
                break;
            }
        }
        break;

        case WM_CONTEXTMENU:
            {
                int xPos, yPos;

                xPos = GET_X_LPARAM(lParam);
                yPos = GET_Y_LPARAM(lParam);

                TrackPopupMenuEx(hShortcutMenu, TPM_RIGHTBUTTON,
                                 xPos, yPos, hwnd, NULL);
            }
        break;

	    case WM_COMMAND:

		    switch(LOWORD(wParam))
		    {
                case ID_PROP:
                    if (GetSelectedItem() != -1)
                        OpenPropSheet(hwnd);

                break;

                case ID_REFRESH:
                    RefreshServiceList();
                    SelectedItem = -1;

                    /* disable menus and buttons */
                    SetMenuAndButtonStates();

                    /* clear the service in the status bar */
                    SendMessage(hStatus, SB_SETTEXT, 1, _T('\0'));

                break;

                case ID_EXPORT:
                    ExportFile(hListView);
                    SetFocus(hListView);
                break;

                case ID_CREATE:
                    DialogBox(hInstance,
                              MAKEINTRESOURCE(IDD_DLG_CREATE),
                              hMainWnd,
                              (DLGPROC)CreateDialogProc);
                    SetFocus(hListView);
                break;

                case ID_DELETE:
                {
                    ENUM_SERVICE_STATUS_PROCESS *Service = NULL;

                    Service = GetSelectedService();

                    if (Service->ServiceStatusProcess.dwCurrentState !=
                        SERVICE_RUNNING)
                    {
                        DialogBox(hInstance,
                              MAKEINTRESOURCE(IDD_DLG_DELETE),
                              hMainWnd,
                              (DLGPROC)DeleteDialogProc);
                    }
                    else
                    {
                        TCHAR Buf[60];
                        LoadString(hInstance, IDS_DELETE_STOP, Buf,
                            sizeof(Buf) / sizeof(TCHAR));
                        DisplayString(Buf);
                    }

                    SetFocus(hListView);

                }
                break;

                case ID_START:
                {
                    ENUM_SERVICE_STATUS_PROCESS *Service = NULL;
                    TCHAR ProgDlgBuf[100];

                    /* open the progress dialog */
                    hProgDlg = CreateDialog(GetModuleHandle(NULL),
                                            MAKEINTRESOURCE(IDD_DLG_PROGRESS),
                                            hMainWnd,
                                            (DLGPROC)ProgressDialogProc);
                    if (hProgDlg != NULL)
                    {
                        ShowWindow(hProgDlg, SW_SHOW);

                        /* write the  info to the progress dialog */
                        LoadString(hInstance, IDS_PROGRESS_INFO_START, ProgDlgBuf,
                                   sizeof(ProgDlgBuf) / sizeof(TCHAR));
                        SendDlgItemMessage(hProgDlg, IDC_SERVCON_INFO, WM_SETTEXT,
                                           0, (LPARAM)ProgDlgBuf);

                        /* get pointer to selected service */
                        Service = GetSelectedService();

                        /* write the service name to the progress dialog */
                        SendDlgItemMessage(hProgDlg, IDC_SERVCON_NAME, WM_SETTEXT, 0,
                            (LPARAM)Service->lpServiceName);
                    }

                    if ( DoStartService(hProgDlg) )
                    {
                        LVITEM item;
                        TCHAR szStatus[64];
                        TCHAR buf[25];

                        LoadString(hInstance, IDS_SERVICES_STARTED, szStatus,
                            sizeof(szStatus) / sizeof(TCHAR));
                        item.pszText = szStatus;
                        item.iItem = GetSelectedItem();
                        item.iSubItem = 2;
                        SendMessage(hListView, LVM_SETITEMTEXT, item.iItem, (LPARAM) &item);

                        /* change dialog status */
                        if (hwndGenDlg)
                        {
                            LoadString(hInstance, IDS_SERVICES_STARTED, buf,
                                       sizeof(buf) / sizeof(TCHAR));
                            SendDlgItemMessageW(hwndGenDlg, IDC_SERV_STATUS, WM_SETTEXT,
                                                0, (LPARAM)buf);
                        }
                    }

                    SendMessage(hProgDlg, WM_DESTROY, 0, 0);

                }
			    break;

                case ID_STOP:
                {
                    ENUM_SERVICE_STATUS_PROCESS *Service = NULL;
                    TCHAR ProgDlgBuf[100];

                    /* open the progress dialog */
                    hProgDlg = CreateDialog(GetModuleHandle(NULL),
                                            MAKEINTRESOURCE(IDD_DLG_PROGRESS),
                                            hMainWnd,
                                            (DLGPROC)ProgressDialogProc);
                    if (hProgDlg != NULL)
                    {
                        ShowWindow(hProgDlg, SW_SHOW);

                        /* write the  info to the progress dialog */
                        LoadString(hInstance, IDS_PROGRESS_INFO_STOP, ProgDlgBuf,
                            sizeof(ProgDlgBuf) / sizeof(TCHAR));
                        SendDlgItemMessage(hProgDlg, IDC_SERVCON_INFO,
                            WM_SETTEXT, 0, (LPARAM)ProgDlgBuf);

                        /* get pointer to selected service */
                        Service = GetSelectedService();

                        /* write the service name to the progress dialog */
                        SendDlgItemMessage(hProgDlg, IDC_SERVCON_NAME, WM_SETTEXT, 0,
                            (LPARAM)Service->lpServiceName);
                    }

                    if( Control(hProgDlg, SERVICE_CONTROL_STOP) )
                    {
                        LVITEM item;
                        TCHAR buf[25];

                        item.pszText = _T('\0');
                        item.iItem = GetSelectedItem();
                        item.iSubItem = 2;
                        SendMessage(hListView, LVM_SETITEMTEXT, item.iItem, (LPARAM) &item);

                        /* change dialog status */
                        if (hwndGenDlg)
                        {
                            LoadString(hInstance, IDS_SERVICES_STOPPED, buf,
                                       sizeof(buf) / sizeof(TCHAR));
                            SendDlgItemMessageW(hwndGenDlg, IDC_SERV_STATUS, WM_SETTEXT,
                                                0, (LPARAM)buf);
                        }
                    }

                    SendMessage(hProgDlg, WM_DESTROY, 0, 0);

                }
                break;

                case ID_PAUSE:
                    Control(hProgDlg, SERVICE_CONTROL_PAUSE);
                break;

                case ID_RESUME:
                    Control(hProgDlg, SERVICE_CONTROL_CONTINUE );
                break;

                case ID_RESTART:
                    SendMessage(hMainWnd, WM_COMMAND, 0, ID_STOP);
                    SendMessage(hMainWnd, WM_COMMAND, 0, ID_START);
                break;

                case ID_HELP:
                    MessageBox(NULL, _T("Help is not yet implemented\n"),
                        _T("Note!"), MB_OK | MB_ICONINFORMATION);
                    SetFocus(hListView);
                break;

                case ID_EXIT:
                    PostMessage(hwnd, WM_CLOSE, 0, 0);
                break;

                case ID_VIEW_LARGE:
                    SetView(LVS_ICON);
                break;

                case ID_VIEW_SMALL:
                    SetView(LVS_SMALLICON);
                break;

                case ID_VIEW_LIST:
                    SetView(LVS_LIST);
                break;

                case ID_VIEW_DETAILS:
                    SetView(LVS_REPORT);
                break;

                case ID_VIEW_CUSTOMIZE:
                break;

                case ID_ABOUT:
                    DialogBox(hInstance,
                              MAKEINTRESOURCE(IDD_ABOUTBOX),
                              hMainWnd,
                              (DLGPROC)AboutDialogProc);
                    SetFocus(hListView);
                break;

		    }
	    break;

	    case WM_CLOSE:
            FreeMemory(); /* free the service array */
            DestroyMenu(hShortcutMenu);
		    DestroyWindow(hwnd);
	    break;

	    case WM_DESTROY:
		    PostQuitMessage(0);
	    break;

	    default:
		    return DefWindowProc(hwnd, msg, wParam, lParam);
    }
    return 0;
}

#ifdef _MSC_VER
#pragma warning(disable : 4100)
#endif
int WINAPI WinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance,
    LPSTR lpCmdLine, int nCmdShow)
{
    WNDCLASSEX wc;
    MSG Msg;

    hInstance = hThisInstance;

    InitCommonControls();

    wc.cbSize		 = sizeof(WNDCLASSEX);
    wc.style		 = 0;
    wc.lpfnWndProc	 = WndProc;
    wc.cbClsExtra	 = 0;
    wc.cbWndExtra	 = 0;
    wc.hInstance	 = hInstance;
    wc.hIcon		 = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_SM_ICON));
    wc.hCursor		 = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
    wc.lpszMenuName  = MAKEINTRESOURCE(IDR_MAINMENU);
    wc.lpszClassName = ClassName;
    wc.hIconSm		 = (HICON)LoadImage(hInstance,
                        MAKEINTRESOURCE(IDI_SM_ICON), IMAGE_ICON, 16, 16, 0);

    if(!RegisterClassEx(&wc))
    {
	    MessageBox(NULL, _T("Window Registration Failed!"), _T("Error!"),
		    MB_ICONEXCLAMATION | MB_OK);
	    return 0;
    }

    hMainWnd = CreateWindowEx(
	    0,
	    ClassName,
	    _T("ReactOS Service Manager"),
	    WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN,
	    CW_USEDEFAULT, CW_USEDEFAULT, 650, 450,
	    NULL, NULL, hInstance, NULL);

    if(hMainWnd == NULL)
    {
	    MessageBox(NULL, _T("Window Creation Failed!"), _T("Error!"),
		    MB_ICONEXCLAMATION | MB_OK);
	    return 0;
    }

    ShowWindow(hMainWnd, nCmdShow);
    UpdateWindow(hMainWnd);

    while( GetMessage( &Msg, NULL, 0, 0 ) )
    {
        if(! IsDialogMessage(hProgDlg, &Msg) )
        {
            TranslateMessage(&Msg);
            DispatchMessage(&Msg);
        }

    }
    return (int)Msg.wParam;
}



⌨️ 快捷键说明

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