help

解决方案 »

  1.   

    如果要比较多的控制进程,建议使用CreateProcess()
    比如:
    建一个全局HANDLE m_hPro;
    打开:
    PROCESS_INFORMATION pi;
    STARTUPINFO si; memset(&si, 0, sizeof(si));
    si.cb = sizeof(si);
    si.wShowWindow = SW_SHOW;
    si.dwFlags = STARTF_USESHOWWINDOW; BOOL fRet = CreateProcess(NULL,
    "C:\\Program Files\\Internet Explorer\\IEXPLORE.EXE www.google.com",
    NULL,
    NULL,
    FALSE,
    NORMAL_PRIORITY_CLASS | CREATE_NEW_CONSOLE,
    NULL,
    NULL,
    &si,
    &pi); if(!fRet) //failed
    {
    LPVOID lpMsgBuf;
    FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
    FORMAT_MESSAGE_FROM_SYSTEM |
    FORMAT_MESSAGE_IGNORE_INSERTS,
    NULL,
    GetLastError(),
    MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
    (LPTSTR)&lpMsgBuf,
    0,
    NULL);
    AfxMessageBox((LPCTSTR)lpMsgBuf);
    LocalFree(lpMsgBuf);
    }
    else
    {
    AfxMessageBox("CreateProcess OK");
    m_hPro = pi.hProcess;
    }
    关闭:
    if(m_hPro){ //Close
    if(!TerminateProcess(m_hPro, 0)) //Error
    {
    LPVOID lpMsgBuf; FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
    FORMAT_MESSAGE_FROM_SYSTEM |
    FORMAT_MESSAGE_IGNORE_INSERTS,
    NULL,
    GetLastError(),
    MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
    (LPTSTR)&lpMsgBuf,
    0,
    NULL);
    AfxMessageBox((LPCTSTR)lpMsgBuf);
    LocalFree(lpMsgBuf);
    }
    else
    {
    AfxMessageBox("TerminateProcess OK");
    }
    m_hPro = NULL;
    }
    else
    AfxMessageBox("m_hPro is NULL");
      

  2.   

    简单点的如果不是多个相同程序多个运行的话也可以这样:
    1,m_hwnd=::FindWindow
    2,::SendMessage(m_hwnd->m_hwnd,WM_CLOSE,0,0);
      

  3.   

    比如说打开了一个记事本程序要关闭它:  HWND m_hwnd=FindWindow("notepad",NULL);//这要NULL可以用所对应的程序标题代替
     ::SendMessage(m_hwnd->m_hwnd,WM_CLOSE,0,0);
      

  4.   

    同意,使用 CreateProcess 运行程序的话你可以通过 TerminateProcess 来结束应用程序
    否则你需要查找到进程对应的主窗口并发送 WM_QUIT 消息来结束,但发送消息的方式对于控制台程序不起作用