在预处理器中检查 Windows Build 版本

问题描述 投票:0回答:1

Windows SDK 中的某些

DWMWINDOWATTRIBUTE
选项仅适用于某些 Windows 版本,例如:

DWMWA_BORDER_COLOR

从 Windows 11 Build 22000 开始支持此值。

如何使用预处理器检查构建版本?像这样的东西:

#if WINDOWS_BUILD >= 22000
COLORREF hexCol = 0x00505050;
DwmSetWindowAttribute(GetWin32Handle(), DWMWINDOWATTRIBUTE::DWMWA_BORDER_COLOR, &hexCol, sizeof(hexCol));
#endif

我知道

WINVER
宏,但它只能用于检查主 Windows 版本,而不是特定版本。可能的值也只适用于 Windows 10,所以你甚至不能用它来检查 Windows 11:

#define _WIN32_WINNT_NT4                    0x0400
#define _WIN32_WINNT_WIN2K                  0x0500
#define _WIN32_WINNT_WINXP                  0x0501
#define _WIN32_WINNT_WS03                   0x0502
#define _WIN32_WINNT_WIN6                   0x0600
#define _WIN32_WINNT_VISTA                  0x0600
#define _WIN32_WINNT_WS08                   0x0600
#define _WIN32_WINNT_LONGHORN               0x0600
#define _WIN32_WINNT_WIN7                   0x0601
#define _WIN32_WINNT_WIN8                   0x0602
#define _WIN32_WINNT_WINBLUE                0x0603
#define _WIN32_WINNT_WINTHRESHOLD           0x0A00
#define _WIN32_WINNT_WIN10                  0x0A00

如果我无法检查构建版本,是否有其他方法可以检查是否定义了

DWMWA_BORDER_COLOR
?我不能使用
#ifdef
,因为它是一个枚举值而不是宏。

c++ winapi c-preprocessor
1个回答
0
投票

Windows 11 仍然使用 Windows 10 版本号。至少目前,操作系统内部版本号 22000 是区分 Windows 10 和 Windows 11 的标准。

就我而言,这就是您无法使用它来检查 Windows 11 的原因。

“SDK 版本仅在 Windows 11 上可用。我不想强迫人们切换到更新的操作系统来构建项目,只是为了一个次要的美学功能。”如果您的系统是 Windows 10 版本 1507 或更高版本,您可以尝试为 Windows 11 安装 Windows SDK (10.0.22000.0) 或更高版本。然后您可以在项目属性中明确设置 Windows SDK。

© www.soinside.com 2019 - 2024. All rights reserved.