C++怎样关闭一个已经名称的程序的进程?

比如在E:\盘有一个程序叫456.exe,并且正在运行(不一定要在最前台)。如何在一个对话框的按钮事件上编写代码,强制关闭它?另外,我想定期检查任务管理器是否进在运行,如... 比如在E:\盘有一个程序叫456.exe,并且正在运行(不一定要在最前台)。
如何在一个对话框的按钮事件上编写代码,强制关闭它?

另外,我想定期检查任务管理器是否进在运行,如果运行,就关掉它。

这对我很重要,我们的作业是做一个挂机软件,能锁定屏幕,我已经垄断键盘输入,和挟持任务栏,就是不知道怎么屏蔽任务管理器。

我不要通过修改注册表禁用任务管理器,我是想知道怎样关掉一个已经名称并正在运行中的程序的进程。

请哪个高手能告诉小弟,最好是有代码(写在按钮事件的代码),感激不尽!
展开
 我来答
L_o_o_n_i_e
2010-04-01 · TA获得超过4.2万个赞
知道大有可为答主
回答量:8507
采纳率:38%
帮助的人:5086万
展开全部
用 system("tasklist ...>> a.log"); 转向到a.log 文件
查 a.log

system("TASKKILL /F /IM 456.exe"); 去掉它。

详细 tasklist 和 TASKKILL 选项 见帮助文件 (DOS 窗 打 tasklist /?)(DOS 窗 打 TASKKILL /?)
左_后卫
2010-04-01 · TA获得超过118个赞
知道小有建树答主
回答量:267
采纳率:0%
帮助的人:166万
展开全部
下面的一段代码是关闭任务管理器的.你试一下.我是在控制台下写的.
任务管理器应该可以屏蔽掉的,你到网上找一下,应该有相关的知识.
你已屏蔽了键盘输入是什么意思?那样的话,怎么开锁?在编写这类程序的时候,最好是先给程序留一个后门,比如:按F1退出程序.要不然后话,很容易就输入不了信息,只能重启电脑了.
#include <Afx.h>
//#include <windows.h>
#include <Winbase.h>
#include <Tlhelp32.h>

#pragma comment(lib, "Kernel32.lib")
int main()
{

HANDLE hProcessSnap = NULL;
PROCESSENTRY32 process32;
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
process32.dwSize = sizeof(PROCESSENTRY32);
BOOL b = Process32First(hProcessSnap, &process32);
HANDLE hProcess;
while (b)
{
CString strTempName;
strTempName.Format("%s", process32.szExeFile);

if (strTempName.Find("taskmgr") != -1)
{
DWORD dwId = process32.th32ProcessID;

hProcess = OpenProcess(PROCESS_TERMINATE, FALSE, dwId);
if ( NULL == hProcess )
{
return 0;
}
//printf("%d", GetLastError());
TerminateProcess(hProcess, 0);
//printf("%d", GetLastError());
CloseHandle(hProcess);
}
b = Process32Next(hProcessSnap,&process32);
}
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
54zhangxun
推荐于2017-09-02 · TA获得超过684个赞
知道小有建树答主
回答量:374
采纳率:75%
帮助的人:143万
展开全部
1. 遍历进程,得到进程ID
DWORD GetProcessID(LPCTSTR lpProcessName)
{
//创建进程快照
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if(hSnapshot != INVALID_HANDLE_VALUE)
{
PROCESSENTRY32 pe32 = {0};
pe32.dwSize = sizeof(pe32);

//拿到第一个进程信息
if(!Process32First(hSnapshot, &pe32))
{
CloseHandle(hSnapshot);
return FALSE;
}
do
{
int nLen = _tcslen(lpProcessName);
int nLen2 = _tcslen(pe32.szExeFile);
if(nLen != nLen2)
{
continue;
}
if(_tcscmp(lower(lpProcessName), lower(pe32.szExeFile)) == 0)
{
return pe32.th32ParentProcessID;
}
} while (Process32Next(hSnapshot, &pe32));
}
return 0;
}
2. 获取进程句柄
HANDLE hProcess = OpenProcess(PROCESS_TERMINATE,FALSE,GetProcessID("yourprocessname"));
3. 结束进程
TerminateProcess(hProcess,0);//关闭进程
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式