Mat*_*att 46 c++ winapi visual-studio-2008-sp1
我最近决定在学习之后自学c++
和win32
编程vb.net
,我有一个非常简单的问题:
如何确定Windows SDK
计算机上安装的版本?
我问,所以我可以安装最新版本,如果它还没有安装,在我开始玩之前c++
.我Microsoft Visual Studio 2008 SP1
用作我的IDE
.
Ric*_*ard 41
至少在英语语言环境中:
dir "%ProgramFiles%\Microsoft SDKs\Windows"
Run Code Online (Sandbox Code Playgroud)
应该管用.很可能会安装多个版本,这对于一个版本只能由该项目指定.
Day*_*Day 31
当前版本的Windows SDK存储在CurrentVersion
以下注册表项的值中:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows
Run Code Online (Sandbox Code Playgroud)
并且可以使用此PowerShell单行检索它:
$(Get-Item "hklm:\SOFTWARE\Microsoft\Microsoft SDKs\Windows").GetValue("CurrentVersion")
Run Code Online (Sandbox Code Playgroud)
Bru*_*son 28
如果您需要在编译时确定正在使用的Windows SDK的主要操作系统版本,那么您可以使用在ntverp.h中定义的VER_PRODUCTBUILD宏.例如:
#include <ntverp.h>
#if VER_PRODUCTBUILD > 9600
// Windows 10+ SDK code goes here
#else
// Windows 8.1- SDK code goes here
#endif
Run Code Online (Sandbox Code Playgroud)
在大多数情况下,这不应该是必要的,因为产品应该设计为使用特定平台SDK构建.但对于某些大型产品,可能需要支持多平台SDK.当从一个迁移到另一个时,这可能特别有用.如果头文件中存在错误(例如bthledef.h的Windows 8.1 SDK版本中的伪造"#pragma pop"),那么您可能需要解决此错误,但不包括使用Windows 10 SDK时的解决方法或更高.如果未安装所需的SDK版本,此技术还可用于提供有用的错误消息.
请注意,VER_PRODUCTBUILD仅提供主要操作系统版本信息,例如8.1与10.这意味着VER_PRODUCTBUILD越来越无用,因为它不会随着Windows 10的更新而改变.因此,更可能看到的是sdkddkver.h和NTDDI_WIN10_*宏.从Windows 10.0.17763.0 SDK开始,现在定义了NTDDI_WIN10_RS5.所以,写这样的代码:
#include <sdkddkver.h>
#if !defined(NTDDI_WIN10_RS5)
#error Windows 10.0.17763.0 SDK is required
#endif
Run Code Online (Sandbox Code Playgroud)
对于最新版本,请在此注册表项下检查:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Kits
Run Code Online (Sandbox Code Playgroud)
或以下:
C:\Program Files (x86)\Microsoft SDKs\Windows Kits
Run Code Online (Sandbox Code Playgroud)