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 + -
显示快捷键?