Benutzer mit den meisten Antworten
Funktion GetVersionEx

Frage
-
Hallo an alle,
ich verwende seit Jahren die Klasse CSysInfo von Alexey Kazakovsky. Zur Zeit passe ich meine Anwendung an VS 2013 an und bekomme dabei diese Warnung
warning C4996: 'GetVersionExW': wurde als veraltet deklariert
an dieser Stelle im Programmcode
GetVersionEx((LPOSVERSIONINFO)&v);
Hier der Programmcode:
void CSysInfo::DetectOSType() { BOOL bOSINFOEXWorking=FALSE; OSVERSIONINFO v; ZeroMemory(&v,sizeof(OSVERSIONINFO)); v.dwOSVersionInfoSize=sizeof(OSVERSIONINFO); GetVersionEx((LPOSVERSIONINFO)&v); // <---------------------- hier m_dwWinMajor=v.dwMajorVersion; m_dwWinMinor=v.dwMinorVersion; m_dwBuildNumber=v.dwBuildNumber; if (!IsWindowsNT()) { // Windows 9x/ME. if (m_dwWinMinor==0) { m_sOSType=_T(W95_s); }; if (m_dwWinMinor==10) { m_sOSType=_T(W98_s); }; if (m_dwWinMinor==90) { m_sOSType=_T(WME_s); }; m_sOSType+=v.szCSDVersion; return; }; // Get Service Pack number int n=0,j=-1; CString sSvcPack; TCHAR szNum[10]; sSvcPack=v.szCSDVersion; for (n=1;n<=9;n++) { // VS60 _stprintf(szNum,_T("%d"),n); _stprintf_s(szNum,_T("%d"),n); j=sSvcPack.Find(szNum); if (j>=0) break; }; if (j>=0) m_dwServicePack=n; // Check for OSVERSIONINFOEX-compatibility // It works only on Windows NT 4.0 Service Pack 6 or better if ((m_dwWinMajor>=5) || (m_dwServicePack>=6)) { bOSINFOEXWorking=TRUE; }; if (m_dwWinMajor==4) { // Windows NT 4.0 m_sOSType=_T(NT4_s); } else { if (m_dwWinMajor>=5) { if (m_dwWinMinor==0) { m_sOSType=_T(W2K_s); }; // Windows 2000 if (m_dwWinMinor==1) { m_sOSType=_T(WXP_s); }; // Windows XP }; }; if (bOSINFOEXWorking) { MYOSVERSIONINFOEX osvi; BOOL bOsVersionInfoEx; ZeroMemory(&osvi,sizeof(MYOSVERSIONINFOEX)); osvi.dwOSVersionInfoSize = sizeof(MYOSVERSIONINFOEX); bOsVersionInfoEx=GetVersionEx((LPOSVERSIONINFO)&osvi); if (bOsVersionInfoEx) { if (osvi.wProductType==MY_VER_NT_WORKSTATION) { if ((osvi.dwMajorVersion==5) && (osvi.dwMinorVersion==1)) { // Windows XP if (osvi.wSuiteMask & MY_VER_SUITE_PERSONAL) { m_sOSType+=_T(XHE_s); } else { m_sOSType+=_T(XPR_s); }; }; if ((osvi.dwMajorVersion==5) && (osvi.dwMinorVersion==0)) { // Windows 2000 Professional m_sOSType+=_T(PRO_s); }; if (osvi.dwMajorVersion==4) { // Windows NT 4.0 Workstation m_sOSType+=_T(WKS_s); }; }; if ((osvi.wProductType==MY_VER_NT_SERVER) || (osvi.wProductType==MY_VER_NT_DOMAIN_CONTROLLER)) { if (osvi.dwMajorVersion==5) { if (osvi.wSuiteMask & MY_VER_SUITE_ENTERPRISE) { m_sOSType+=_T(ADV_s); }; if (osvi.wSuiteMask & MY_VER_SUITE_DATACENTER) { m_sOSType+=_T(DTC_s); }; if (osvi.wSuiteMask & MY_VER_SUITE_TERMINAL) { m_sOSType+=_T(TER_s); }; if (osvi.wSuiteMask & MY_VER_SUITE_BACKOFFICE) { m_sOSType+=_T(BOF_s); }; m_sOSType+=_T(SER_s); }; if (osvi.dwMajorVersion==4 && osvi.dwMinorVersion==0) { m_sOSType+=_T(SER_s); }; }; if (osvi.wProductType==MY_VER_NT_DOMAIN_CONTROLLER) { m_sOSType+=_T(DOM_s); }; }; }; if (m_dwServicePack>0) { m_sOSType+=_T(" "); m_sOSType+=v.szCSDVersion; }; }
Hierbei bin ich völlig ratlos was zu tun ist.
Wie kann ich die Funktion GetVersionEx korrekt verwenden oder wie kann ich sie ersetzen?
Danke im Voraus und viele Grüße
Bernd
Antworten
-
Hallo,
es gibt andere Funktionen.
Oder diese hier: https://msdn.microsoft.com/en-us/library/mt723418(v=vs.85).aspx
Gruß Guido
- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Montag, 16. April 2018 09:07
- Als Antwort markiert Ivan DragovMicrosoft contingent staff, Moderator Freitag, 27. April 2018 06:31
Alle Antworten
-
Hallo,
es gibt andere Funktionen.
Oder diese hier: https://msdn.microsoft.com/en-us/library/mt723418(v=vs.85).aspx
Gruß Guido
- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Montag, 16. April 2018 09:07
- Als Antwort markiert Ivan DragovMicrosoft contingent staff, Moderator Freitag, 27. April 2018 06:31
-
Hallo Guido,
danke für Deine Antwort. Ich habe in der Zwischenzeit mit Hilfe Deiner und dieser Links
https://perevoznyk.wordpress.com/2011/11/24/how-to-check-windows-version-in-c/
https://msdn.microsoft.com/en-us/library/windows/desktop/ms724834(v=vs.85).aspx
den Programmcode so geändert:
void CSysInfo::DetectOSType() { // Das Betriebssystem ermitteln OSVERSIONINFOEX osvi; if (IsWindows10(&osvi)) { m_sOSType = _T("Windows 10"); } else if (IsWindows7(&osvi)) { m_sOSType = _T("Windows 7"); m_dwWinMajor = osvi.dwMajorVersion; m_dwWinMinor = osvi.dwMinorVersion; m_dwBuildNumber = osvi.dwBuildNumber; } else if (IsWindowsVista(&osvi)) { m_sOSType = _T("Windows Vista"); m_dwWinMajor = osvi.dwMajorVersion; m_dwWinMinor = osvi.dwMinorVersion; m_dwBuildNumber = osvi.dwBuildNumber; } else if (IsWindowsXP(&osvi)) { m_sOSType = _T("Windows XP"); m_dwWinMajor = osvi.dwMajorVersion; m_dwWinMinor = osvi.dwMinorVersion; m_dwBuildNumber = osvi.dwBuildNumber; } else if (IsWindowsXPSP2(&osvi)) { m_sOSType = _T("Windows XP SP2"); m_dwWinMajor = osvi.dwMajorVersion; m_dwWinMinor = osvi.dwMinorVersion; m_dwBuildNumber = osvi.dwBuildNumber; } else { m_sOSType = _T("Betriebssystem nicht ermittelt!"); ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX)); m_dwWinMajor = osvi.dwMajorVersion; m_dwWinMinor = osvi.dwMinorVersion; m_dwBuildNumber = osvi.dwBuildNumber; } }
!!! ACHTUNG !!! Der neue Programmcode ist noch ungetestet.
Viele Grüße
Bernd