c语言osversioninfoex,C检查Windows 10

我正在制作一个应用到操作系统的应用程序,但我似乎不能缩小

Windows 10,它出现在Windows 8上.我已经在Window 10 Pro上测试了,结果是Major:6 Min:2.还有另一种方法来检查它是否更有效率的Windows 10?

编辑:找到一个正常工作的API RtlGetVersion()适用于所有操作系统的正确!

#include "windows.h"

#include

using namespace std;

BOOL EqualsMajorVersion(DWORD majorVersion)

{

OSVERSIONINFOEX osVersionInfo;

::ZeroMemory(&osVersionInfo,sizeof(OSVERSIONINFOEX));

osVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);

osVersionInfo.dwMajorVersion = majorVersion;

ULONGLONG maskCondition = ::VerSetConditionMask(0,VER_MAJORVERSION,VER_EQUAL);

return ::VerifyVersionInfo(&osVersionInfo,maskCondition);

}

BOOL EqualsMinorVersion(DWORD minorVersion)

{

OSVERSIONINFOEX osVersionInfo;

::ZeroMemory(&osVersionInfo,sizeof(OSVERSIONINFOEX));

osVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);

osVersionInfo.dwMinorVersion = minorVersion;

ULONGLONG maskCondition = ::VerSetConditionMask(0,VER_MINORVERSION,maskCondition);

}

int main()

{

if (EqualsMajorVersion(7) && EqualsMinorVersion(1))

printf("Maj:7 Min:1");

else if (EqualsMajorVersion(7) && EqualsMinorVersion(0))

printf("Maj:7 Min:0");

else if (EqualsMajorVersion(6) && EqualsMinorVersion(7))

printf("Maj:6 Min:7");

else if (EqualsMajorVersion(6) && EqualsMinorVersion(6))

printf("Maj:6 Min:6");

else if (EqualsMajorVersion(6) && EqualsMinorVersion(5))

printf("Maj:6 Min:5");

else if (EqualsMajorVersion(6) && EqualsMinorVersion(4))

printf("Maj:6 Min:4");

else if (EqualsMajorVersion(6) && EqualsMinorVersion(3))

printf("Maj:6 Min:3");

else if (EqualsMajorVersion(6) && EqualsMinorVersion(2))

printf("Maj:6 Min:2");

else if (EqualsMajorVersion(6) && EqualsMinorVersion(1))

printf("Maj:6 Min:1");

else if (EqualsMajorVersion(6) && EqualsMinorVersion(0))

printf("Maj:6 Min:0");

else if (EqualsMajorVersion(5) && EqualsMinorVersion(2))

printf("Maj:5 Min:2");

else if (EqualsMajorVersion(5) && EqualsMinorVersion(1))

printf("Maj:5 Min:1");

else

printf("OS not on list...");

getchar();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Windows API函数GetFileVersionInfoSize和GetFileVersionInfo来获取指定DLL文件的版本信息,然后从中获取操作系统版本信息。 以下是一个示例代码,可以获取K:\WINDOWS\SYSTEM32\NTDLL.DLL文件的版本信息和操作系统版本信息: ```c++ #include <iostream> #include <windows.h> #pragma comment(lib, "Version.lib") // 需要链接Version库 int main() { // 获取NTDLL.DLL的文件版本信息大小 DWORD dwHandle; DWORD dwSize = GetFileVersionInfoSize("K:\\WINDOWS\\SYSTEM32\\NTDLL.DLL", &dwHandle); if (dwSize == 0) { std::cout << "GetFileVersionInfoSize failed." << std::endl; return -1; } // 获取NTDLL.DLL的文件版本信息 std::vector<char> buffer(dwSize); if (!GetFileVersionInfo("K:\\WINDOWS\\SYSTEM32\\NTDLL.DLL", dwHandle, dwSize, buffer.data())) { std::cout << "GetFileVersionInfo failed." << std::endl; return -1; } // 获取操作系统版本信息 VS_FIXEDFILEINFO* pFixedFileInfo = nullptr; UINT dwLen = 0; VerQueryValue(buffer.data(), "\\", (LPVOID*)&pFixedFileInfo, &dwLen); if (pFixedFileInfo == nullptr) { std::cout << "VerQueryValue failed." << std::endl; return -1; } // 输出操作系统版本信息 std::cout << "Operating System Version: " << ((pFixedFileInfo->dwProductVersionMS >> 16) & 0xffff) << "." << (pFixedFileInfo->dwProductVersionMS & 0xffff) << "." << ((pFixedFileInfo->dwProductVersionLS >> 16) & 0xffff) << "." << (pFixedFileInfo->dwProductVersionLS & 0xffff) << std::endl; return 0; } ``` 需要注意的是,需要确保程序运行时有足够的权限访问指定的DLL文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值