c++ - 为什么 _WIN32_WINNT == 0x400 在 Windows 7 机器上的 Qt Creator 中?

标签 c++ windows winapi qt mingw

我正在使用基于 Qt 4.7.0(32 位)的 Qt Creator 2.0.1。操作系统是 Windows 7 Ultimate(32 位)。

我想使用以下函数调用重新启动 Windows:

ExitWindowsEx(EWX_REBOOT, SHTDN_REASON_MAJOR_SYSTEM |
                          SHTDN_REASON_MINOR_NETWORK_CONNECTIVITY);

我在源代码中添加了 windows.h 和 reason.h,并在 *.pro 文件的 LIBS 部分添加了 libuser32。

编译代码后,Qt Creator 发出错误提示 SHTDN_REASON_MAJOR_SYSTEMSHTDN_REASON_MINOR_NETWORK_CONNECTIVITY 未在范围内定义。

我查看了 mingw 附带的 reason.h 文件。我发现 #define 位于 #if 中:

#if (_WIN32_WINNT >= 0x0501)

我查看了 _WIN32_WINNT 的值,它似乎是 1024 (0x400)。

我知道这代表某种版本号,那些 #define 应该在特定版本之后编译。但是为什么 _WIN32_WINNT 在 Windows 7 上这么低?我如何使用那些 #define?我不想用直接值代替 SHTDN_REASON_MAJOR_SYSTEMSHTDN_REASON_MINOR_NETWORK_CONNECTIVITY

最佳答案

_WIN32_WINNT 的值指示您在运行时定位的 Win32 API 的版本。它与您在构建时碰巧使用的操作系统版本无关。

如果您在包含 API 头文件之前将其设置为更高的值,将有更多 API 函数和定义可用,但使用这些函数可能会导致您的应用程序拒绝在以前版本的 Windows 上运行。通常,您希望使用可以避免的最低值。

只要检查来自 Win32 函数的错误表明该值不受支持,使用更高 API 版本的 #define 值是安全的。但是,使用 Win32 函数将导致您的应用程序在启动时失败并出现诸如“未找到 DLL 导入”之类的错误。

关于c++ - 为什么 _WIN32_WINNT == 0x400 在 Windows 7 机器上的 Qt Creator 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5440551/

相关文章:

c - 在 Winapi 中以编程方式关闭远程机器

c++ - 使用 strcpy() 获取 char* 的一部分会导致程序崩溃

c++ - 如何快速保存大文件中的小改动?

c++ - 如何将类方法作为 GLUT 回调传递?

c++ - boost multi_index_container 更改键 -> 容器状态不正确

c++ - printf int 到带有左填充空格的 char 数组

c# - 我怎样才能让一个窗口看起来像一个框架?

python - 如何在不弹出可执行文件控制台的情况下在 Python 中运行可执行文件?

winapi - SetWindowsHookEx() WM_KEYBOARD_LL 未通过全屏 RDC

c++ - 多线程 MPI 进程突然终止