首页 > 系统相关 >Windows c++检测笔记本是否处于睡眠状态

Windows c++检测笔记本是否处于睡眠状态

时间:2023-08-07 20:22:54浏览次数:34  
标签:PBT POWERBROADCAST lib Windows WM 笔记本 c++ include

最近遇到一个问题,程序需要检测电脑是否处于睡眠状态。一开始使用的方式是在WindowProc里监听WM_POWERBROADCAST消息,对PBT_APMSUSPEND``PBT_APMRESUMEAUTOMATIC消息做处理。
但是实际测试中发现,这种方法在台式机中运行良好,但是放到笔记本电脑里就不行,系统休眠时监听不到WM_POWERBROADCAST消息。
经过一番查文档,找到了一个比较通用的方法,适用于笔记本电脑和台式机。使用的系统接口是PowerRegisterSuspendResumeNotification。测试代码如下:

#include <windows.h>
#include <iostream>
#include <powrprof.h>

#pragma comment(lib, "Powrprof.lib")

using namespace std;

ULONG CALLBACK DeviceCallback(PVOID Context, ULONG Type, PVOID Setting)
{
    if (Type == PBT_APMSUSPEND)
    {
        cout << "close" << endl;
    }
    if (Type == PBT_APMRESUMESUSPEND)
    {
        cout << "open" << endl;
    }
    return ERROR_SUCCESS;
}

int main()
{
    HPOWERNOTIFY g_power_notify_handle = NULL;
    DEVICE_NOTIFY_SUBSCRIBE_PARAMETERS params;
    params.Callback = DeviceCallback;
    params.Context = 0;
    PowerRegisterSuspendResumeNotification(DEVICE_NOTIFY_CALLBACK, &params, &g_power_notify_handle);
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    PowerUnregisterSuspendResumeNotification(g_power_notify_handle);
    return 0;
}

标签:PBT,POWERBROADCAST,lib,Windows,WM,笔记本,c++,include
From: https://www.cnblogs.com/chaichengxun/p/17607834.html

相关文章

  • vc++2008通过paho c语言客户端接入MQTT
    因项目需要,IoT平台需要支持vc++2008接入。因为Paho的c++客户端不支持低版本vc++,所以不得不尝试通过c语言的库实现。类库下载从github下载c语言包。例如:eclipse-paho-mqtt-c-win32-1.3.12.ziphttps://github.com/eclipse/paho.mqtt.c/releases类库整合和配置解压出来的c语言......
  • 质因子分解C++
    1、题目2、AC代码#include<iostream>#include<cmath>usingnamespacestd;constintmaxn=100010;//10的5次方即可boolisPrime(intn){if(n<=1)returnfalse;if(n==2||n==3)returntrue;//特判if(n%6!=1&&n%6!=5)returnfalse;//不在6的倍......
  • 递推算法例题C++
    1、移动路线【题目描述】X桌子上有一个m行n列的方格矩阵,将每个方格用坐标表示,行坐标从下到上依次递增,列坐标从左至右依次递增,左下角方格的坐标为(1,1),则右上角方格的坐标为(m,n)。小明是个调皮的孩子,一天他捉来一只蚂蚁,不小心把蚂蚁的右脚弄伤了,于是蚂蚁只能向上或向右移动。小明......
  • 【Linux】sz命令下载tar.gz,zip等文件到Windows解压时提示文件已损坏
    WinRAR打开提示:不可预料的压缩文件末端 用Bandzip打开提示:文件已损坏 用7Zip打开虽然不报错,但是发现文件缺失。开始以为是网络问题导致下载文件不全,但是对比文件大小发现一模一样。通过查看sz命令说明,解决办法为:下载的时候需要加上-be参数,明确指定下载的是二进制文件。......
  • 【转载】Windows设置exe或者bat文件开机启动
    5种方式:启动路径方式任务计划程序方式组策略方式注册表方式创建Windows服务方式【具体参考】Windows设置exe或者bat文件开机启动的几种方法汇总(yii666.com)exe做成服务开机自启-一门EXE教程(yimenapp.com)......
  • vscode c++食用指南
    准备配置环境为机房的win10.首先你需要下载vscode。可以从官网下载:https://code.visualstudio.com/Download配置编译c++下载完之后安装好,界面全是英文的,正常情况下在一会儿后他会提示你安装中文的扩展,如果没有可以去最左边四个小方块的图标里搜索“Chinese”安装即可。ps:......
  • Windows系统批处理脚本.bat文件
    windows批处理文件bat中当前目录方法1:命令  %cd% 或者 !cd! ,取得是运行的环境目录方法2:命令 %~dp0 ,取得了bat的文件所在目录@ECHOOFF会关闭注释输出;@ECHOON则打开注释输出。建议尽量使用下面两种符号来为.bat批处理文件添加注释:(1)::注释(2)%注释%,注意:为......
  • 使用python,利用公网服务器时间更新windows本地时间
    有时候,我们会发现无法连接windows的时间服务器或者内网的时间服务器本身的时间不准。于是,可以通过如下python脚本示例,从公网任意服务器获取其服务器时间,这样更新的时间较为准确。#-*-coding:utf-8-*-importdatetimeimportsubprocessimportrequestsimporttimedefset_......
  • Windows server 2003怎么安装iisWindows server 2003安装IIS教程
    Windows2008系统服务器安装IIS之前已经分享过了,和Windows2003完全不同,今天我将详细地和你分享Windowsserver2003卸载和安装IIS的步骤方法,希望可以帮助到你~1、首先进入服务器,确定下服务器是否有安装IIS,有安装IIS,需要重装的,可以先将IIS卸载。2、卸载比安装更简单些,点击开始——......
  • 复习笔记|第十四章 Windows操作系统模型《操作系统原理教程》
    参考教材:《操作系统原理教程(第4版)》刘美华翟岩龙著大纲问题回答(精简版)1.Windows采用什么样的体系结构?从图中看出,系统划分为两种状态,核心态和用户态。粗线上方代表用户态进程,下方是核心态的操作系统服务。用户态的进程只能运行在受保护的地址空间。因此,四种类型的用户态进......