Delphi中强制结束一个进程
来源:互联网 发布:淘宝卖家账号怎么注册 编辑:程序博客网 时间:2024/05/16 01:32
强制结束一个进程的 API 为 TerminateProcess
BOOL TerminateProcess(
HANDLE hProcess, // 进程句柄
UINT uExitCode // 退出代码
);
你可以使用语句 invoke TerminateProcess,structProcInfo.hProcess,0 来结束进程,要注意的是如果可能的话,尽量不要在程序中强制结束别的进程,因为使用 TerminateProcess 结束的进程,它装载的 dll 不能被正确卸载。这样可能会引起系统资源的无效占用。最好的办法在进程中自己使用 ExitProcess 退出。
Delphi中强制结束一个进程
AFileName指定xxx.exe就行了,如Excel.exe
先Uses TLHelp32;
procedure EndProcess(AFileName: string);
const
PROCESS_TERMINATE=$0001;
var
ExeFileName: String;
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
ExeFileName := AFileName;
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle,FProcessEntry32);
while integer(ContinueLoop) <> 0 do
begin
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
UpperCase(ExeFileName))
or (UpperCase(FProcessEntry32.szExeFile) =
UpperCase(ExeFileName))) then
TerminateProcess(OpenProcess(PROCESS_TERMINATE, BOOL(0),
FProcessEntry32.th32ProcessID), 0);
ContinueLoop := Process32Next(FSnapshotHandle,FProcessEntry32);
end;
end;
------------------------------------------------------------------------------------
在NT下:进程是由内核统一管理的,用户态的程序是不能处理的,在核心有进程的执行体进程块EPROCESS,EPROCESS结构包含有一个异常本地过程调用端口(LPC),LPC是当进程中的一个线程引起异常时,进程管理器发送信息的内部进程通信通道。如果可以访问这个结构的话,就可以将LPC指向我们自己的入口,但遗憾的是EPROCESS在用户态下是无法访问的,所以无法实现。线程的情况和这类似,也有执行体线程块ETHREAD。
给你一个最简单的方法:
另外写一个程序来监测你的程序操作。
假设你的程序为abc.exe,
监测程序为watch.exe
监测程序完成这样一个功能:
1. 每隔一段时间检测一下系统的所有窗口进程(例如10秒)
利用EnumWindows()得到的窗口句柄。判断是否为错误报警的窗口发生。
错误报警的窗口的标题一般都有:"某某程序执行了非法操作"的字样,很好判断。
2. 一旦确定下来,就可将其从容关闭再重新启动。
这个方法我试过。我曾写过一个专业作弊软件,让其自动运行。当IE
出错时就将其关闭,然后重启IE。
你可以去我的主页这个栏目看一下:
http://www.ChinaITHero.com/th_money.htm 第5节:自动关闭错误窗口
=============================================================================
最简单的办法是:
在需要被监视的程序中添加一个发送机制,比如每1分钟向守护进程发送一个自定义消息.
守护进程则进行判断,如果1分钟以上还未收到该消息,则关闭该进程
=============================================================================
我想做一个监控某个进程是否正常运行的程序,用
CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
和PROCESSENTRY32结构
取得了这个进程,但就是不知道怎么判断它的状态,请高手赐教!
定义发送消息,枚举窗口等
Win 9x为IsHungThread
在Win NT/2000中为IsHungAppWindow。
调用User32.dll中一个未公开的函数来实现的。这个函数存在于Windows 9x和Windows NT/2000系统中,但在两个系统中的名字是不同的。Windows 9x系统中的名字为:IsHungThread,在Windows NT/2000系统中的名字为IsHungAppWindow。下面是它们的原型:
BOOL IsHungAppWindow (
HWND hWnd, // 主应用窗口句柄
);
和
BOOL IsHungThread (
DWORD dwThreadId, // 主应用窗口的线程ID
);
- Delphi中强制结束一个进程
- Delphi中强制结束一个进程
- Delphi中强制结束一个进程
- Delphi中强制结束一个进程
- 强制结束一个进程
- delphi中结束进程
- 转:delphi中结束进程
- Linux中强制结束一个进程的终极方法和其他常用命令
- 强制结束系统进程
- Linux强制结束进程
- 强制结束Android进程
- c++强制结束进程
- C#中获取进程,C#强制结束进程
- delphi 程序强制结束自身
- 强制结束一个线程
- 浅谈驱动中强制结束进程的3种方法
- delphi 结束进程
- Delphi结束进程模块
- 异步消息的传递-回调机制
- 黑马程序员--.Net学习日记——C#中的类型转换
- android 移动开发设计原则
- mit 计算机科学及编程导论(9)
- java 获取路径
- Delphi中强制结束一个进程
- 关于windows server与SQL server用户数的解释 (转)
- Delphi调用其他应用程序
- 抓取网址中的信息(需要解码的)
- Delphi中提示“尚未调用CoInitialize错误”的解决方法
- Scala学习笔记(二) - 环境配置
- c#正则表达式过滤特殊字符
- invalid use of incomplete struct "Ui::Widget" 解决方法
- 关于jqgrid下treeGrid的插件配置