Delphi判断程序是否无响应

减小字体 增大字体 作者:佚名  来源:转载  发布时间:2011-02-18 12:50:14

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;

Tags:

作者:佚名
  • 好的评价 如果您觉得此文章好,就请您
      0%(0)
  • 差的评价 如果您觉得此文章差,就请您
      0%(0)

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论

广告位置B