怎么实现一个:判断指定进程有无响应的功能函数. (转)

/* 怎么实现一个:判断指定进程有无响应的功能函数.

已知条件为:一个进程ID,求这个进程有无响应;用VC平台实现.

我在网络查找一些资料,copy后得出以下一个程序,但不能检测出结果,运行时会出错.

接触C++不是很长时间,希望大家能帮帮我,解决这个问题,谢谢.

如果还有其它方法,请给予提示.谢谢.  */

///////////////////////////////////////////////////////////////////////////////

#include <windows.h>

#include <stdio.h>

DWORD   dwResult;

BOOL   fResponding   =   SendMessageTimeout(hwndInQuestion,

WM_NULL,   0,   0,   SMTO_ABORTIFHUNG,   5000,   &dwResult);

//   fResponding   is   TRUE   if   the   thread   is   responding   and

//   FALSE   if   not.

typedef  struct  tagWNDINFO

{

DWORD  dwProcessId;

HWND  hWnd;

}  WNDINFO,  *LPWNDINFO;

BOOL CALLBACK YourEnumProc(HWND hWnd,LPARAM  lParam)

{

DWORD  dwProcessId;

GetWindowThreadProcessId(hWnd,  &dwProcessId);

LPWNDINFO  pInfo  =  (LPWNDINFO)lParam;

if(dwProcessId  ==  pInfo->dwProcessId)

{

pInfo->hWnd  =  hWnd;

return  FALSE;

}

return  TRUE;

}

HWND  GetProcessMainWnd(DWORD  dwProcessId)

{

WNDINFO  wi;

wi.dwProcessId  =  dwProcessId;

wi.hWnd  =  NULL;

EnumWindows(YourEnumProc,(LPARAM)&wi);

return  wi.hWnd;

}

//如果这个进程没有窗口,函数返回NULL

/** /*/

//////////////////////////////////////////////////////////////////////////

int GetProcessAnswer(DWORD iProcessid)

{

HWND hwnd = GetProcessMainWnd(iProcessid);

//不存在/

if(NULL == hwnd)return(-1);

typedef BOOL (WINAPI *PROCISHUNGAPPWINDOW)(HWND);

typedef BOOL (WINAPI *PROCISHUNGTHREAD)(DWORD);

//然后定义

PROCISHUNGAPPWINDOW    m_pIsHungAppWindow;

PROCISHUNGTHREAD    m_pIsHungThread;

//定义一个bool型,来判断当前操作系统是否是Windows NT/2000以上

// 因为不同的操作系统,判断程序是否运行正常的方式是不一样的

BOOL m_bIsNT;

BOOL bRetVal;

//获取版本信息

OSVERSIONINFO osver = {0};

osver.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);

if (!GetVersionEx(&osver))

{

bRetVal = FALSE;

}

if(bRetVal == TRUE)

{

if (osver.dwPlatformId&VER_PLATFORM_WIN32_NT)

{

m_bIsNT = TRUE;

}

else

{

m_bIsNT = FALSE;

}

}

//获取那两个函数指针

HMODULE hUser32 = ::GetModuleHandle("user32");

if (!hUser32)

{

bRetVal = FALSE;

}

if(bRetVal == TRUE)

{

m_pIsHungAppWindow = (PROCISHUNGAPPWINDOW)

GetProcAddress( hUser32,

"IsHungAppWindow" );

m_pIsHungThread = (PROCISHUNGTHREAD) GetProcAddress( hUser32,

"IsHungThread" );

if (!m_pIsHungAppWindow && !m_pIsHungThread)

{

bRetVal = FALSE;

}

}

//于是判断,窗口是否是正常运行,还是未响应

// 代码如下

if(m_bIsNT == TRUE)

{

BOOL bIsHung = m_pIsHungAppWindow(hwnd);

if(bIsHung)

{

return(-2);//没有响应

}

else

{

return(0);//正在运行

}

}

else

{

BOOL bIsHung =m_pIsHungThread(GetWindowThreadProcessId(hwnd,NULL));

if(bIsHung)

{

return(-2);//没有响应

}

else

{

return(0);//正在运行

}

}

}

//////////////////////////////////////////////////////////////////////////

int main()

{

// int iSum = int(GetProcessMainWnd(3616));//3616是进程ID

// printf("%d",isum);

int isum = GetProcessAnswer(3616/*这里输入进程ID*/);

printf("%d",isum);

return(0);

}

时间: 2024-10-19 09:00:49

怎么实现一个:判断指定进程有无响应的功能函数. (转)的相关文章

判断指定进程是否为x64的方法(在ntdll判断某个x64函数是否存在)

[cpp] view plain copy BOOL IsWow64ProcessEx(HANDLE hProcess) { // 如果系统是x86的,那么进程就不可能有x64 bool isX86 = false; #ifndef _WIN64 isX86 = GetProcAddress(GetModuleHandle(TEXT("ntdll")), "NtWow64DebuggerCall") == nullptr ? TRUE : FALSE; #endif

复制 注册 删除文件 判断指定位置有无文件

If Dir("C:\WINDOWS\system32\MSDATGRD.OCX", vbDirectory) = "" Then ' Label1.Caption = "无" Else: Label1.Caption = "有" End If FileCopy App.Path & "\MSDATGRD.OCX", "C:\WINDOWS\system32\MSDATGRD.OCX&qu

创建一个判断一个数是否为素数的函数

2019-11-29-dotnet-通过-WMI-获取指定进程的输入命令行

原文:2019-11-29-dotnet-通过-WMI-获取指定进程的输入命令行 title author date CreateTime categories dotnet 通过 WMI 获取指定进程的输入命令行 lindexi 2019-11-29 08:35:39 +0800 2019-02-22 10:17:37 +0800 dotnet C# WMI 本文告诉大家如何使用 WMI 通过 Process 获取这个进程传入的命令行 使用下面代码,使用 Win32_Process 拿到所有的

zabbix使用自己编写脚本模板和zabbix自带模板两种方法添加对指定进程和端口的监控

zabbix使用自己编写脚本模板和zabbix自带模板两种方法添加对指定进程和端口的监控 1.自带监控模板进行os的监控 进入/usr/local/zabbix/etc/zabbix_agentd.conf 配置文件修改 LogRemoteCommands=1     ###开启脚本功能 Server=192.168.5.129     ##修改zabbix指向的服务器: 重启zabbix_agentd.zabbix_server服务 在配置-->主机-->添加主机--> 配置主机信息主

只开启一个窗体和进程以及多线程的操作

只开启一个窗体: 1 Form1 F1 = null; 2 public Form2(Form1 f1) 3 { 4 InitializeComponent(); 5 F1 = f1; 6 } 7 8 private void Form2_FormClosed(object sender, FormClosedEventArgs e) 9 { 10 F1.Close(); 11 } 12 13 List<Form> list = new List<Form>();//建立一个可以存

java 加入一个线程、创建有响应的用户界面 。 示例代码

javajava 加入一个线程.创建有响应的用户界面 . 示例代码 来自thinking in java 4 21章  部分代码  目录21.2.11 thinking in java 4免费下载:http://download.csdn.net/detail/liangrui1988/7580155 package org.rui.thread.concurrent; /** * 加入一个线程 * 一个线程可以在其他线程之上调用join()方法,其效果是等待一段时间直到第二个线程结束才继续执行

delphi 如何判断应用程序未响应

http://www.cnblogs.com/smallmuda/archive/2009/07/24/1529845.html delphi 如何判断应用程序未响应 今天在MSN的核心讨论组上看到两篇文章.讨论的乃是应用程序是否没有响应.原文如下:           >   How   is   it   possible   to   determine   a   process   is   "not   responding"   like   NT   Task  

pyqt 简单判断指定的内容强度(比如帐号)

# -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' from PyQt4.QtGui import * from PyQt4.Qt import * from PyQt4.QtCore import * from pw import Ui_Form #正则表达式检测密码格式 import sys #时间关系,我只对一个地方帐号进行操作,其他类似 QTextCodec.setCodecForTr(QTextCodec.