如何获知一个程序是否已经失去响应>(100分)

  • 主题发起人 主题发起人 RoninHao
  • 开始时间 开始时间
R

RoninHao

Unregistered / Unconfirmed
GUEST, unregistred user!
想写一个监视的工具,当被监视的程序失去响应的时候就把它的进程杀掉重启一个.请问如何获取该进程的状态是否已经失去响应了
 
不能获得进程是否响应,只能获得进程窗体是否响应
 
请问怎么获取呢?
 
var
hExeHandle: HWND;
Res: DWORD;
lResponding:Boolean;
begin
hExeHandle := FindWindow(nil, 'HL9000_Monitor_Update');

if hExeHandle<>0 then
begin
if SendMessageTimeout(hExeHandle, WM_NULL, 0, 0, SMTO_NORMAL, 100, Res) <> 0 then // 程序未死, 参数100表示等100ms
lResponding:=True;
end;
 
//判断窗口是否响应for NT++
function IsAppRespondingNT(wnd: HWND): Boolean;
type
TIsHungAppWindow = function(wnd:hWnd): BOOL; stdcall;
var
hUser32: THandle;
IsHungAppWindow: TIsHungAppWindow;
begin
Result := True;
hUser32 := GetModuleHandle('user32.dll');
if (hUser32 > 0) then
begin
@IsHungAppWindow := GetProcAddress(hUser32, 'IsHungAppWindow');
if Assigned(IsHungAppWindow) then
begin
Result := not IsHungAppWindow(wnd);
end;
end;
end;
 
好东西。
 
也不给我分[:(]
 
谢谢楼上拉,马上就给分
 
多人接受答案了。
 

Similar threads

后退
顶部