C++ Check if Windows 10 -
i making app os specific can't seem narrow down windows 10, comes windows 8. have tested on window 10 pro , outcome major: 6 min:2. there way check if it's windows 10 more efficiently?
edit: found working api rtlgetversion() works os's properly!
#include "windows.h" #include <iostream> 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, ver_majorversion, maskcondition); } bool equalsminorversion(dword minorversion) { osversioninfoex osversioninfo; ::zeromemory(&osversioninfo, sizeof(osversioninfoex)); osversioninfo.dwosversioninfosize = sizeof(osversioninfoex); osversioninfo.dwminorversion = minorversion; ulonglong maskcondition = ::versetconditionmask(0, ver_minorversion, ver_equal); return ::verifyversioninfo(&osversioninfo, 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(); }
this pretty ironic, but...
bool winapi iswindows10orgreater(void); docs here.
edit: geniuses redmond appear have problems thinking prototypes, or in other words, op gets undefined symbol error stated in comments. there's function:
bool winapi iswindowsversionorgreater( word wmajorversion, word wminorversion, word wservicepackmajor ); and, windows 10, wmajorversion, wminorversion, , wservicepackmajor appear be, respectively, 10, 0, , 0.
docs function here.
second edit: it's official: iswindowsversionorgreater() , getversionex() broken 8.1 onwards. use iswindowsxxxorgreater() instead, xxx can xp, xpsp1, xpsp2, xpsp3, vista, vistasp1, vistasp2, 7, 7sp1, 8, 8point1, 10, or server.
Comments
Post a Comment