最近参加的一个项目要求实现远程任务管理功能,也就是"Remote Task Manager"(RTM)。我把它与Windows NT的任务管理器进行了比较,发现标准的任务管理器显示应用程序的状态(正在运行或者没有响应)。标准的任务管理器发送(通过SendMessageTimeout函数)一个消息到主应用窗口,如果函数调用失败或者超时--则应用程序的状态就是"没有响应",否则状态为"正在运行"。
但我发现还有一个更好的解决方法。本文将通过实例程序进行示范。这个方法的思路是通过调用User32.dll中一个未公开的函数来实现的。这个函数存在于Windows 9x和Windows NT/2000系统中,但在两个系统中的名字是不同的。Windows 9x系统中的名字为:IsHungThread,在Windows NT/2000系统中的名字为IsHungAppWindow。下面是它们的原型:
BOOL IsHungAppWindow (
HWND hWnd, // 主应用窗口句柄
);
和
BOOL IsHungThread (
DWORD dwThreadId, // 主应用窗口的线程ID
);
不幸的是,微软在User32.lib中没有提供这两个函数的输出。也就是说,这两个函数是未公开函数,如果要在程序中使用它们,则必须通过GetProcAddress和GetModuleHandle函数动态加载:
typedef BOOL (WINAPI *PROCISHUNGAPPWINDOW) (HWND);
typedef BOOL (WINAPI *PROCISHUNGTHREAD) (DWORD);
PROCISHUNGAPPWINDOW IsHungAppWindow;
PROCISHUNGTHREAD IsHungThread;
HMODULE hUser32 = GetModuleHandle("user32");
IsHungAppWindow = (PROCISHUNGAPPWINDOW)
GetProcAddress(hUser32,"IsHungAppWindow");
IsHungThread = (PROCISHUNGTHREAD)
GetProcAddress(hUser32,"IsHungThread");
//////////////////
// 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
// mailto:ashot@aha.ru, http://www.protect-me.com, http://www.codepile.com
#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);
HWND hWnd = ::FindWindow(NULL, "CLENT");
if (hWnd == NULL)
{
printf("Incorrect window handle(handle is NULL)/n");
return;
}
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");
}
相关推荐
如何强制关掉系统或应用程序?这里提供详细方法
如何强制关掉系统或应用程序?这里提供详细方法。
IsHungAppWindow 判断窗体某程序是否挂起
* IsHungAppWindow*判断窗体某程序是否挂起BOOL IsHungAppWindow( HWND hwnd)*参数hwnd为欲判断窗体句柄*返回 True表示挂起 Flase表示未挂起{ return (NtUserQueryWindow(hwnd, WindowIsHung) != NULL);}
Android息屏后台任务保活实战:从定时器失效到厂商白名单破解
本文深入探讨了Android应用在息屏后定时任务失效的根源,即系统为省电而触发的休眠机制。文章提供了从传统方案失效分析到实战破解的完整路径,核心在于引导用户将应用加入电池优化白名单并开启自启动权限,从而合法绕过限制。同时,结合WorkManager、AlarmManager等可靠定时方案,实现稳定的后台任务执行。
获取其他进程的状态
使用IsHungAppWindow函数可以实现。 以下代码调用了User32.dll中一个未公开的函数,所以要获取函数的地址,这个函数存在于Win 9x和Win NT/2000两个操作系统之中,但名字却不一样。在Win 9x为IsHungThread;在Win NT/2000中为IsHungAppWindow。 --------------------------------------
保姆级教程:用CST 2023一步步复现一个1-8GHz Vivaldi天线(含参数优化与结果分析)
本文提供了一份详细的CST 2023教程,指导读者如何从零开始设计并优化1-8GHz Vivaldi天线。内容涵盖工程设置、参数化建模、仿真加速技巧以及性能优化策略,特别适合需要实现宽带天线设计的工程师和研究人员。通过实战案例,帮助用户掌握Vivaldi天线的核心设计要点和CST高级功能应用。
MapGIS地质剖面图绘制实战:从数据准备到整饰出图
本文详细解析了MapGIS地质剖面图绘制的全流程,从数据准备到整饰出图,涵盖了等高线处理、GRD格网化、比例尺控制等关键步骤。通过实战技巧和案例分析,帮助地质工作者高效完成专业地质剖面图绘制,提升矿产勘探和工程勘察的工作效率。
判断程序假死 挂起的方法
查了些资料,正在整理中。现在记录一下: 方法一: 判断程序的线程是否Responding。 方法二:API方法 IsHungAppWindow #region 窗体是否挂起 [DllImport("User32.dll", CharSet = CharSet.Auto)] public static extern bool IsHungAppWin
android广告SDK原理详解(附源码)
广大的开发者吃糠咽菜开发了一两款APP,获取了一些流量后自然就会想到流量变现,一般情况下大家会选择到百度联盟或者Google Admob这些广告服务提供商注册开发者账号,在自己的APP里面加上几行广告位代码,集成他们的广告SDK包。然后谋事在人,成事在天,只有每天看报表查查收益。 也有一些开发者为了能够提高自己的变现水平,同时接入了好几家的sdk,哪家出的收益高一点我就出哪家的广告,但是这
[Windows编程] 如何判断一个窗口已经停止响应
使用API函数IsHungAppWindow,可以判断窗口是否已经停止响应。于是可以利用其他线程把这个窗口关闭,避免产生不良的用户体验。 BOOL IsHungAppWindow( HWND hWnd); MSDN文档: http://msdn.microsoft.com/en-us/library/ms633526.aspx 该函数从Win2000 版本
冒泡排序的并行计算
本人也是并行计算的小白,在这里记录下自己的学习笔记。 今天做了一下冒泡排序的并行计算比较: 串行冒泡排序如下: #include <stdio.h> #include <stdlib.h> #include <windows.h> void BubbleSort(int * pData, int nSize) { if (!pData) { ...
Mamba SSM 实战:IMDb 文本分类 + Mamba-ssm 全流程
Mamba SSM 文本分类链路:IMDb 二分类 → MambaLMHeadModel (d_model=256, n_layer=8, d_state=16, exp2=2) → 末 token 分类头。5 epoch 达 89.2% 准确率 (与 BERT-base 持平), 但显存降低 44% (3.5GB vs 6.2GB)。建议序列长度 ≥ 1024 再选 Mamba, 短序列 (< 512) 用 BERT 更高效。扩展时注意d_state。
windows启动管理器_“任务管理器”不为人知的功能,创造者在25年后亲自解密
全世界最知名的组合键是什么?究竟是 Ctrl-C 还是 Ctrl-V?或许答案应该是呼出 Windows 任务管理器的「Ctrl-Alt-Delete」。在 TaskMgr.exe 诞生了 25 年之后,它的「创造者」David Plummer,为我们带来了一连串不为人知的操作。在 1993 年,软件工程师 David Plummer 加入了微软,虽然当时他还只是个新手而已,但 Windows N...
连续相位调制通信调制方法的载波同步和定时同步研究及MATLAB仿真
本文将探讨CPM调制方法中的载波同步和定时同步问题,并提供MATLAB仿真源代码。本文讨论了连续相位调制通信中的载波同步和定时同步问题,并提供了相应的MATLAB仿真源代码。通过适当的载波同步和定时同步方法,可以实现对CPM信号的准确解调。希望本文对您理解连续相位调制通信调制方法的载波同步和定时同步问题有所帮助,同时也为您提供了一些MATLAB仿真实现的思路和示例代码。在CPM系统中,载波同步的主要任务是估计接收信号的载波频率偏移和相位偏移。在CPM系统中,常用的定时同步方法是基于自相关函数的峰值检测。
任务服务器未响应,win10任务管理器没有响应的解决方法
大家都知道,程序或者任务未响应了,可以通过开打任务管理器来进行处理,但是如果你的任务管理器也未响应了。怎么办?如何解决这个问题呢?下面小编就向大家简单的介绍一下任务管理器未响应解决办法。win10任务管理器未响应的解决办法:1、使用快捷键Ctrl+Alt+Del,直接打开“任务管理器”,切换到“进程”选项卡,选中“Windows资源管理器”项,点击“重新启动”,待“Windows资源管理器”重启完...
OpenClaw 在 Docker 容器中的部署实战——零配置启动
本文介绍了OpenClaw在Docker容器中的快速部署方法,对比了本地部署与容器化部署的优势。通过官方镜像和Docker Compose两种方式,5分钟即可完成部署,并详细讲解了配置管理方案(挂载配置文件和环境变量)。文章还提供了飞书集成配置方法,以及生产环境下的日志管理、资源限制、健康检查等优化建议。最后包含常见问题排查指南,帮助开发者快速实现OpenClaw的容器化部署。
汉书HE8,好用的汇编代码编写工具
汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大
windows应用程序无响应问题解决
Windows应用程序无响应(ANR)是用户常见问题,表现为界面冻结、高CPU占用或功能异常。本文分析了ANR的三大成因:程序自身问题(死循环、内存泄漏等)、系统资源不足(CPU、内存、磁盘I/O瓶颈)以及Windows系统问题(消息循环阻塞、组件冲突)。提供了从基础到高级的解决方案:快速使用任务管理器结束进程、PowerShell管理、保存工作数据;高级诊断包括分析进程等待链、检查资源使用、兼容性设置、重装程序、清理缓存及更新驱动等。适用于Windows 10/11系统,帮助用户快速恢复工作状态并预防数据
SAP B1中文培訓教材_SDK
公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说
微软 Windows 11 全新现代任务管理器
导读 虽然这么多的原生应用程序和服务在 Windows 11 甚至 Windows 10 中都得到了改造,但任务管理器的现代外观早就应该出现了。通过 Windows 11 Build 22543,微软悄悄地对任务管理器做了一个重大的改变 —— 它仍然是 Windows 11 上最有用的工具。 微软正在为 Windows 11 试验重新设计的任务管理器,并在预览版中被发现。这个新的外观只对微软内部开放,但通过修改系统文件可以尝试半生不熟的新任务管理器。 正如你在截图中所看到的,任务管理器的刷新
迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)
迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)
大中型超市收银系统(可直接运行)
光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开
永久解决Windows11开机无任务栏卡死没有响应
解决了Windows 11安装之后第一次进入桌面完全正常,重启之后发现任务栏没有出现,鼠标点击桌面上的图标也没有任何反应的现象
net start mongodb 提示服务没有响应控制功能
mongodb开启自启动服务net start mongodb 提示服务没有响应控制功能 问题描述:安装好mongodb后,net start mongodb 提示服务没有响应控制功能,想要开启服务,每次都要在命令行窗口手动到安装目录输入命令 mongod --dbpath 安装目录/data/db ;操作繁琐不便 报错原因:net start mongodb 提示服务没有响应控制功能;是因为服务可执行文件路径错误 解决办法:为mongodb在windows下注册服务,设置自启动服务 修改服务可..
计算机的任务管理器作用,电脑技术:如何妙用任务管理器
电脑技术:如何妙用任务管理器任务管理器也是我们常用的系统工具之一,当然,我们最常使用的功能是结束进程,除此之外,你知道它还有很多其它的应用和技巧吗?下面说几个小技巧,看看按下(ctrl+Alt+del)之后还能做什么呢?(如果你的电脑是局域网设置向导,把你的电脑设成了在某个工作组里面了,这样的话就可以直接按Ctrl+Shift+Esc 三个键就可以直接出来你要的那个了)1.快速关机快速关机就如快速...
net start MongoDB —拒绝访问 发生系统错误5/ 服务没有响应控制功能 / –sslDisabledProtocols ‘none
一.net start MongoDB ——拒绝访问 这个坑是比较简单的,之前有很多大佬在csdn上陆续发过如何解决的帖子,我就一笔带过这个方面把 首先这个问题是因为权限不够,解决方式只需要提高权限,进入管理员权限就可以。 二.net start MongoDB 服务器没有响应控制功能 首先这个问题的原因大部分因素,是路径出了问题. 我先带大家看一看如何观察路径出错的地方 我们打开任务管理器----服务 紧接点击右键------打开服务,你会看见下面这个,找到图下中的MongoDB Server
Windows Task Manager:完整指南
The Windows Task Manager is a powerful tool packed with useful information, from your system’s overall resource usage to detailed statistics about each process. This guide explains every feature and t...
计算机打开管理闪退,win10任务管理器闪退怎么解决-解决win10任务管理器闪退的方法 - 河东软件园...
任务管理器是电脑中自带的管理程序,无论是电脑中自动开启的程序还是我们手动运行的,都可以在该程序的运行界面中找到。很多时候电脑出现卡机之后我们就会打开任务管理器界面,将没有响应的程序结束运行,这样就可以解决电脑卡顿的问题了。近日有用户在win10中使用任务管理器的时候都发现自己电脑中的任务管理器打开之后会闪退,遇到这样的状况我们该如何才能够修复呢?方法步骤:方法一:1、进入电脑中的安全模式,由于大家...
如何查看Windows上哪个程序正在使用您的所有CPU
Sometimes your Windows 10 PC slows to a crawl, perhaps accompanied by a whirring fan and programs that barely respond. Often the problem is an application that is using a large share of the CPU’s powe...
巧用Windows任务管理器实现特殊功能
巧用Windows任务管理器实现特殊功能 2008-09-22 PChome.net 类型: 转载 来源: 电脑报 责编: 潘翔城 Windows任务管理器(以下简称任务管理器)是大家经常使用的,可是大多数人...
2710



被折叠的 条评论
为什么被折叠?



