★判断进程并杀之★ 小恶搞程序中的一段

KaKaKaKa 2010-02-22 03:28:25
VC:
(Win32程序,非MFC)

-----------------------------------

要求:

判断当前进程中是否存在taskmgr.exe的进程,即判断是否正在运行任务管理器,
如果有,就用API去Kill它。

-----------------------------------

写的小恶搞程序中的一段,感谢帮助,谢谢。
...全文
192 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
bragi523 2010-02-23
  • 打赏
  • 举报
回复
bool verifyProcess(LPCTSTR lpszProcessName)
{
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

if (hSnapshot == INVALID_HANDLE_VALUE) {
MessageBox(NULL, "Create process snapshot failed !", "Notice", MB_ICONINFORMATION | MB_OK);
return false;
}

PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(PROCESSENTRY32);

if (!Process32First(hSnapshot, &pe32)) {
MessageBox(NULL, "Process32Frist function runs failed !", "Notice", MB_ICONINFORMATION | MB_OK);
CloseHandle(hSnapshot);
return false;
}

WCHAR wszProcess[MAX_PATH];
MultiByteToWideChar(CP_ACP, 0, lpszProcessName,
strlen(lpszProcessName)+1, wszProcess, sizeof(wszProcess)/sizeof(wszProcess[0]));

do {
if (!lstrcmpi(lpszProcessName, pe32.szExeFile))
return true;
} while(Process32Next(hSnapshot, &pe32));

CloseHandle(hSnapshot);

return false;
}
KaKaKaKa 2010-02-23
  • 打赏
  • 举报
回复
引用 4 楼 advdb2002 的回复:
抛砖引玉瞎写写!请高人写个更好的
C/C++ code
HWND hwnd= FindWindow(NULL,"Windows 任务管理器");
DWORD processid;
DWORD threadid= GetWindowThreadProcessId(hwnd,&processid);
HANDLE hProcess= ::OpenProcess( PROCESS_ALL_ACCESS,false, processid );if( hProcess)
{
TerminateProcess( hProcess,0);
CloseHandle(hProcess);
}


不知道为什么,在我这里就是没法杀掉任务管理器,我是中文的系统,系统管理员权限,任务管理器窗口的标题也确实是"Windows 任务管理器",用OpenProcess函数后发现hProcess是0啊,怎么回事?
Eleven 2010-02-22
  • 打赏
  • 举报
回复
CreateToolhelp32Snapshot(),Frist,Next遍历进程,找到指定进程,Kill off
MoXiaoRab 2010-02-22
  • 打赏
  • 举报
回复
#4其实是可行的。但是呢,你想过英文系统了么?
所以还是通过遍历进程名实现比较好。查找窗口很多情况下不靠谱
KaKaKaKa 2010-02-22
  • 打赏
  • 举报
回复
哈哈,各位见笑了,不是啥木马,这点小玩意也称不上木马,呵呵
小弟初学,搞着自娱自乐的
advdb2002 2010-02-22
  • 打赏
  • 举报
回复
其实你就是要通过进程名称得到进程的句柄或者id就行了。
网上太多了!
Henry8484 2010-02-22
  • 打赏
  • 举报
回复
学习了。。。。。。。
jingzhongrong 2010-02-22
  • 打赏
  • 举报
回复
引用 5 楼 yangjianpro_hotmail 的回复:
谢谢4楼的代码,但通过FindWindow函数是不太合适的,要求的是查杀taskmgr进程,
这里主要是想知道VC如何查找指定名称的进程以及如何杀之,谢谢。


遍历进程有很多方法,google。
WizardK 2010-02-22
  • 打赏
  • 举报
回复
引用 2 楼 jingzhongrong 的回复:
这个也太恶搞了吧


哈哈,十分感兴趣LZ弄出来的木马程序能够达到什么功效。。。
KaKaKaKa 2010-02-22
  • 打赏
  • 举报
回复
谢谢4楼的代码,但通过FindWindow函数是不太合适的,要求的是查杀taskmgr进程,
这里主要是想知道VC如何查找指定名称的进程以及如何杀之,谢谢。
advdb2002 2010-02-22
  • 打赏
  • 举报
回复
抛砖引玉瞎写写!请高人写个更好的

HWND hwnd = FindWindow(NULL,"Windows 任务管理器");
DWORD processid;
DWORD threadid = GetWindowThreadProcessId(hwnd,&processid);
HANDLE hProcess = ::OpenProcess( PROCESS_ALL_ACCESS, false, processid );
if( hProcess)
{
TerminateProcess( hProcess,0);
CloseHandle(hProcess);
}

oldmanzhao 2010-02-22
  • 打赏
  • 举报
回复
遍历进程,打开进程(要有TERMINATE的权限),然后TerminateProcess
jingzhongrong 2010-02-22
  • 打赏
  • 举报
回复
这个也太恶搞了吧
WizardK 2010-02-22
  • 打赏
  • 举报
回复
参考这个
http://www.cmd58.com/Ku_showart.asp?id=331

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧