系统休眠消息PBT_APMSUSPEND
https://msdn.microsoft.com/en-us/library/windows/desktop/aa372721(v=vs.85).aspx
https://msdn.microsoft.com/en-us/library/windows/desktop/aa372708(v=vs.85).aspx
今天要查找如何获取系统从睡眠、休眠状态下唤醒的消息,写了个MFC对话框的程序,贴出部分核心代码:
- //唤醒消息捕获
- LRESULT CSystemResumedMessageDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
- {
- // TODO: 在此添加专用代码和/或调用基类
- if ((message == WM_POWERBROADCAST) && (wParam == PBT_APMRESUMEAUTOMATIC))
- {
- ShowSystemResumedTips();//捕获唤醒消息后的提示操作
- }
- return CDialog::WindowProc(message, wParam, lParam);
- }
唤醒消息捕获参考了:http://bbs.csdn.net/topics/320261685
之前写过一个实现系统关机、重启、睡眠、休眠的实现,一并贴出代码:
- /*
- MySystemShutdown
- 功能:实现系统关机、重启
- 参数:
- dwShutDownFlag:EWX_SHUTDOWN 关机 EWX_REBOOT 重启
- bForce:强制执行
- 返回值:成功返回TRUE,否则返回FALSE
- */
- BOOL MySystemShutdown(DWORD dwShutDownFlag = EWX_SHUTDOWN,BOOL bForce = FALSE)
- {
- HANDLE hToken;
- TOKEN_PRIVILEGES tkp;
- // Get a token for this process.
- if (!OpenProcessToken(GetCurrentProcess(),
- TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
- return( FALSE );
- // Get the LUID for the shutdown privilege.
- LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,
- &tkp.Privileges[0].Luid);
- tkp.PrivilegeCount = 1; // one privilege to set
- tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
- // Get the shutdown privilege for this process.
- AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,
- (PTOKEN_PRIVILEGES)NULL, 0);
- if (GetLastError() != ERROR_SUCCESS)
- return FALSE;
- if (bForce)
- {
- dwShutDownFlag |= EWX_FORCE;//强制终止进程。当此标志设置,Windows不会发送消息WM_QUERYENDSESSION和WM_ENDSESSION的消息给目前在系统中运行的程序。这可能会导致应用程序丢失数据。
- }
- if (!ExitWindowsEx(dwShutDownFlag,
- SHTDN_REASON_MAJOR_OPERATINGSYSTEM |
- SHTDN_REASON_MINOR_UPGRADE |
- SHTDN_REASON_FLAG_PLANNED))
- return FALSE;
- return TRUE;
- }
- /*
- MySystemSleep
- 功能:实现系统休眠、睡眠功能
- 参数:
- bHibernate:TRUE休眠 FALSE睡眠
- 返回值:成功返回TRUE,否则返回FALSE
- */
- BOOL MySystemSleep(BOOL bHibernate = TRUE)//
- {
- HMODULE hModule = NULL;
- BOOL bRet = FALSE;
- // BOOLEAN WINAPI SetSuspendState(
- // __in BOOLEAN Hibernate,
- // __in BOOLEAN ForceCritical,
- // __in BOOLEAN DisableWakeEvent
- // );
- typedef BOOL (WINAPI *PSetSuspendState)(BOOL Hibernate,
- BOOL ForceCritical,
- BOOL DisableWakeEvent);
- hModule = LoadLibrary(_T("PowrProf.dll"));
- if (hModule)
- {
- PSetSuspendState pSetSuspendState = NULL;
- pSetSuspendState = (PSetSuspendState)::GetProcAddress(hModule,"SetSuspendState");//设置备份文件名函数指针
- if(pSetSuspendState != NULL)
- {
- bRet = pSetSuspendState(bHibernate,0,0);
- }
- FreeLibrary(hModule);
- }
- return bRet;
- }
程序源码连接:http://download.csdn.net/detail/daiafei/8673013
http://blog.csdn.net/daiafei/article/details/45562937
系统休眠消息PBT_APMSUSPEND的更多相关文章
- Android系统休眠对程序的影响以及处理
Android系统在用户长时间不操作时,为了节省资源,系统会选择休眠.在休眠过程中自定义的Timer.Handler.Thread.Service等都会暂停.而有时候这种机制会影响到我们程序的正常运行 ...
- 现代IM系统中消息推送和存储架构的实现
现代IM系统中消息推送和存储架构的实现-云栖社区-阿里云 https://yq.aliyun.com/articles/253242
- 系统休眠(System Suspend)和设备中断处理
一.设备IRQ的suspend和resume 本小节主要解决这样一个问题:在系统休眠过程中,如何suspend设备中断(IRQ)?在从休眠中唤醒的过程中,如何resume设备IRQ? 一般而言,在系统 ...
- Windows系统的消息机制
1)Add the window to the clipboard viewer chain. 通过SetClipboardViewer()传入窗口句柄,所有监视剪贴板的窗口句柄会组成一个链表(后来者 ...
- C#阻止系统休眠
阻止系统休眠 using System.Runtime.InteropServices; static class WinSleepCtr { //定义API函数 [DllImport("k ...
- Linux系统休眠和设备中断处理
一.设备IRQ的suspend和resume 本小节主要解决这样一个问题:在系统休眠过程中,如何suspend设备中断(IRQ)?在从休眠中唤醒的过程中,如何resume设备IRQ? 一般而言,在系统 ...
- 【ABAP系列】SAP 系统的消息类型分析 MESSAGE TYPE
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP 系统的消息类型分析 ME ...
- (转)Linux环境进程间通信----系统 V 消息队列列
转:http://www.ibm.com/developerworks/cn/linux/l-ipc/part3/ 消息队列(也叫做报文队列)能够克服早期unix通信机制的一些缺点.作为早期unix通 ...
- Windows 10 技术预览版9926 “未知源”引起系统休眠后自启的解决办法
问题的由来: 自从安装上了最新发布的Windows 10 ,使用起来有诸多的改进:无论是重绘的图标还是通知消息中心的整合还是更智能的OneDrive客户端都使得工作起来非常愉悦. 不过笔者这两天频繁遇 ...
随机推荐
- poj1639 Picnic Planning,K度限制生成树
题意: 矮人虽小却喜欢乘坐巨大的轿车,车大到能够装下不管多少矮人.某天,N(N≤20)个矮人打算到野外聚餐.为了集中到聚餐地点,矮人A 要么开车到矮人B 家中,留下自己的轿车在矮人B 家,然后乘坐B ...
- Struts2——(4)OGNL与struts标签
一.OGNL Object Graphic Navigation Language 对象图导航语言 依赖于 ognl.jar包 OGNL不是Struts框架独有的,它是和框架独立的一种技术. 例如: ...
- Qt实用技巧:界面切换使用Dialog全屏切换
需求 在做应用程序的过程中,需要使用界面切换,界面切换到下一个界面使用new一个界面并显示,如系统设置,相关信息展示等等. (注意:本技巧适用的条件是,主界面不需要相关的信号与槽做消息循环,因为主界面 ...
- what is the difference between definition and declaration in c
A declaration introduces an identifier and describes its type, be it a type, object, or function. A ...
- POJ1185:火炮(减少国家)
Description 命令将军打算N*M该网络格他们的炮兵部队部署在地图上.一个N*M该地图由N行M列,每个地图格它可以是山(使用"H" 表示),也可能是平原(用"P& ...
- 两个同名controller导致调用崩溃
之前遇到一个很诡异的bug,大概情况如下: 生成成功,运行正常,调试正常 但是调用目标controller的目标方法,运行自动中断,调试自动中断 没有任何明确的错误提示,包括调试都没有弹窗报错 调用其 ...
- boost库asio详解8——几个TCP的简单例子
摘于boost官网的几个例子, 做了点小修改, 笔记之. 同步客户端 void test_asio_synclient() { typedef boost::asio::io_service IoSe ...
- 一步一步造个IoC轮子(二),详解泛型工厂
一步一步造个Ioc轮子目录 一步一步造个IoC轮子(一):Ioc是什么 一步一步造个IoC轮子(二):详解泛型工厂 一步一步造个IoC轮子(三):构造基本的IoC容器 详解泛型工厂 既然我说IoC容器 ...
- 【转】 C#后台调用前台javascript的五种方法
第一种,OnClientClick (vs2003不支持这个方法)<asp:ButtonID="Button1" runat="server" Te ...
- Win8 Metro(C#)数字图像处理--2.41彩色图像密度分割算法
原文:Win8 Metro(C#)数字图像处理--2.41彩色图像密度分割算法 [函数名称] 彩色图像密度分割函数 DensitySegmentProcess(WriteableB ...