::: 델파이 Tip&Trick :::

델파이 Tip&Trick 성격에 맞지 않는 광고,비방,질문의 글은 즉시 삭제하며
내용을 복사하여 사용할 경우 반드시 이곳(http://www.howto.pe.kr)을 출처로 명시하여 주세요


Category

  구창민(2003-03-14 12:27:37, Hit : 10611, Vote : 1362
 http://www.delphi.pe.kr
 '응답없음' 프로세서를 감지하는 잼나는 방법

[팁]'응답없음' 프로세서를 감지하는 잼나는 방법

안녕하세여~ 불멸의 화상 구창민입니다.

응답없음 프로세서를 감지하는 잼나는 방법이 있네여

항상 즐거운 프로그래밍 하시길~~

// 1. The Documented way

{
  An application can check if a window is responding to messages by
  sending the WM_NULL message with the SendMessageTimeout function.

  Um zu überprüfen, ob ein anderes Fenster (Anwendung) noch reagiert,
  kann man ihr mit der SendMessageTimeout() API eine WM_NULL Nachricht schicken.
}

function AppIsResponding(ClassName: string): Boolean;
const
  { Specifies the duration, in milliseconds, of the time-out period }
  TIMEOUT = 50;
var
  Res: DWORD;
  h: HWND;
begin
  h := FindWindow(PChar(ClassName), nil);
  if h <> 0 then
    Result := SendMessageTimeOut(H,
      WM_NULL,
      0,
      0,
      SMTO_NORMAL or SMTO_ABORTIFHUNG,
      TIMEOUT,
      Res) <> 0
  else
    ShowMessage(Format('%s not found!', [ClassName]));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if AppIsResponding('OpusApp') then
    { OpusApp is the Class Name of WINWORD }
    ShowMessage('App. responding');
end;

// 2. The Undocumented way

{
  // Translated form C to Delphi by Thomas Stutz
  // Original Code:
  // (c)1999 Ashot Oganesyan K, SmartLine, Inc
  // mailto:ashot@aha.ru, http://www.protect-me.com, http://www.codepile.com

The code doesn't use the Win32 API SendMessageTimout function to
determine if the target application is responding but calls
undocumented functions from the User32.dll.

--> For NT/2000/XP the IsHungAppWindow() API:

The function IsHungAppWindow retrieves the status (running or not responding)
of the specified application

IsHungAppWindow(Wnd: HWND): // handle to main app's window
BOOL;

--> For Windows 95/98/ME we call the IsHungThread() API

The function IsHungThread retrieves the status (running or not responding) of
the specified thread

IsHungThread(DWORD dwThreadId): // The thread's identifier of the main app's window
BOOL;

Unfortunately, Microsoft doesn't provide us with the exports symbols in the
User32.lib for these functions, so we should load them dynamically using the
GetModuleHandle and GetProcAddress functions:
}

// For Win9X/ME
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;

// For Win NT/2000/XP
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;

// Example: Check if Word is hung/responding

procedure TForm1.Button3Click(Sender: TObject);
var
  Res: DWORD;
  h: HWND;
begin
  // Find Winword by classname
  h := FindWindow(PChar('OpusApp'), nil);
  if h <> 0 then
  begin
    if IsAppRespondig(h) then
      ShowMessage('Word is responding!')
    else
      ShowMessage('Word is not responding!');
  end
  else
    ShowMessage('Word is not open!');
end;










731   [COM/OLE] 떠있는 모든 Microsoft Internet Explorer 의 html 불러오기  김영대 2003/03/30 6019 1470
730   [윈도우즈 API] IE의 "즐겨찾기 구성" 화면 띄우기  김영대 2003/03/30 6011 1931
729   [윈도우즈 API] 데스크탑의 현재 커서위치의 타이틀명과 클래스명 구하기  김영대 2003/03/29 4667 1169
728   [윈도우즈 API] 떠있는 모든 Microsoft Internet Explorer 죽이기  김영대 2003/03/29 4896 1369
727   [시스템] 윈도우즈 전체의 마우스/키보드 입력 금지  김영대 2003/03/29 5508 1382
726   [네트웍/인터넷] 인터넷에 접속되어 있는지 검사하기  김영대 2003/03/29 5489 1329
725   [일반/컴포넌트] TMemo 스크롤 다운 시키기  김영대 2003/03/29 4881 1401
724   [윈도우즈 API] 전체 화면(Full Screen) 만들기  김영대 2003/03/29 5293 1354
723   [윈도우즈 API] "시작"->"프로그램" 메뉴에 폴더 추가하기  김영대 2003/03/29 5072 1289
722   [윈도우즈 API] 폼이 Minimized 되었을때 깜박이게 하기  김영대 2003/03/29 6426 1684
721   [일반/컴포넌트] ListBox에서 마우스 이동시 아이템을 힌트로 보여주기  김영대 2003/03/27 4313 1145
720   [시스템] DOS 명령어 실행하고 결과 받아오기  김영대 2003/03/27 5429 1324
719   [윈도우즈 API] 액티브 데스크탑에 웹 컨텐트가 표시중인지 알기  김영대 2003/03/27 4460 1229
718   [윈도우즈 API] 작업표시줄의 시계 감추기/보이기  김영대 2003/03/27 7494 2027
717   [일반/컴포넌트] 커서(Cursor)의 이미지 구하기  김영대 2003/03/27 4746 1320
716   [윈도우즈 API] 스크린 세이버 On/Off  김영대 2003/03/27 4239 1067
715   [윈도우즈 API] 휴지통 비우기  김영대 2003/03/27 5467 1364
714   [일반/컴포넌트] IE Toolbar 에 버튼 올리기  김영대 2003/03/26 12582 1247
713   [일반/컴포넌트] 기본 Popup Memu 띄우지 않기  김영대 2003/03/26 3903 1036
712   [윈도우즈 API] "임시 인터넷 파일" 전부 지우기  김영대 2003/03/26 5440 1288
711   [일반/컴포넌트] 설치된 모든 프로그램 읽어오기  김영대 2003/03/26 5780 1505
710   [데이터베이스] DBGrid 의 현재 커서의 행/열 구하기  김영대 2003/03/26 5428 1303
709   [일반/컴포넌트] INF 파일 설치하기  김영대 2003/03/26 5358 1318
708   [데이터베이스] BDE Alias 없이 Database 동적으로 연결하기  신훈재 2003/03/24 12930 1176
707   [COM/OLE] Win2k, Win Xp - Active X - Dax error : Access violation해결(IE상에서)  신훈재 2003/03/20 7085 1261
706   [데이터베이스] ORA-12571: TNS:packet writer failure  김영대 2003/03/19 9831 1404
705   [데이터베이스] DBGrid 의 모든 Row 를 Select 시키기(SelectAll)  김영대 2003/03/18 4522 1067
704   [데이터베이스] index file의 갯수와 성능 문제  김영대 2003/03/17 5412 1401
703   [일반/컴포넌트] ListView에 확장자별 아이콘 넣기  신훈재 2003/03/15 7194 1198
702   [일반/컴포넌트] ScrollBox 에 배경그림 넣기  김영대 2003/03/14 4146 1116
  [시스템] '응답없음' 프로세서를 감지하는 잼나는 방법  구창민 2003/03/14 10611 1362
700   [윈도우즈 API] 입력을 기다리는 풀스크린 콘솔 윈도우 만들어 보기  구창민 2003/03/14 6695 1176
699   [일반/컴포넌트] 특정 레지스트리 키 의 모든 목록을 한방에! 읽어오기  구창민 2003/03/14 5240 986
698   [일반/컴포넌트] 트레이 아이콘에 풍선 힌트 보여주기  구창민 2003/03/14 7215 1372
697   [윈도우즈 API] 외부 프로그램의 상태표시줄의 Text 가져오기  구창민 2003/03/14 6217 1409
696   [시스템] IP Address 윈도우 폼위에 만들어보기  구창민 2003/03/14 5809 1298
695   [시스템] 특정 DLL 의 함수목록을 구해보자.  구창민 2003/03/14 5903 1236
694   [시스템] 쓰레드 내에서 폼을 생성해보자  구창민 2003/03/14 5980 1232
693   [윈도우즈 API] 외부 프로그램 모달 창처럼 띄워서 종료될때 기다리기(시점 알기)  구창민 2003/03/14 5817 1272
692   [일반/컴포넌트] 컴포넌트에 오픈다이얼로그를 띄우는 속성 만드는 방법  구창민 2003/03/14 4141 1042

[1][2][3][4][5][6] 7 [8][9][10]..[25] [다음 10개]
 

Copyright 1999-2024 Zeroboard / skin by zero