// ishung.cpp (Windows 95/98/NT/2000)
//// This example will show you how you can obtain the current status// of the application.// //// (c)1999 Ashot Oganesyan K, SmartLine, Inc// , ,#include <windows.h>
#include <stdio.h> // User32!IsHungAppWindow (NT specific!)//// The function retrieves the status (running or not responding) of the// specified application//// BOOL IsHungAppWindow(// HWND hWnd, // handle to main app's window// );typedef BOOL (WINAPI *PROCISHUNGAPPWINDOW)(HWND); // User32!IsHungThread (95/98 specific!)//// The function retrieves the status (running or not responding) of the// specified thread//// BOOL IsHungThread(// DWORD dwThreadId, // The identifier of the main app's window thread // );typedef BOOL (WINAPI *PROCISHUNGTHREAD)(DWORD); PROCISHUNGAPPWINDOW IsHungAppWindow;PROCISHUNGTHREAD IsHungThread; void main(int argc, char* argv[]){ if (argc<2) { printf("Usage:\n\nishung.exe hWnd\n"); return; }HWND hWnd;
sscanf(argv[1],"%lx",&hWnd);if (!IsWindow(hWnd))
{ printf("Incorrect window handle\n"); return; }HMODULE hUser32 = GetModuleHandle("user32");
if (!hUser32) return;IsHungAppWindow = (PROCISHUNGAPPWINDOW)
GetProcAddress( hUser32, "IsHungAppWindow" );IsHungThread = (PROCISHUNGTHREAD) GetProcAddress( hUser32,
"IsHungThread" );if (!IsHungAppWindow && !IsHungThread)
return;OSVERSIONINFO osver;
osver.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); if (!GetVersionEx(&osver)) return;BOOL IsHung;
if (osver.dwPlatformId&VER_PLATFORM_WIN32_NT)
IsHung = IsHungAppWindow(hWnd); else IsHung = IsHungThread(GetWindowThreadProcessId(hWnd,NULL));if (IsHung)
printf("Not Responding\n"); else printf("Running\n");}