服务相关编程

来源:互联网 发布:原始网卡mac地址 编辑:程序博客网 时间:2024/06/05 18:07

枚举服务:

void CServerManageDlg::ShowServiceList(DWORD dwServiceType){    m_ServiceList.DeleteAllItems();    SC_HANDLE hSCM = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);    if(NULL == hSCM)    {        AfxMessageBox("OpenSCManager Error");        return;    }    DWORD dwBufSize = 512 * sizeof(ENUM_SERVICE_STATUS);    DWORD dwByteNeeded, dwServiceReturned, lpResumeHandle = 0;    ENUM_SERVICE_STATUS SerStatus[512] = {0};    BOOL bRet = EnumServicesStatus(hSCM, dwServiceType, SERVICE_STATE_ALL, SerStatus, dwBufSize,                                  &dwByteNeeded, &dwServiceReturned, &lpResumeHandle);    for(DWORD i=0; i<dwServiceReturned; i++)    {        CString str;        str.Format("%d", i);        m_ServiceList.InsertItem(i, str);        m_ServiceList.SetItemText(i, 1, SerStatus[i].lpServiceName);  //服务名        m_ServiceList.SetItemText(i, 2, SerStatus[i].lpDisplayName);  //显示名称        switch(SerStatus[i].ServiceStatus.dwCurrentState)  //服务当前状态        {        case SERVICE_PAUSED:            {                m_ServiceList.SetItemText(i, 3, "暂停");                break;            }        case SERVICE_STOPPED:            {                m_ServiceList.SetItemText(i, 3, "停止");                break;            }        case SERVICE_RUNNING:            {                m_ServiceList.SetItemText(i, 3, "运行");                break;            }        default:            m_ServiceList.SetItemText(i, 3, "其他");        }    }    CloseServiceHandle(hSCM);}

启动服务:

void CServerManageDlg::OnButtonStart() {    // TODO: Add your control notification handler code here    //选中服务的索引    POSITION pos = m_ServiceList.GetFirstSelectedItemPosition();    int nSelected = -1;    while(pos)    {        nSelected = m_ServiceList.GetNextSelectedItem(pos);    }    if(-1 == nSelected)    {        AfxMessageBox("请选择要启动的服务!");    }    //获取选中的服务的服务名    char szServiceName[MAXBYTE] = {0};    m_ServiceList.GetItemText(nSelected, 1, szServiceName, MAXBYTE);    SC_HANDLE hSCM = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);    if(NULL == hSCM)    {        AfxMessageBox("OpenSCManager Error");        return;    }    SC_HANDLE hSCService = OpenService(hSCM, szServiceName, SERVICE_ALL_ACCESS);    //启动服务    BOOL bRet = StartService(hSCService, 0, NULL);    if(bRet == TRUE)        m_ServiceList.SetItemText(nSelected, 3, "运行");    else        int n = GetLastError();    CloseServiceHandle(hSCService);    CloseServiceHandle(hSCM);}

停止服务:

void CServerManageDlg::OnButtonStop() {    // TODO: Add your control notification handler code here    //选中服务的索引    POSITION pos = m_ServiceList.GetFirstSelectedItemPosition();    int nSelected = -1;    while(pos)    {        nSelected = m_ServiceList.GetNextSelectedItem(pos);    }    if(-1 == nSelected)    {        AfxMessageBox("请选择要停止的服务!");    }    //获取选中的服务的服务名    char szServiceName[MAXBYTE] = {0};    m_ServiceList.GetItemText(nSelected, 1, szServiceName, MAXBYTE);    SC_HANDLE hSCM = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);    if(NULL == hSCM)    {        AfxMessageBox("OpenSCManager Error");        return;    }    SC_HANDLE hSCService = OpenService(hSCM, szServiceName, SERVICE_ALL_ACCESS);    SERVICE_STATUS ServiceStatus;    //停止服务    BOOL bRet = ControlService(hSCService, SERVICE_CONTROL_STOP, &ServiceStatus);    if(bRet == TRUE)        m_ServiceList.SetItemText(nSelected, 3, "停止");    else        int n = GetLastError();    CloseServiceHandle(hSCService);    CloseServiceHandle(hSCM);}

初始化:

void CServerManageDlg::InitServiceList(){    m_ServiceList.SetExtendedStyle(m_ServiceList.GetExtendedStyle()                                   | LVS_EX_GRIDLINES  //有网络格                                   | LVS_EX_FULLROWSELECT);  //选择单行    m_ServiceList.ModifyStyle(0, LVS_REPORT|LVS_SINGLESEL|LVS_SHOWSELALWAYS);    m_ServiceList.InsertColumn(0, _T("序号"));    m_ServiceList.InsertColumn(1, _T("服务名"));    m_ServiceList.InsertColumn(2, _T("显示名"));    m_ServiceList.InsertColumn(3, _T("状态"));    m_ServiceList.SetColumnWidth(0, LVSCW_AUTOSIZE_USEHEADER);    m_ServiceList.SetColumnWidth(1, LVSCW_AUTOSIZE_USEHEADER);    m_ServiceList.SetColumnWidth(2, LVSCW_AUTOSIZE_USEHEADER);    m_ServiceList.SetColumnWidth(3, LVSCW_AUTOSIZE_USEHEADER);}

OnInitDialog:

 InitServiceList(); m_win32Ctr.SetCheck(TRUE); ShowServiceList(SERVICE_WIN32);

RadioButton:

void CServerManageDlg::OnRadio1() {    // TODO: Add your control notification handler code here    UpdateData(TRUE);    ShowServiceList(SERVICE_WIN32);}void CServerManageDlg::OnRadio2() {    // TODO: Add your control notification handler code here    UpdateData(TRUE);    ShowServiceList(SERVICE_DRIVER);}

这里写图片描述

0 0
原创粉丝点击