• 判断程序是否无响应


    转自《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;

    这段代码将集成在应用程序的保护线程内,用于监视程序是否无响应。
  • 相关阅读:
    深入理解Java内存模型(四)——volatile
    深入理解Java内存模型(三)——顺序一致性
    深入理解Java内存模型(二)——重排序
    深入理解Java内存模型(一)——基础
    HashMap完全解读
    HTTP访问控制(CORS)
    理解RESTful架构
    转: Java LinkedList基本用法
    JAVA_POI 操作Excel
    maven 详解二
  • 原文地址:https://www.cnblogs.com/xieyunc/p/9126556.html
Copyright © 2020-2023  润新知