鱼C论坛

 找回密码
 立即注册
查看: 2606|回复: 8

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

[复制链接]
发表于 2014-3-10 21:02:52 | 显示全部楼层 |阅读模式
1鱼币
刚涉足C...求指点

最佳答案

查看完整内容

给你写个例子,你开个记事本看看,程序能不能关闭你的记事本
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-3-10 21:02:53 | 显示全部楼层
给你写个例子,你开个记事本看看,程序能不能关闭你的记事本
testRun.rar (32.49 KB, 下载次数: 3)


  1. #include "stdafx.h"
  2. #include <stdio.h>
  3. #include <tchar.h>
  4. #include <iostream>
  5. #include <Windows.h>
  6. #include <fstream>
  7. #include <string>
  8. #include <TlHelp32.h>
  9. using namespace std;



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

  14.     scanf("%d",&a);
  15.         if (a==1)
  16.         {
  17.         system("@echo off");
  18.                 system("taskkill /IM notepad.exe >nul");
  19.                 system("@echo on");
  20.         }
  21.         if (a==2)
  22.         {
  23.                 int pid=0;
  24.                 HANDLE  SnapShot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
  25.                 PROCESSENTRY32W pro;
  26.                 pro.dwSize=sizeof(PROCESSENTRY32W);
  27.                 BOOL  Flag=Process32First(SnapShot, &pro );
  28.                 while(Flag)
  29.                 {
  30.                         if(wcscmp(pro.szExeFile,L"notepad.exe")==0)
  31.                                 pid=pro.th32ProcessID;
  32.                             Flag=Process32Next(SnapShot,&pro);
  33.                 }
  34.          if (pid)
  35.          {
  36.                          HANDLE hdl= OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid);
  37.                          if (hdl)
  38.                           TerminateProcess(hdl,0);
  39.                    }
  40.         }
  41.     return 0;
  42. }

复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-3-10 21:08:15 | 显示全部楼层
方法很多,比如用api  TerminateProcess 当然要先打开进程用OpenProcess
或者用system()调用dos命令 taskkill结束指定进程
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-3-10 21:28:15 | 显示全部楼层

关键是我现在得不到已经执行的.exe程序的ID,在另外vc程序中能不能通过.exe文件名来关闭此进程
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-3-10 21:56:21 | 显示全部楼层
ysm 发表于 2014-3-10 21:28
关键是我现在得不到已经执行的.exe程序的ID,在另外vc程序中能不能通过.exe文件名来关闭此进程

得到pid容易,没pid也可以用taskkill结束的
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-3-11 15:11:29 | 显示全部楼层
machimilk 发表于 2014-3-10 22:31
给你写个例子,你开个记事本看看,程序能不能关闭你的记事本

谢谢...可以啦!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-3-11 18:48:22 | 显示全部楼层
machimilk 发表于 2014-3-10 21:02
给你写个例子,你开个记事本看看,程序能不能关闭你的记事本

不知道咋回事,这段代码在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;
        HANDLE  SnapShot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
        PROCESSENTRY32W pro;
        pro.dwSize=sizeof(PROCESSENTRY32W);
        BOOL  Flag=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;
}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-3-11 19:00:44 | 显示全部楼层
ysm 发表于 2014-3-11 18:48
不知道咋回事,这段代码在vc下老是不能执行....

#include "stdafx.h"

应该没问题 我在vs2008上面写的unicode环境 ,如果你不成功 API请使用窄字符版本
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-3-11 19:21:14 | 显示全部楼层
machimilk 发表于 2014-3-11 19:00
应该没问题 我在vs2008上面写的unicode环境 ,如果你不成功 API请使用窄字符版本

恩恩,我用的是vc6.0编译环境,估计是编码问题吧
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-27 07:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表