65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.63/5 (9投票s)

2004年4月1日

CPOL

2分钟阅读

viewsIcon

66723

downloadIcon

1162

描述:演示如何检测计算机是否将进入睡眠(待机)模式,并允许或禁止它。

引言

本文档展示了您的 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);

编译和运行演示

  1. 将 zip 文件内容提取到 c:\temp,保留 zip 目录结构。
  2. 打开 cmd 并进入 temp。然后在命令行中输入

    javac com\ha\common\windows\*.java 
  3. 然后,要运行演示,请在命令行中输入

    java -Djava.library.path=C:\temp\com\ha\common\windows 
        -classpath c:\temp\com.ha.common.windows.StandByDetector 
  4. 现在尝试将 PC 置于待机状态 - 任务管理器 -> 关闭 -> 待机
  5. 您会注意到 cmd shell 显示消息“请求待机”,并且 PC 不会进入待机状态。

历史

  • 初始版本:2004-4-1
© . All rights reserved.