zoukankan      html  css  js  c++  java
  • 判断程序是否无响应

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

    这段代码将集成在应用程序的保护线程内,用于监视程序是否无响应。
  • 相关阅读:
    静态库,动态库
    vim
    消息队列-Rabbitmq处理消息及在Spring中的应用
    消息队列 -- 队列(Queue)和主题(Topic)
    Sing的签名算法
    Jquery
    VUE
    node
    vue 加载静态图片
    vue :style 动态绑定style
  • 原文地址:https://www.cnblogs.com/xieyunc/p/9126556.html
Copyright © 2011-2022 走看看