对于一些Windows应用程序,必须要保证os不能休眠才能有效工作,如迅雷下载软件,如果os进入休眠,则会导致网络不正常,从而导致不能下载东西。那木有没有1种机制,当打开软件的时候,就自动将os设为不休眠状态呢?这里我介绍一种QT应用程序不让windows进入休眠的方法:
- ::SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED | ES_DISPLAY_REQUIRED);
只需要在QT应用程序入口函数中加入该语句就可以了,这样os就不会进入休眠了,该语句声明在winbase.h中,是windows的api。
具体参考http://msdn.microsoft.com/en-us/library/aa373208(VS.85).aspx
(2)修改 WINVER 和 _WIN32_WINNT
Visual C++ 不再适用于 Windows 95、Windows 98、Windows ME 或 Windows NT。如果您的WINVER 或_WIN32_WINNT 宏分配给了其中一个 Windows 版本,则必须修改相应宏。当升级使用 Visual C++ 早期版本创建的项目时,如果 WINVER 或_WIN32_WINNT 宏分配给了不再受支持的 Windows 版本,则会显示与这些宏相关的编译错误。
若要修改相应宏,请在头文件中添加以下行。
#ifndef WINVER#define WINVER 0x0600#endif
#ifndef _WIN32_WINDOWS#define _WIN32_WINDOWS 0x0600#endif
#ifndef _WIN32_WINNT#define _WIN32_WINNT 0x0600#endif
这是用于 Windows 2000 操作系统的值。 其他有效值包括 0x0501(用于 Windows XP)、0x0502(用于 Windows Server 2003)、0x0600(用于 Windows Vista)和 0x0601(用于 Windows 7)。
说明 |
---|
如果您的应用程序中包括内部 MFC 头,则不能保证这些值能够正常工作。例如,afximpl.h 中不支持 Windows 2000。 |
还可以使用 /D 编译器选项定义此宏。有关更多信息,请参见/D(预处理器定义)。
有关这些宏的含义的更多信息,请参见使用 Windows 头文件。
(3)QT中SetThreadExecutionState的使用
由于SetThreadExecutionState与windows的系统版本有关,
#if (_WIN32_WINNT >= 0x0500 || _WIN32_WINDOWS >= 0x0410)
WINBASEAPI EXECUTION_STATE WINAPI SetThreadExecutionState(EXECUTION_STATE);
#endif
因此根据(2)需要在
windows.h添加如下定义
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0600
#endif