zoukankan      html  css  js  c++  java
  • 重启进程

    方法一:

    void CXXXDlg::RestartSoftWare()
    {
    ::PostMessage(AfxGetMainWnd()->m_hWnd/*NULL*/, WM_SYSCOMMAND, SC_CLOSE, NULL);
    //获取exe程序当前路径
    extern CXXXApp theApp;
    TCHAR szAppName[MAX_PATH];
    ::GetModuleFileName(theApp.m_hInstance, szAppName, MAX_PATH);
    CString strAppFullName;
    strAppFullName.Format(_T("%s"), szAppName);


    //重启程序
    STARTUPINFO StartInfo;
    PROCESS_INFORMATION procStruct;
    memset(&StartInfo, 0, sizeof(STARTUPINFO));
    StartInfo.cb = sizeof(STARTUPINFO);
    ::CreateProcess(
    (LPCTSTR)strAppFullName,
    NULL,
    NULL,
    NULL,
    FALSE,
    NORMAL_PRIORITY_CLASS,
    NULL,
    NULL,
    &StartInfo,
    &procStruct);
    }

    方法二:

    //启动

    ShellExecute(NULL,"open","Path","","",SW_SHOW);

    //关闭进程
    UINT iProID=GetProcessIdByName(_T(".exe"));
    HWND hWnd=ProcIDToMainHWND(iProID);
    if(hWnd){
    ::SendMessage(hWnd,WM_CLOSE,0,0);
    }

    #include "tlhelp32.h"
    // 根据进程反找主窗口句柄(不稳定)
    // 2007.9.16
    HWND ProcIDToMainHWND(DWORD a_hProcID)
    {
    int iCount=0;
    HWND hWnd=::FindWindow(NULL,NULL);
    DWORD hProcId;
    while(hWnd!=0)
    {
    if(::GetParent(hWnd)==0)
    {
    //_MyGetWindowText(hWnd,chr,255);
    GetWindowThreadProcessId(hWnd, &hProcId);
    if(hProcId==a_hProcID){
    return hWnd;
    }
    }
    hWnd=::GetWindow(hWnd,GW_HWNDNEXT);
    }
    return 0;
    }

    // 根据进程反找主窗口句柄(稳定)

    typedef struct tagWNDINFO    

    {    

    DWORD   dwProcessId;    

    HWND   hWnd;    

    }WNDINFO, *LPWNDINFO;    

    BOOL CALLBACK YourEnumProc(HWND hWnd, LPARAM lParam)    

    {    

    DWORD dwProcessId;    

        GetWindowThreadProcessId(hWnd, &dwProcessId);    

        LPWNDINFO pInfo = (LPWNDINFO)lParam;    

    if(dwProcessId == pInfo->dwProcessId)    

        {    

            pInfo->hWnd = hWnd;    

    return FALSE;    

        }    

    return TRUE;    

    }    

    HWND GetProcessMainWnd(DWORD dwProcessId)    

    {    

        WNDINFO wi;    

        wi.dwProcessId = dwProcessId;    

        wi.hWnd = NULL;    

        EnumWindows(YourEnumProc, (LPARAM)&wi);    

    return wi.hWnd;    

    }       

    //根据进程名获取进程ID
    UINT GetProcessIdByName(LPCTSTR pszExeFile)
    {
    UINT nProcessID = 0;
    PROCESSENTRY32 pe = {sizeof(PROCESSENTRY32)};

    HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
    if (hSnapshot != INVALID_HANDLE_VALUE)
    {
    if (Process32First(hSnapshot, &pe))
    {
    while (Process32Next(hSnapshot, &pe))
    {
    if (lstrcmpi(pszExeFile, pe.szExeFile) == 0)
    {
    nProcessID = pe.th32ProcessID;
    break;
    }
    }
    }
    CloseHandle(hSnapshot);
    }
    return nProcessID;
    }

  • 相关阅读:
    #张祖德#
    不说啥,放题
    ……
    点群的判别(四)
    lougu P4180 【模板】严格次小生成树[BJWC2010]
    20190227模拟
    20190226模拟
    Triangles
    Darling
    Suspenseful
  • 原文地址:https://www.cnblogs.com/waterair/p/6739240.html
Copyright © 2011-2022 走看看