判断程序是否无响应

转自《Delphi超级猛料》

   function    IsAppRespondig9X(dwThreadId:    DWORD):    Boolean;
   type     
       TIsHungThread    =    function(dwThreadId:    DWORD):    BOOL;    stdcall;     
   var     
       hUser32:    THandle;     
       IsHungThread:    TIsHungThread;     
   begin     
       Result    :=    True;     
       hUser32    :=    GetModuleHandle('user32.dll');     
       if    (hUser32    >    0)    then     
       begin     
           @IsHungThread    :=    GetProcAddress(hUser32,    'IsHungThread');     
           if    Assigned(IsHungThread)    then     
           begin     
               Result    :=    not    IsHungThread(dwThreadId);     
           end;     
       end;     
   end;     
  
   function    IsAppRespondigNT(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;     
    
   function    IsAppRespondig(Wnd:    HWND):    Boolean;     
   begin     
     if    not    IsWindow(Wnd)    then     
     begin     
         ShowMessage('Incorrect    window    handle!');     
         Exit;     
     end;     
     if    Win32Platform    =    VER_PLATFORM_WIN32_NT    then     
         Result    :=    IsAppRespondigNT(wnd)     
     else     
         Result    :=    IsAppRespondig9X(GetWindowThreadProcessId(Wnd,nil));     
   end;     
    
   procedure    TForm1.Button1Click(Sender:    TObject);     
   var     
       Res:    DWORD;     
       h:    HWND;     
   begin     
       h    :=    FindWindow(nil,   'notepad');     
       if    h    >    0    then     
       begin     
           if    IsAppRespondig(h)    then     
               ShowMessage('notepad 有响应')     
           else     
               ShowMessage('notepad 无响应');     
       end     
       else     
           ShowMessage('未打开 notepad');     
   end;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值