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 convertierfunktionen

    bsp:

    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();
    }
    

Anmelden zum Antworten