如何杀死EXCEL进程?

TripH0101 2010-11-02 08:34:19
用OLE操作EXCEL时,发生异常时,有EXCEL.exe进程驻留,有时有好几个,请问怎么干掉Excel.exe进程?
...全文
235 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
luciferisnotsatan 2010-11-05
  • 打赏
  • 举报
回复
system("taskkill /f /im wordpad.exe");
eseefeng 2010-11-04
  • 打赏
  • 举报
回复
1、把Form属性设置为隐藏,1秒判断结束。
2、其实最好用DLL是注入"explorer.exe"进程,DLL中HOOK“createprocess”函数,判断是不是你不想启动的进程直接over掉就OK了。有点很明显,来无影去无踪;缺点是可能一些杀毒软件会拦截
3、驱动(我也不没学过)。
具体网上去查吧..
gucunlin 2010-11-04
  • 打赏
  • 举报
回复
使用杀进程的API,杀掉进程就行了。名子都是Excel.exe 跟版本有关系吗?
TripH0101 2010-11-02
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 jiangshx 的回复:]

有没有找到excel进程?
设断点:if(strExeFile.UpperCase() == strFileName.UpperCase()){
跟踪看看strExeFile值,可能excel路径不对,就像老妖说的那样。
[/Quote]如何隐藏执行过程
__lhy 2010-11-02
  • 打赏
  • 举报
回复
包含
#include<windows.h>

code中
system("taskkill /f /im wordpad.exe");
jiangshx 2010-11-02
  • 打赏
  • 举报
回复
有没有找到excel进程?
设断点:if(strExeFile.UpperCase() == strFileName.UpperCase()){
跟踪看看strExeFile值,可能excel路径不对,就像老妖说的那样。
ccrun.com 2010-11-02
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 thwen0101 的回复:]
调用这个函数后不能结束EXCEL进程啊
[/Quote]

你把5楼的代码,结合上我在6楼的回复,就可以了。

因为没人知道你的机器上安装的Excel是哪个版本,也没人知道你的Excel安装在什么路径中。
TripH0101 2010-11-02
  • 打赏
  • 举报
回复
调用这个函数后不能结束EXCEL进程啊
ccrun.com 2010-11-02
  • 打赏
  • 举报
回复
不同用户机器上安装的Excel版本不同,安装路径也有差异,所以excel.exe的路径,最好是从注册表读取:
#include <registry.hpp>

// 从注册表中获取Excel.exe的路径
String CrnGetExcelAppPath()
{
TRegistry *reg = new TRegistry;
reg->RootKey = HKEY_LOCAL_MACHINE;
reg->OpenKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\excel.exe", false);
String strExcelAppPath = reg->ReadString("");
reg->CloseKey();
delete reg;

return strExcelAppPath;
}
jiangshx 2010-11-02
  • 打赏
  • 举报
回复

//---------------------------------------------------------------------------
#include <tlhelp32.hpp>
int CloseProcess(String strFileName)
{
String strExeFile;
BOOL bTPed(TRUE);
PROCESSENTRY32 pe32 = { sizeof(pe32) };
MODULEENTRY32 me32 = { sizeof(me32) };
HANDLE hSnapShot, hModuleSnap;
hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if(hSnapShot == NULL)return -1;
bool bFlag = Process32First(hSnapShot, &pe32);
while(bFlag){
strExeFile = String(pe32.szExeFile);
if(strExeFile.Pos("\\") == 0){ //如果不带路径,只模糊比对进程名,去掉此条件判断
hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPALL, pe32.th32ProcessID);
if(hModuleSnap == INVALID_HANDLE_VALUE){
strExeFile = String(pe32.szExeFile);
}
else{
if(Module32First(hModuleSnap, &me32)){
strExeFile = String(me32.szExePath); //获得进程全路径名
}
}
CloseHandle(hModuleSnap);
}
if(strExeFile.UpperCase() == strFileName.UpperCase()){
//关闭指定的进程
HANDLE hProcess = OpenProcess(PROCESS_TERMINATE,FALSE,pe32.th32ProcessID);
bTPed=::TerminateProcess(hProcess,4);
}
bFlag = Process32Next(hSnapShot, &pe32);
}
CloseHandle(hSnapShot);
if(!bTPed)return -2;
return 0;
}
void __fastcall TForm1::Button2Click(TObject *Sender)
{
//CloseProcess("excel.exe");
CloseProcess("C:\\Program Files\\Microsoft Office\\Office10\\excel.exe");
}
//---------------------------------------------------------------------------

TripH0101 2010-11-02
  • 打赏
  • 举报
回复
我想先判断是否有这个进程,如果有就先干掉它。
TripH0101 2010-11-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 qq752923276 的回复:]

taskkill /f /im excel.exe
[/Quote] 能说详细点吗?
zzbinfo 2010-11-02
  • 打赏
  • 举报
回复
这个需要你程序中做好异常处理,推出Excel以后注意--> vExcelApp = Unassigned;
__lhy 2010-11-02
  • 打赏
  • 举报
回复
taskkill /f /im excel.exe

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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