本文主要是介绍Tip5 windows防止屏幕休眠的方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
最近项目中需要软件运行时,禁止windows休眠,这里主要考虑了两种实现方式;
方式一:使用windows提供的防休眠接口:
转载自这位老哥的
阻止屏幕保护
bool active = false;
SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, false, &active, SPIF_SENDWININICHANGE);
防止系统关闭显示器或进入待机状态
程序启动时,调用:
SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED | ES_DISPLAY_REQUIRED);
程序退出时,调用:
SetThreadExecutionState(ES_CONTINUOUS);
详细参数可参考MDSN:SetThreadExecutionState function
测试后,此种方式确实可以实现屏幕防休眠,但是考虑到一个问题,如果程序崩溃了,未在结束时调用SetThreadExecutionState(ES_CONTINUOUS); 接口进行处理,会导致用户的电脑无法休眠…,所以又考虑方式二;
方式二:使用定时器定时触发键盘事件,防止休眠
话不多说,直接上代码
#include <windows.h>
#include <WinUser.h>
#include <synchapi.h>void MainWindow::onPreventerSleep()
{
#ifdef Q_OS_WINDOWSkeybd_event(VK_NUMLOCK, 0, 0, 0);keybd_event(VK_NUMLOCK, 0, KEYEVENTF_KEYUP, 0);Sleep(10);keybd_event(VK_NUMLOCK, 0, 0, 0);keybd_event(VK_NUMLOCK, 0, KEYEVENTF_KEYUP, 0);
#endif
}
通过Qt的定时器定时调用此函数,向系统发送键盘事件;
编译环境:VS2019
但是为了程序的跨平台性,最好使用Qt自带的键盘触发事件,但是在测试过程中发现Qt的键盘触发事件无法到系统层响应,如果有大神知道为何,望指点一二;
这篇关于Tip5 windows防止屏幕休眠的方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!