如何在delphi中查找Windows系统中没有响应的进程及杀死这些没有响应的进程?
解决方案 »
- Form.Caption 问题
- mxOutLookBarPro 控件使用问题
- 如何自己写程序把word文挡转换成pdf文挡
- 如果一个交窗体,其它是子窗体,那闪屏和登陆窗体该怎么弄呢
- 图中的ListView是如何实现的?
- (都用了好几百分了,难道真的没人解决),用TIdSMTP连接smtp.163.com发邮件时提示:System busy;
- 这么简单的存储过程为什么,语法检查有错误。新手请教。马上给分。在线等待!
- Delphi6 企业版的安装序列号是多少??? 快,马上结帐!
- 如何实现qq那种效果
- 求助!这个错误什么意思?怎么处理?
- 怎样让一个可执行文件有多个可用的图标
- 编译提示'Undeclared identifier: 'locaseinsensitive',为何
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, ExtCtrls, StdCtrls, tlhelp32;type
TForm1 = class(TForm)
Button1: TButton;
ListView1: TListView;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);
var
Han: THandle;
Process: PROCESSENTRY32;
ok: boolean;
Rec: TListItem;
i: integer;
begin
ListView1.Items.Clear;
i := 0;
Han := CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
Process.dwSize := SizeOf(Process);
ok := Process32First(Han, Process);
while ok do
begin
Rec := ListView1.Items.Add;
Rec.Caption := Process.szExeFile;
Rec.SubItems.Add(IntToStr(Process.th32ProcessID));
i := i + 1;
ok := Process32Next(Han, Process);
end;end;procedure TForm1.Button2Click(Sender: TObject);
var
Han: THandle;
ProcessID: int64;
ExitCode: DWORD;
i: integer;
begin
for i := 0 to ListView1.Items.Count - 1 do
if listview1.Items[i].Selected then
begin
ProcessID := StrToInt64(ListView1.Selected.SubItems.Strings[0]);
Han := OpenProcess(PROCESS_TERMINATE, true, ProcessID);
GetExitCodeProcess(Han, ExitCode);
TerminateProcess(Han, ExitCode);
end;
Sleep(100);
Button1.Click;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
Button1Click(sender);
end;end.
const
PROCESS_TERMINATE = $0001;
var
ProcessHandle : THandle;
ProcessID: Integer;
TheWindow : HWND;
begin
TheWindow := FindWindow(Classname, WindowTitle);
GetWindowThreadProcessID(TheWindow, @ProcessID);
ProcessHandle := OpenProcess(PROCESS_TERMINATE, FALSE, ProcessId);
TerminateProcess(ProcessHandle,4);
end;
var
lppe: TProcessEntry32;
found : boolean;
Hand : THandle;
begin
Hand := CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
found := Process32First(Hand,lppe);
while found do
begin
if UpperCase(StrPas(lppe.szExeFile)) = UpperCase(AExeName) then
begin
TerminateProcess(OpenProcess(PROCESS_TERMINATE, true,
lppe.th32ProcessID), 0);
Exit;
end
else
found := Process32Next(Hand,lppe);
end;
end;AExeName为要中止的进程的名字
BOOL IsHungAppWindow (
HWND hWnd, // handle to main app's window
);BOOL IsHungThread (
DWORD dwThreadId, // The thread's identifier of the main app's window
);有了原型,连解释都不需要,好得不的了.:)不过调用时需要GetProcAddress.库里没有该函数.