작업관리자가 응답없음을 판별하는 방법

개발 2007. 8. 17. 14:53

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

예전에 어디에서가 비슷한 내용을 본적이 있다. 그때 본 내용은 WM_GETICON 이라는 메시지를 보내서 바로 응답이 오면 프로그램이 작동중이고, 응답이 않오면 프로그램이 멈춘상태(응답없음)라는 것이다. 당연히 메시지를 보냈는데, 응답이 않오면 작업관리에서 보이는 것처럼 응답없음 상태로 보는 것이다.

  그런에 이와 유사한 기능을 하는 api가 있었다. 바로 IsHungAppWindow 라는 함수이다. 그래서 테트스겸 사용을 해볼려고 하니까 아래처럼 링크에러가 발생한다.

WindowsAPIDlg.obj : error LNK2019: __imp__IsHungAppWindow 외부 기호("protected: virtual int __thiscall CWindowsAPIDlg::OnInitDialog(void)" (?OnInitDialog@CWindowsAPIDlg@@MAEHXZ) 함수에서 참조)를 확인하지 못했습니다.
Debug/WindowsAPI.exe : fatal error LNK1120: 1개의 확인할 수 없는 외부 참조입니다.

이럴수가!!  분명히 msdn에서 말하기 아래처럼 정보가 있었는데..

Minimum DLL Version user32.dll
Header Declared in Winuser.h, include Windows.h
Import library User32.lib
Minimum operating systems Windows 2000

허허 참 이상하다..  그래서 검색을 조금 해보니까.. user32.dll을 직접 로딩해서 사용해라는 것이다. 허허.. msdn 이거 않되겠구만~ 엉터리 정보를 가지고 있다니..
그래서 할 수 없이 아래처럼 직접 로딩해서 사용하면 된다.

typedef BOOL (WINAPI *PROC_IsHangAppWindow)(HWND);
PROC_IsHangAppWindow IsHangAppWindow;
HMODULE hUser32 = GetModuleHandle("user32");
IsHangAppWindow = (PROC_IsHangAppWindow) GetProcAddress(hUser32, "IsHungAppWindow");

BOOL b = IsHangAppWindow(hWnd);

확인결과 잘 작동한다. 리턴값은 응답없음이면 TRUE 를 리턴한다. 
단점은 윈도우2000 이상에서만 된다는..



: