在VC中如何结束进程和启动新进程

转载 2012年03月27日 14:18:12
在VC程序中如何结束系统正在运行的其他进程(该进程必须有窗口界面),其实很简单,按如下步骤进行即可:
    1.取得进程的句柄(利用FindWindow函数得到);
    2.获取进程ID号(用GetWindowThreadProcessId函数获取);
    3.打开进程,OpenProcess函数中的第一个参数设为PROCESS_TERMINATE,就可以获取处理该进程的句柄;
    4.利用TerminateProcess函数结束进程,将该函数的第二个参数设为4。

    代码如下: 
//结束进程
int CStaticFunc::KillProcess(LPCSTR pszClassName, LPCSTR

pszWindowTitle)
{
    HANDLE hProcessHandle;  
    ULONG nProcessID;
    HWND TheWindow;

    TheWindow = ::FindWindow( NULL, pszWindowTitle );
    ::GetWindowThreadProcessId( TheWindow, &nProcessID );
    hProcessHandle = ::OpenProcess( PROCESS_TERMINATE, FALSE,

nProcessID );
    return ::TerminateProcess( hProcessHandle, 4 );
}

    而启动进程则只需要CreateProcess函数就可完成,需要注意的是这个函数的几个输入参数,第一个参数是

//启动新进程
int CStaticFunc::CreateNewProcess(LPCSTR pszExeName)
{
    PROCESS_INFORMATION piProcInfoGPS;
    STARTUPINFO siStartupInfo;
    SECURITY_ATTRIBUTES saProcess, saThread;
    ZeroMemory( &siStartupInfo, sizeof(siStartupInfo) );
    siStartupInfo.cb = sizeof(siStartupInfo);
    saProcess.nLength = sizeof(saProcess);
    saProcess.lpSecurityDescriptor = NULL;
    saProcess.bInheritHandle = true;
    saThread.nLength = sizeof(saThread);
    saThread.lpSecurityDescriptor = NULL;
    saThread.bInheritHandle = true;
    return ::CreateProcess( NULL, (LPTSTR)pszExeName, &saProcess,

&saThread, false,
       CREATE_DEFAULT_ERROR_MODE, NULL, NULL,

&siStartupInfo,                             &piProcInfoGPS );
}


转帖:http://blog.csdn.net/jiangxinyu/article/details/2025228

VC++启动一个新的进程

//TCHAR szApplicationName[] = TEXT("UpdateMi.exe") ; TCHAR szCommandLine[MAX_PATH]; memset(szCom...
  • lcalqf
  • lcalqf
  • 2014年11月26日 16:22
  • 1460

vc结束进程的几种方式

1.使用ExitProcess()结束进程   进程只是提供了一段地址空间和内核对象,其运行时通过在其地址空间内的主线程来体现的。当主线程的进入点函数返回时,进程也就随之结束。这种进程的终止方式...
  • liliangshuai
  • liliangshuai
  • 2013年12月24日 16:27
  • 5149

VC获取系统进程列表、查找进程、关闭进程

PROCESSENTRY32 pe32;     pe32.dwSize=sizeof(pe32);     HANDLE hProcessSnap=::CreateToolhelp32Snaps...
  • milanleon
  • milanleon
  • 2014年06月20日 10:53
  • 2183

Android在新进程中启动 Service 的流程原理分析

在主进程调用startService函数时,会通过Binder进程间通信机制来通知ActivitManagerService来创建新进程,并且启动指定的服务。在Android系统中,Binder进程间...
  • wangbaochu
  • wangbaochu
  • 2015年01月22日 17:23
  • 2686

Linux启动新进程的几种方法及比较

有时候,我们需要在自己的程序(进程)中启动另一个程序(进程)来帮助我们完成一些工作,那么我们需要怎么才能在自己的进程中启动其他的进程呢?在Linux中提供了不少的方法来实现这一点,下面就来介绍一个这些...
  • ljianhui
  • ljianhui
  • 2013年08月20日 00:15
  • 41219

VC(win32)通过进程名杀死进程

#include "TlHelp32.h" void CKillProcessDlg::OnBnClickedOk() { // TODO: 在此添加控件通知处理程序代码 //OnO...
  • gongluck93
  • gongluck93
  • 2017年08月07日 15:09
  • 464

VC常用代码之创建进程

作者:朱金灿来源:http://blog.csdn.net/clever101            创建进程是编程开发的常用操作。Windows中的创建进程采用API函数CreateProcess实...
  • clever101
  • clever101
  • 2015年10月31日 23:53
  • 8768

Android应用程序在新的进程中启动新的Activity的方法和过程分析

版权声明:本文为博主原创文章,未经博主允许不得转载。         前面我们在分析Activity启动过程的时候,看到同一个应用程序的Activity一般都是在同一个进程中启动,事实上,A...
  • rabbit_in_android
  • rabbit_in_android
  • 2016年01月25日 15:21
  • 1854

判断指定的进程或程序是否存在方法小结(vc等)

一、判断指定程序名的进程是否存在      BOOL EnumWindows( WNDENUMPROC lpEnumFunc, // pointer to callback function LPA...
  • fuck51cto
  • fuck51cto
  • 2017年06月28日 11:19
  • 338

【vs2015】C++ 程序运行并等待进程结束

1.VS2015 新建项目->win32 控制台应用程序 2.头文件stdafx.h // stdafx.h : 标准系统包含文件的包含文件, // 或是经常使用但不常更改的 // 特定于项目的包含...
  • greless
  • greless
  • 2016年09月21日 17:45
  • 1944
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在VC中如何结束进程和启动新进程
举报原因:
原因补充:

(最多只允许输入30个字)