MFC如何关闭进程 大家好,我用的是VC6.0,想请问一下如何关闭某个进程,已知进程名,但没有窗口句柄(窗口属性中Border选择了None),最好能有几句代码,多谢啦 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 BOOL KillProcessFromName(CString strProcessName) { //创建进程快照(TH32CS_SNAPPROCESS表示创建所有进程的快照) HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); //PROCESSENTRY32进程快照的结构体 PROCESSENTRY32 pe; //实例化后使用Process32First获取第一个快照的进程前必做的初始化操作 pe.dwSize = sizeof(PROCESSENTRY32); //下面的IF效果同: //if(hProcessSnap == INVALID_HANDLE_VALUE) 无效的句柄 if(!Process32First(hSnapShot,&pe)) { return FALSE; } //将字符串转换为小写 strProcessName.MakeLower(); //如果句柄有效 则一直获取下一个句柄循环下去 while (Process32Next(hSnapShot,&pe)) { //pe.szExeFile获取当前进程的可执行文件名称 CString scTmp = pe.szExeFile; //将可执行文件名称所有英文字母修改为小写 scTmp.MakeLower(); //比较当前进程的可执行文件名称和传递进来的文件名称是否相同 //相同的话Compare返回0 if(!scTmp.Compare(strProcessName)) { //从快照进程中获取该进程的PID(即任务管理器中的PID) DWORD dwProcessID = pe.th32ProcessID; HANDLE hProcess = ::OpenProcess(PROCESS_TERMINATE,FALSE,dwProcessID); ::TerminateProcess(hProcess,0); CloseHandle(hProcess); return TRUE; } scTmp.ReleaseBuffer(); } strProcessName.ReleaseBuffer(); return FALSE; } void CloseProgram(CString strProgram){ HANDLE handle; //定义CreateToolhelp32Snapshot系统快照句柄 HANDLE handle1; //定义要结束进程句柄 handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);//获得系统快照句柄 PROCESSENTRY32 *info; //定义PROCESSENTRY32结构字指 //PROCESSENTRY32 结构的 dwSize 成员设置成 sizeof(PROCESSENTRY32) info = new PROCESSENTRY32; info->dwSize = sizeof(PROCESSENTRY32); //调用一次 Process32First 函数,从快照中获取进程列表 Process32First(handle, info); //重复调用 Process32Next,直到函数返回 FALSE 为止 while(Process32Next(handle, info) != FALSE) { CString strTmp = info->szExeFile; //指向进程名字 //strcmp字符串比较函数同要结束相同 //if(strcmp(c, info->szExeFile) == 0 ) if (strProgram.CompareNoCase(info->szExeFile) == 0 ) { //PROCESS_TERMINATE表示为结束操作打开,FALSE=可继承,info->th32ProcessID=进程ID handle1 = OpenProcess(PROCESS_TERMINATE, FALSE, info->th32ProcessID); //结束进程 TerminateProcess(handle1, 0); } } delete info; CloseHandle(handle);} 我想关闭Play.exe进程,是把strProcessName换成Play.exe吗?可会报错,还请多指教 System(“DOS命令”)参照这个taskkill命令使用使用链接 直接调用CloseProgram(_T("Play.exe"));这句话就好了,试试呢?你可以跟进去调试下,看看哪句的问题 一个基本的问题,但是不知道错在哪 大家有好的做VC界面的工具不?谢谢! 英文,编程,女人,你觉得哪个更重要 关于多进程同时使用硬件设备(Mifare读卡器)的解决方案 端口问题(初级菜鸟级别) 如何判断鼠标移入和移出一个控件的区域 vc中怎样调用API(不用mfc) 请教各位,MFC库中的Afx*.h等文件的功能是什么?那里有介绍他们的书籍. 各位高手大侠,进来指点一下?? 关于LINK的提示 MFC如何关闭进程 多线程创建窗口的问题
{
//创建进程快照(TH32CS_SNAPPROCESS表示创建所有进程的快照)
HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
//PROCESSENTRY32进程快照的结构体
PROCESSENTRY32 pe;
//实例化后使用Process32First获取第一个快照的进程前必做的初始化操作
pe.dwSize = sizeof(PROCESSENTRY32);
//下面的IF效果同:
//if(hProcessSnap == INVALID_HANDLE_VALUE) 无效的句柄
if(!Process32First(hSnapShot,&pe))
{
return FALSE;
}
//将字符串转换为小写
strProcessName.MakeLower();
//如果句柄有效 则一直获取下一个句柄循环下去
while (Process32Next(hSnapShot,&pe))
{
//pe.szExeFile获取当前进程的可执行文件名称
CString scTmp = pe.szExeFile;
//将可执行文件名称所有英文字母修改为小写
scTmp.MakeLower();
//比较当前进程的可执行文件名称和传递进来的文件名称是否相同
//相同的话Compare返回0
if(!scTmp.Compare(strProcessName))
{
//从快照进程中获取该进程的PID(即任务管理器中的PID)
DWORD dwProcessID = pe.th32ProcessID;
HANDLE hProcess = ::OpenProcess(PROCESS_TERMINATE,FALSE,dwProcessID);
::TerminateProcess(hProcess,0);
CloseHandle(hProcess);
return TRUE;
}
scTmp.ReleaseBuffer();
}
strProcessName.ReleaseBuffer();
return FALSE;
}
{
HANDLE handle; //定义CreateToolhelp32Snapshot系统快照句柄
HANDLE handle1; //定义要结束进程句柄
handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);//获得系统快照句柄
PROCESSENTRY32 *info; //定义PROCESSENTRY32结构字指
//PROCESSENTRY32 结构的 dwSize 成员设置成 sizeof(PROCESSENTRY32) info = new PROCESSENTRY32;
info->dwSize = sizeof(PROCESSENTRY32);
//调用一次 Process32First 函数,从快照中获取进程列表
Process32First(handle, info);
//重复调用 Process32Next,直到函数返回 FALSE 为止
while(Process32Next(handle, info) != FALSE)
{
CString strTmp = info->szExeFile; //指向进程名字
//strcmp字符串比较函数同要结束相同
//if(strcmp(c, info->szExeFile) == 0 )
if (strProgram.CompareNoCase(info->szExeFile) == 0 )
{
//PROCESS_TERMINATE表示为结束操作打开,FALSE=可继承,info->th32ProcessID=进程ID
handle1 = OpenProcess(PROCESS_TERMINATE, FALSE, info->th32ProcessID);
//结束进程
TerminateProcess(handle1, 0);
}
}
delete info; CloseHandle(handle);
}
参照这个
taskkill命令使用
使用链接
直接调用CloseProgram(_T("Play.exe"));这句话就好了,试试呢?你可以跟进去调试下,看看哪句的问题