Java 应用程序的 PC 待机检测器






3.63/5 (9投票s)
描述:演示如何检测计算机是否将进入睡眠(待机)模式,并允许或禁止它。
引言
本文档展示了您的 JAVA(和 C++)程序如何检测并拒绝用户或系统发起的睡眠/待机/休眠请求。
背景
我编写了一个应用程序,由特殊的 PCI 卡提供支持,并且 24/7 全天候运行。我们发现,如果 PC 进入待机模式,PCI 卡会被错误激活,这非常糟糕。在 Windows XP 中没有简单的方法来统一禁用睡眠/待机/休眠功能,因此我决定使用 Windows API 来检测是否发出了待机请求并拒绝它。幸运的是,Win32 API 具有一个名为 WM_POWERBROADCAST
的消息,当 PC 想要进入待机或休眠模式时,该消息会发送到所有应用程序。如果您从此消息处理程序返回 BROADCAST_QUERY_DENY
,Win32 子系统将中止待机。
通过使用此 API,附带的代码能够检测计算机是否进入待机模式,并通过利用 JNI,将该事件通知 Java 代码的其余部分。此外,该代码允许您允许或禁止 PC 进入待机模式。
Using the Code
要从 JAVA 使用该代码,只需实例化一个 StandByDetector
对象,并在构造函数中提供对 StandByRequestListener
的引用。当 PC 上发出待机/休眠请求时,将通知该侦听器。使用 setAllowStandby()
来告诉代码您是否希望允许进入待机状态。请记住,DLL(包含在内)必须位于您的 java.library.path 路径中。这是一个例子
StandByDetector sd=new StandByDetector(new StandByRequestListener() {
public void standByRequested() {
System.out.println("standby requested");
}
});
sd.setAllowStandby(false);
编译和运行演示
- 将 zip 文件内容提取到 c:\temp,保留 zip 目录结构。
- 打开 cmd 并进入 temp。然后在命令行中输入
javac com\ha\common\windows\*.java
- 然后,要运行演示,请在命令行中输入
java -Djava.library.path=C:\temp\com\ha\common\windows -classpath c:\temp\com.ha.common.windows.StandByDetector
- 现在尝试将 PC 置于待机状态 - 任务管理器 -> 关闭 -> 待机
- 您会注意到 cmd shell 显示消息“请求待机”,并且 PC 不会进入待机状态。
历史
- 初始版本:2004-4-1