首页
社区
课程
招聘
[旧帖] [求助] 用进程名来结束进程的问题 0.00雪花
发表于: 2013-2-3 17:19 1335

[旧帖] [求助] 用进程名来结束进程的问题 0.00雪花

2013-2-3 17:19
1335
我想用进程名来结束指定的进程 但是总是失败 代码如下
#include <WINDOWS.H>
#include <TLHELP32.H>        //声明快照函数的头文件
#include <STDIO.H>

int main(int argc, char *argv[])
{
        PROCESSENTRY32 pe32;

        //设置结构体的大小
        pe32.dwSize = sizeof(pe32);

        //系统快照
        HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
        if (hProcessSnap == INVALID_HANDLE_VALUE)
        {
                printf("CreateToolhelp32Snapshot Faild! \n");
                return -1;
        }

        BOOL bMore = ::Process32First(hProcessSnap,&pe32);
        while (bMore)
        {
                printf("Process Name:%s\n",pe32.szExeFile);
                printf("Process ID:%u\n\n",pe32.th32ProcessID);
                //bMore = ::Process32Next(hProcessSnap,&pe32);
               
                char ProcessName[] = "notepad.exe";
                if (pe32.szExeFile == ProcessName)
                {
                        HANDLE hKillProcess = ::OpenProcess(PROCESS_ALL_ACCESS,true,pe32.th32ProcessID);
                        if (hKillProcess != NULL)
                        {
                                printf("Close Handle!\n");
                                ::TerminateProcess(hKillProcess,0);
                                CloseHandle(hKillProcess);
                        }
                       
                }
                bMore = ::Process32Next(hProcessSnap,&pe32);
       
        }
        CloseHandle(hProcessSnap);

        return 0;
}

因为先前不知道指定进程的ID,只能通过进程名,但是总是不能实现  
如果把代码改成用ID来结束是没有问题的 希望大神们看看这程序有什么问题

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 40
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
找到原因啦 if (strcmp(pe32.szExeFile,ProcessName) == 0) 原来的方法比较的是字符串地址  嘎嘎
2013-2-3 20:42
0
雪    币: 19
活跃值: (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
这一行有问题,你不会是学JAVA 或 C#的吧?

char ProcessName[] = "notepad.exe";
if (pe32.szExeFile == ProcessName)    {
...

不能直接这么等,使用函数 0 == _tcsicmp(pe32.szExeFile, ProcessName),另一个 ProcessName 不要定义为  char,定义为 TCHAR,因为 PROCESSETNRY32 是分 Ansi 和 Unicode 两个版本的。
2013-2-5 13:54
0
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
新人,来虚心学习
2013-2-5 14:20
0
雪    币: 40
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
多谢了 找到原因来了 我是电子专业的 后来发现更喜欢软件 在自学
2013-2-13 16:37
0
游客
登录 | 注册 方可回帖
返回
//