如何在程序执行期间阻止屏幕保护程序和睡眠?

时间:2010-09-08 07:01:49

标签: c++ windows-7 sleep

在Win7上运行的c ++程序中,有没有办法伪造鼠标移动或类似的东西,只是为了防止屏幕保护程序启动而系统进入睡眠状态?我正在寻找最小的方法,我不想使用.NET。 谢谢, -nuun

5 个答案:

答案 0 :(得分:30)

请勿使用屏幕保护程序设置,请使用SetThreadExecutionState。这是用于通知窗口您的应用程序处于活动状态的API:

  

启用应用程序通知   因此,它正在使用的系统   阻止系统进入   睡觉或关闭显示屏时   应用程序正在运行。

  

多媒体应用,例如视频   播放器和演示应用,   必须使用ES_DISPLAY_REQUIRED   长时间显示视频   没有用户输入

答案 1 :(得分:1)

这不是一个坏主意,任何体面的媒体播放器都会这样做......在Win32 api中查找SystemParametersInfo(SPI_SETSCREENSAVEACTIVE ...)函数,它应该可以解决问题。

答案 2 :(得分:0)

这通常是一个特别的想法。桌面属于您的应用程序的用户,您的应用程序。

如果我在未经我许可的情况下运行了一个禁用我的屏幕保护程序(或移动我的桌面图标或将其添加到我的各种快速访问工具栏)的应用程序,它很快就会在它的耳朵上被抛出。

而且,如果您 该用户,则在您的应用中执行此操作。像我们其他人一样手动更改: - )

如果你必须这样做(我敦促你不要这样做,但你可以随意忽略它),我认为这个方法自NT以来没有改变。您使用SystemParametersInfoSPI_SETSCREENSAVEACTIVE来更改行为。它们来自记忆中的user32.dll

但我对Win7下使用该方法报告的问题有一个模糊的回忆,我认为解决方案是注册表更改,在ScreenSaveActive下设置HKEY_CURRENT_USER\Control Panel\Desktop0(并返回当你完成时1

答案 3 :(得分:0)

在Windows启动屏幕保护程序之前,它将在WM_SYSCOMMAND消息中向应用程序发送SC_SCREENSAVE通知。如果应用程序希望阻止屏幕保护程序启动,则应将“ handled”标志设置为true,并在消息处理期间返回零。还有SC_MONITORPOWER可以防止显示器进入低功耗状态。

https://docs.microsoft.com/en-us/windows/desktop/menurc/wm-syscommand

答案 4 :(得分:-2)

我不太清楚为什么你必须诉诸于此。在电源设置中简单禁用这些选项即可。

你想通过这样做来实现什么?您的应用程序是服务吗? 如果它是那么你不需要为此烦恼。

如果您的应用程序是UI应用程序,我也无法想到有效的用例。

无论如何,我们需要更多信息。