如何在 C++ 中检查系统是否处于活动状态?

2024-01-29

我正在编写仅当 PC 上没有人类活动时才需要运行的代码,例如当屏幕保护程序运行时。关于如何在 Windows 下用 C++ 执行此操作有什么建议吗?

@talnicolas,只是为了使用未使用的资源,有多少次人们让计算机打开但他们在另一个地方?


您可以使用GetLastInputInfo http://msdn.microsoft.com/en-us/library/windows/desktop/ms646302(v=vs.85).aspx检查用户闲置的时间(没有移动鼠标或在键盘上输入内容)以及SystemParametersInfo http://msdn.microsoft.com/en-us/library/windows/desktop/ms724947%28v=vs.85%29.aspx检查屏幕保护程序是否处于活动状态。

Example

#define WINDOWS_LEAN_AND_MEAN
#include <windows.h>
#include <iostream>

// do something after 10 minutes of user inactivity
static const unsigned int idle_milliseconds = 60*10*1000;
// wait at least an hour between two runs
static const unsigned int interval = 60*60*1000;

int main() {
    LASTINPUTINFO last_input;
    BOOL screensaver_active;

    // main loop to check if user has been idle long enough
    for (;;) {
        if ( !GetLastInputInfo(&last_input)
          || !SystemParametersInfo(SPI_GETSCREENSAVERACTIVE, 0,  
                                   &screensaver_active, 0))
        {
            std::cerr << "WinAPI failed!" << std::endl;
            return ERROR_FAILURE;
        }

        if (last_input.dwTime < idle_milliseconds && !screensaver_active) {
            // user hasn't been idle for long enough
            // AND no screensaver is running
            Sleep(1000);
            continue;
        }

        // user has been idle at least 10 minutes
        do_something();
        // done. Wait before doing the next loop.
        Sleep(interval);
    }
}

请注意,我在 Linux 机器上编写了该代码,因此无法对其进行测试。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 C++ 中检查系统是否处于活动状态? 的相关文章

随机推荐

  • 如何使用 Hydra-fb 将配置文件收集到列表中?

    假设我有一个抽象类db在我的代码和类中db1 db1 db1继承自db 我的项目使用hydra https hydra cc 并具有以下结构 my app py conf yaml db db1 yaml db2 yaml db3 yaml
  • 将图像从phonegap应用程序上传到WCF服务

    我正在尝试使用phonegap文件传输API将图像从我的手机上传到WCF服务器 以下是我的代码 但我无法将图像上传到服务器 请给一些建议 测试 html div div div div
  • 使用 ZingChart 的多维堆叠条形图

    我正在尝试使用 ZingChart 创建多维堆叠条形图 据我所知 这是 由于某种原因 图像没有显示 它的链接是 https drive google com file d 0B14IyWv9zwZ9a0hWR0lXTDZQXzQ view
  • 如何创建像球拍一样的 make-curry 函数

    我想看看如何模仿 curry func that racket提供 下面是我如何手动柯里化函数的示例 lang sicp convert to a curried function define add1 x y x y define ad
  • 为什么background-filter:blur() 不能正常工作?

    我正在尝试实现这个图像 其中 带有文本 Dog 的 div 被部分覆盖并且blurring图片 所以我尝试了这个 profile background image url https townofbeekmantown com wp con
  • 如何将Dockerfile和应用程序文件部署到boot2docker

    我刚刚开始学习 Docker 我正在尝试在 Windows 上使用 boot2docker 进行简单的设置 我无法在任何在线教程或示例中找到如何使 boot2docker VM 可以访问我的项目文件 我下载了 boot2docker 并成功
  • jQuery 和其他库

    我在 jQuery 方面遇到了这个问题 并且不知道如何解决它 任何人都可以帮助或提供一些帮助 异常 组件返回失败代码 0x80070057 NS ERROR ILLEGAL VALUE nsIDOMXPathEvaluator evalua
  • 使用 ng-controller 时延迟模板加载

    我试图推迟加载我的主控制器 模板 AppController 直到我从服务加载用户配置文件 对于所有导航路线 我使用 routeProvider 进行解析 when edit editId templateUrl editTemplate
  • 在 ggplot2 中的一系列点周围放置边界

    我想在一系列点周围设置边界 我该怎么办 These are my points 我尝试了 geom line 但这显然是错误的 因为它产生了这个 Thanks Use geom path代替geom line 这是一个例子 i lt seq
  • 从旧的init_timer到新的timer_setup的适应

    我一直在尝试将驱动程序从 2 6 移植到 4 X 而没有原始板制造商的支持 并且 Linux 经验非常有限 原来的驱动使用的是init timer 并传入一个指向timer list结构 那timer list结构的data元素被设置为指向
  • WPF DragDrop.DoDragDrop(用于右键单击?)

    在 WPF 中 我想使用右键单击来启动拖放 像 Windows 资源管理器一样 右键单击 稍微移动 您就会得到装饰器来指示操作中的拖放 不要移动 当您松开按钮时 您会看到上下文菜单 我已经启动了这一切 但是当我调用 DragDrop DoD
  • 自然对齐的内存地址

    我需要从现有的64位值中提取一个内存地址 这个地址指向一个4K数组 起始值为 0x000000030c486000 我需要的地址存储在位 51 12 中 因此我使用以下方法提取这些位 address start gt gt 12 0x000
  • 如何从在线检查器中隐藏 codeigniter 足迹区域?

    这可以删除吗codeigniter来自在线工具的足迹区域 例如wappalyzer com or builtwith com并使 敏感项目技术无法检测 是的 这是可能的 首先 您需要知道它是如何被检测到的 看一下 Wappalyzer 代码
  • 如何使用 C# 'foreach' DataTable 中的列?

    如何使用循环遍历数据行中的每一列foreach DataTable dtTable new DataTable MySQLProcessor DTTable mysqlCommand out dtTable foreach DataRow
  • Node.js 和 Tornado 之间的差异[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 除了node js是用JS编写而Tornado是用Python编写之外 两者之间还有哪些区别 它们都是非阻塞异步 Web 服务器 对吧 除了语言
  • asp.net 中的文件处理程序

    我需要跟踪 pdf 在我的网络应用程序中打开的时间 现在 当用户单击链接时 我正在写入数据库 然后从后面的代码中使用 window open 这并不理想 因为 Safari 会阻止弹出窗口 而其他网络浏览器在运行时会发出警告 所以我想Fil
  • 继续 Jenkins 管道过去失败的阶段

    我有一系列执行快速检查的阶段 我想把它们全部完成 即使有失败 例如 stage one node sh exit 0 stage two node sh exit 1 failure stage three node sh exit 0 S
  • 如何使用JPA实现时态表?

    我想知道如何实施时态表 http en wikipedia org wiki Temporal database在带有 EclipseLink 的 JPA 2 中 我所说的时间是指定义有效期的表 我面临的一个问题是 由于引用表的性质 现在它
  • 不安全的指针和 Clang

    也许只是我今天过得很奇怪 但我有几个问题Clang需要一个简短示例的警告 假设有一段时间有这样一段代码 file unsafe c include
  • 如何在 C++ 中检查系统是否处于活动状态?

    我正在编写仅当 PC 上没有人类活动时才需要运行的代码 例如当屏幕保护程序运行时 关于如何在 Windows 下用 C 执行此操作有什么建议吗 talnicolas 只是为了使用未使用的资源 有多少次人们让计算机打开但他们在另一个地方 您可