VC 创建新进程,结束进程 (打开exe等可执行文件)
2008-12-11 09:41
477 查看
在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 );
///方法二:
return ::PostMessage(TheWindow, WM_CLOSE, NULL, NULL);
}
而启动进程则只需要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 );
}
///方法二:
WinExec(lpCmdLine, uCmdShow);
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 );
///方法二:
return ::PostMessage(TheWindow, WM_CLOSE, NULL, NULL);
}
而启动进程则只需要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 );
}
///方法二:
WinExec(lpCmdLine, uCmdShow);
相关文章推荐
- 根据进程名称获取进程pid,结束进程,执行exe文件
- VC 打开 Excel 文件后,excel.exe进程无法退出
- 深入剖析PE文件 (告诉你exe文件打开后是依据什么来创建进程并在系统中运行)
- 深入剖析PE文件 (告诉你exe文件打开后是依据什么来创建进程并在系统中运行)
- [置顶] java语言编程实现打开exe可执行文件以及txt,word等文件功能
- VC中Error spawning cl.exe错误的解决方法.( 无法打开文件 winresrc.h)
- VC 打开批处理文件 可以看到dos窗口,但是执行后没有效果
- Windows VC++ 调整进程当前目录为程序可执行文件所在目录
- Windows VC++ 调整进程当前目录为程序可执行文件所在目录
- exe无法打开任何可执行文件的解决办法
- 在VC中创建DLL文件的方法步骤--DLL文件与exe文件的区别
- 使用createprocess()创建进程打开其他文件方法
- VC 创建和结束进程
- 无法打开.exe可执行文件问题 解决方案
- VC++之执行指定目录下的exe文件
- c# 打开外部可执行文件exe。
- Linux下获取当前进程的执行文件的绝对路径和所在目录(通过/proc/self/exe链接)
- VC++创建和结束进程
- VC 快速创建多层文件夹&文件的创建、打开、读写、操作
- 批处理bat文件实现复制、删除、创建文件夹、执行程序、打开文件