ysm 发表于 2014-3-10 21:02:52

在vc下如何结束一个正在执行的.exe文件???

刚涉足C...求指点

machimilk 发表于 2014-3-10 21:02:53

给你写个例子,你开个记事本看看,程序能不能关闭你的记事本



#include "stdafx.h"
#include <stdio.h>
#include <tchar.h>
#include <iostream>
#include <Windows.h>
#include <fstream>
#include <string>
#include <TlHelp32.h>
using namespace std;



int main()
{
        int a=0;
        printf("请输入结束记事本进程的方式,输入1代表调用dos命令,输入2代表api\n");

    scanf("%d",&a);
        if (a==1)
        {
      system("@echo off");
                system("taskkill /IM notepad.exe >nul");
                system("@echo on");
        }
        if (a==2)
        {
                int pid=0;
                HANDLESnapShot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
                PROCESSENTRY32W pro;
                pro.dwSize=sizeof(PROCESSENTRY32W);
                BOOLFlag=Process32First(SnapShot, &pro );
                while(Flag)
                {
                        if(wcscmp(pro.szExeFile,L"notepad.exe")==0)
                                pid=pro.th32ProcessID;
                          Flag=Process32Next(SnapShot,&pro);
                }
         if (pid)
         {
                       HANDLE hdl= OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid);
                       if (hdl)
                          TerminateProcess(hdl,0);
                   }
        }
    return 0;
}


machimilk 发表于 2014-3-10 21:08:15

方法很多,比如用apiTerminateProcess 当然要先打开进程用OpenProcess
或者用system()调用dos命令 taskkill结束指定进程

ysm 发表于 2014-3-10 21:28:15

machimilk 发表于 2014-3-10 21:08 static/image/common/back.gif
方法很多,比如用apiTerminateProcess 当然要先打开进程用OpenProcess
或者用system()调用dos命令 tas ...

关键是我现在得不到已经执行的.exe程序的ID,在另外vc程序中能不能通过.exe文件名来关闭此进程

machimilk 发表于 2014-3-10 21:56:21

ysm 发表于 2014-3-10 21:28 static/image/common/back.gif
关键是我现在得不到已经执行的.exe程序的ID,在另外vc程序中能不能通过.exe文件名来关闭此进程

得到pid容易,没pid也可以用taskkill结束的

ysm 发表于 2014-3-11 15:11:29

machimilk 发表于 2014-3-10 22:31 static/image/common/back.gif
给你写个例子,你开个记事本看看,程序能不能关闭你的记事本

谢谢...可以啦!!!

ysm 发表于 2014-3-11 18:48:22

machimilk 发表于 2014-3-10 21:02 static/image/common/back.gif
给你写个例子,你开个记事本看看,程序能不能关闭你的记事本

不知道咋回事,这段代码在vc下老是不能执行....

#include "stdafx.h"
#include <stdio.h>
#include <Windows.h>
#include <string>
#include <TlHelp32.h>
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR   lpCmdLine,
                     int       nCmdShow)
{
        // TODO: Place code here.
        int pid=0;
        HANDLESnapShot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
        PROCESSENTRY32W pro;
        pro.dwSize=sizeof(PROCESSENTRY32W);
        BOOLFlag=Process32First(SnapShot, &pro );
        while(Flag)
        {
                if(wcscmp(pro.szExeFile,L"notepad.exe")==0)
                        pid=pro.th32ProcessID;
                Flag=Process32Next(SnapShot,&pro);
        }
        if (pid)
        {
                HANDLE hdl= OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid);
                if (hdl)
                        TerminateProcess(hdl,0);
    }
        return 0;
}

machimilk 发表于 2014-3-11 19:00:44

ysm 发表于 2014-3-11 18:48 static/image/common/back.gif
不知道咋回事,这段代码在vc下老是不能执行....

#include "stdafx.h"


应该没问题 我在vs2008上面写的unicode环境 ,如果你不成功 API请使用窄字符版本

ysm 发表于 2014-3-11 19:21:14

machimilk 发表于 2014-3-11 19:00 static/image/common/back.gif
应该没问题 我在vs2008上面写的unicode环境 ,如果你不成功 API请使用窄字符版本

恩恩,我用的是vc6.0编译环境,估计是编码问题吧
页: [1]
查看完整版本: 在vc下如何结束一个正在执行的.exe文件???