Code verbessern...
-
Hab ein Code geschrieben der die Windows Version als string zurückgibt:
string OS() { string pack; OSVERSIONINFO version; version.dwOSVersionInfoSize=sizeof(version); if (GetVersionEx(&version)) { if (version.dwPlatformId == VER_PLATFORM_WIN32s) //cout <<"Win32 "; return "Win32 "; else if (version.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) { if(version.dwMinorVersion == 0 && (strchr(version.szCSDVersion,'B')==NULL) && (strchr(version.szCSDVersion,'C')==NULL)) //cout <<"Windows 95 "; return "Windows 95 "; else if(version.dwMinorVersion == 0&& (strchr(version.szCSDVersion,'B')!=NULL)) //cout <<"Windows 95 OSR 2 "; return "Windows 95 OSR 2 "; else if(version.dwMinorVersion == 0 && (strchr(version.szCSDVersion,'C')!=NULL)) //cout <<"Windows 95 OSR 2.5 "; return "Windows 95 OSR 2.5 "; else if(version.dwMinorVersion == 10 && (strchr(version.szCSDVersion,'A')==NULL)) //cout <<"Windows 98 "; return "Windows 98 "; else if (version.dwMinorVersion == 10 && (strchr(version.szCSDVersion,'A')!=NULL)) //cout <<"Windows 98 Second Edition "; return "Windows 98 Second Edition "; } else if (version.dwPlatformId == VER_PLATFORM_WIN32_NT) { if (version.dwMinorVersion == 90) //cout <<"Windows Millenium Edition "; //return "Windows Millenium Edition "; pack += "Windows Millenium Edition "; else if (version.dwMajorVersion==5) { // entweder 2000 / XP / Server 2003 family if (version.dwMinorVersion == 0) //cout << "Windows 2000 "; //return "Windows 2000 "; pack += "Windows 2000 "; if (version.dwMinorVersion == 1) //cout << "Windows XP "; //return "Windows XP "; pack += "Windows XP "; if (version.dwMinorVersion == 2) //cout << "Windows Server 2003 "; //return "Windows Server 2003 "; pack += "Windows Server 2003 "; } else if(version.dwMajorVersion == 6) { //cout << "Windows Longhorn "; //return "Windows Vista "; pack += "Windows Vista "; } } else { //cout <<"Windows Version unbekannt "; return "Windows Version unbekannt "; } // cout <<version.dwMajorVersion<<"."<<version.dwMinorVersion<<"." // <<(version.dwBuildNumber & 0xffff)<< " " <<version.szCSDVersion<<endl; // Convert cvt; pack += cvt.IntegerToString(version.dwMajorVersion); pack += "."; pack += cvt.IntegerToString(version.dwMinorVersion); pack += "."; pack += cvt.IntegerToString((version.dwBuildNumber & 0xffff)); pack += " "; pack += version.szCSDVersion; return pack; } else //cout <<"Die Windows Version kann nicht herausgefunden werden."<<endl; return "Die Windows Version kann nicht herausgefunden werden. "; }Was kann man hier noch verbessern?
-
- switches statt if verwenden. da diese afaik besser optimiert werden können.
- wenn du if bleiben möchtest dann bauch mehr else if ein
- variabeln erst instanzieren wenn sie benötigt werden (siehe zb: string pack;)
- wenn schon c++ dann stringstreams ist auf jeden fall besser als irgendwelche convertierfunktionenbsp:
std::string Win32::GetOS() { std::ostringstream sstrOS; OSVERSIONINFO os; ZeroMemory(&os, sizeof(OSVERSIONINFO)); os.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); if(GetVersionEx(&os)) { switch(os.dwPlatformId) { case VER_PLATFORM_WIN32_NT: sstrOS << "Microsoft Windows NT"; break; // usw usw default: return std::string("Unkown Microsoft Windows Platform"); } sstrOS << " " << os.dwMajorVersion; sstrOS << "." << os.dwMinorVersion; sstrOS << " Build: " << (os.dwBuildNumber & 0xFFFF); } else return std::string("Unkown Microsoft Windows Platform"); return sstrOS.str(); }