在Win7上运行的c ++程序中,有没有办法伪造鼠标移动或类似的东西,只是为了防止屏幕保护程序启动而系统进入睡眠状态?我正在寻找最小的方法,我不想使用.NET。 谢谢, -nuun
答案 0 :(得分:30)
请勿使用屏幕保护程序设置,请使用SetThreadExecutionState。这是用于通知窗口您的应用程序处于活动状态的API:
启用应用程序通知 因此,它正在使用的系统 阻止系统进入 睡觉或关闭显示屏时 应用程序正在运行。
和
多媒体应用,例如视频 播放器和演示应用, 必须使用ES_DISPLAY_REQUIRED 长时间显示视频 没有用户输入
答案 1 :(得分:1)
这不是一个坏主意,任何体面的媒体播放器都会这样做......在Win32 api中查找SystemParametersInfo(SPI_SETSCREENSAVEACTIVE ...)
函数,它应该可以解决问题。
答案 2 :(得分:0)
这通常是一个特别坏的想法。桌面属于您的应用程序的用户,不您的应用程序。
如果我在未经我许可的情况下运行了一个禁用我的屏幕保护程序(或移动我的桌面图标或将其添加到我的各种快速访问工具栏)的应用程序,它很快就会在它的耳朵上被抛出。
而且,如果您 该用户,则不在您的应用中执行此操作。像我们其他人一样手动更改: - )
如果你必须这样做(我敦促你不要这样做,但你可以随意忽略它),我认为这个方法自NT以来没有改变。您使用SystemParametersInfo
和SPI_SETSCREENSAVEACTIVE
来更改行为。它们来自记忆中的user32.dll
。
但我对Win7下使用该方法报告的问题有一个模糊的回忆,我认为解决方案是注册表更改,在ScreenSaveActive
下设置HKEY_CURRENT_USER\Control Panel\Desktop
到0
(并返回当你完成时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应用程序,我也无法想到有效的用例。
无论如何,我们需要更多信息。