您的位置:首页 > 其它

获取其他进程的状态

2013-06-25 21:14 169 查看
使用IsHungAppWindow函数可以实现。

以下代码调用了User32.dll中一个未公开的函数,所以要获取函数的地址,这个函数存在于Win 9x和Win NT/2000两个操作系统之中,但名字却不一样。在Win 9x为IsHungThread;在Win NT/2000中为IsHungAppWindow。

-----------------------------------------

#include <windows.h>

#include <stdio.h>

typedef BOOL(WINAPI *PROCISHUNGAPPWINDOW)(HWND);

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("没有找到窗口句柄\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("没有响应\n");

else

printf("正在运行\n");

}

---------------------------------------------------

获取进程的状态.exe 000D10EA

后面的参数是窗口的句柄,可以使用Spy++获取。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: