如何杀死正在运行的程序/进程???

CTO 2001-05-06 03:57:00
如何杀死正在运行的程序/进程???

void __fastcall TForm1::Button1Click(TObject *Sender)
{
杀死普通进程,比如:bcb.exe
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
杀死服务进程/系统进程,比如:System
}
//---------------------------------------------------------------------------
...全文
302 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
CTO 2001-05-14
  • 打赏
  • 举报
回复
给分。
luhongjun 2001-05-08
  • 打赏
  • 举报
回复
BCB(:)):
2000下真的杀不掉,不知为什么。2000下的资料太少了,MSDN也没有介绍。
Jinglihui 2001-05-07
  • 打赏
  • 举报
回复
老哥,我这个可是一点没用的都没有呀!我有列举系统进程,且选择杀死进程的BCB例子
如果想要,给我发信goldbabby@263.net
Jinglihui 2001-05-07
  • 打赏
  • 举报
回复
不好意思丢了一点东西
在那个while应该这样写:
while(rValue)
{
if(ExtractFileName(lppe.szExeFile)=="bcb.exe")//此处最好用字符串判等
{
pID=lppe.th32ProcessID; //在此便得到了进程的ID
break;
}
rValue=Process32Next(hSnapshot,&lppe); //这是上边所丢的一句话,如果丢了
//它是万万不行的
}
CloseHandle(hSnapshot);

Jinglihui 2001-05-07
  • 打赏
  • 举报
回复
没有那复杂
如果你想终止一个进程首先你要得到那个进程的ID,然后调用
HANDLE pHandle=OpenProcess(PROCESS_TERMINATE,false,pID)
TerminateProcess(pHandle,-9)
即可终止一个进程

关于如何获得进程ID,如下
bool rValue
DWORD pID
PROCESSENTRY32 lppe;
HANDLE hSnapshot;
hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
lppe.dwSize = sizeof(lppe);
rValue=Process32First(hSnapshot,&lppe);
while(rValue)
{
if(ExtractFileName(lppe.szExeFile)=="bcb.exe")//此处最好用字符串判等
{
pID=lppe.th32ProcessID; //在此便得到了进程的ID
break;
}
}
BCB 2001-05-07
  • 打赏
  • 举报
回复
Win2000也能杀进程?!
我在WIN98能杀进程,将此程序复制到win2000下就不行了,杀不掉,
谁能邦我解决,保证送你300分!!!!!
xycleo 2001-05-07
  • 打赏
  • 举报
回复
老哥我这个就可达到你的要求


HWND Myhandle;
Myhandle=FindWindow(nil, "标题"); //标题是在Ctrl+alt+shift中显示的名字
if (Myhandle)
SendMessage(HWndCalculator, WM_CLOSE, 0, 0);
xycleo 2001-05-06
  • 打赏
  • 举报
回复
HWnd HWndCalculator;
HWndCalculator = Winprocs->FindWindow(nil, "bcb"); // close the exist Calculator
if (HWndCalculator)
SendMessage(HWndCalculator, WM_CLOSE, 0, 0);
CTO 2001-05-06
  • 打赏
  • 举报
回复
这个怎么写?

void __fastcall TForm1::Button1Click(TObject *Sender)
{
杀死普通进程,比如:bcb.exe
}
//---------------------------------------------------------------------------
猛禽 2001-05-06
  • 打赏
  • 举报
回复
同意luhongjun(过江项羽)用ToolHelp32,不过只能用于Windows 9x,对NT/2000不能用
杀什么进程其实方法是一样的,前提是要取得ID,不过对有窗体的进程可以用PostMessage( HWND, WM_CLOSE, 0, 0 );
hello_wyq 2001-05-06
  • 打赏
  • 举报
回复
好可怜的进程啊,用完了就要被KILL了!
luhongjun 2001-05-06
  • 打赏
  • 举报
回复
要杀除一个进程,必须获得该进程的父线成ID(避免仅仅杀除子进程)。
只能这样,上面是获得所有进程的列表,BCB是一个窗体,你可以用关闭窗体的方式关闭他。

CTO 2001-05-06
  • 打赏
  • 举报
回复
简单的先来,这个怎么写?没那么复杂吧?

void __fastcall TForm1::Button1Click(TObject *Sender)
{
杀死普通进程,比如:bcb.exe
}
//---------------------------------------------------------------------------
luhongjun 2001-05-06
  • 打赏
  • 举报
回复


获得当前激活的进程:
1:包含头文件tlhelp32.h
2:.cpp如下:

ListView2->Items->Clear();
TListItem *mItem;
AnsiString ExeFile;
Pointer pt,pt2;
unsigned int s;
DWORD size,size2;
HANDLE snapshot;
PROCESSENTRY32 processinfo;
processinfo.dwSize = sizeof(processinfo);
snapshot =
CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if (snapshot==NULL) return;
bool flag = Process32First (snapshot,&processinfo);
while (flag){

mItem=ListView2->Items->Add();
ExeFile=AnsiString(processinfo.szExeFile);
mItem->Caption=ExeFile;
mItem->SubItems->Add(
IntToStr(int(processinfo.th32ParentProcessID)));

mItem->SubItems->Add(
IntToHex(int(processinfo.th32ProcessID),8).UpperCase());
size=GetFileVersionInfoSize(ExeFile.c_str(),&size2);
pt=malloc(size);
GetFileVersionInfo(ExeFile.c_str(),NULL,size,pt);
if(VerQueryValue(pt,
"\\StringFileInfo\\040904E4\\FileVersion",
&pt2,&s))
mItem->SubItems->Add(PChar(pt2));
if(VerQueryValue(pt,
"\\StringFileInfo\\040904E4\\CompanyName",
&pt2,&s))
mItem->SubItems->Add(PChar(pt2));
if(VerQueryValue(pt,
"\\StringFileInfo\\040904E4\\FileDescription",
&pt2,&s))
mItem->SubItems->Add(PChar(pt2));
free(pt);
flag = Process32Next(snapshot,&processinfo);
}

要杀除一个进程,必须获得该进程的父线成ID(避免仅仅杀除子进程)。

if (ListView2->SelCount==0){
MessageBox(Handle,"请首先选择一个进程!",
"中止进程",MB_OK¦MB_ICONWARNING);
return;
}
int pPid=StrToInt(ListView2->Selected->
SubItems->Strings[0]);
HANDLE ps = OpenProcess(1,false,pPid);
if(ps&&TerminateProcess(ps,-9)){
MessageBox(Handle,"成功中止进程!",
"中止进程",MB_OK¦MB_ICONINFORMATION);
}
else
MessageBox(Handle,"中止进程失败!",
"中止进程",MB_OK¦MB_ICONWARNING);




xycleo 2001-05-06
  • 打赏
  • 举报
回复
c++builder的例子里有一个!!!要不要考给你!!
关键是TerminateProcess();自己看看吧
sundayboys 2001-05-06
  • 打赏
  • 举报
回复
看以前的帖子,应该能搞定。
「已注销」 2001-05-06
  • 打赏
  • 举报
回复
普通进程你搜索一下贴子即可

服务进程是个难题

13,825

社区成员

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

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