Betriebssystem ermitteln



  • Hallo Leute, kann mir mal jemand erklähren, wie ich das Betriebssystem ermitteln kann? Ich kenne zwar das ganze mit OSVERSION usw. aber da kriegt man zwar den Plattform - type sowie die major und minor versionsnummer raus, aber ob es sich nun um Win95 Win98 WinME btz. WinNT, Win2000 oder WinXP handelt, weiss ich trotzdem nicht...

    Gruss Ishildur



  • In der Hilfe sind doch Tabellen mit den benötigten Infos.



  • In welchen Tabellen denn ??
    Ich habe die WinAPI Doku durchgesehen, aber da fand ich keine Tabellen, die mir sage, welche Versionen welches Betriebssystem ist?? Kannst du mir einen Link posten?





  • Viel Spass damit. 😃 😃

    void GetWindowVersion()
    {
    	char* system; 
    	char* typ; 
    	OSVERSIONINFOEX osvi; 
    	BOOL bOsVersionInfoEx; 
    
    	ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX)); 
    	osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); 
    
    	if(!(bOsVersionInfoEx = GetVersionEx((OSVERSIONINFO *) &osvi)) ) 
    	{ 
    		osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO); 
            GetVersionEx ((OSVERSIONINFO *) &osvi);  
        } 
    
        switch(osvi.dwPlatformId) 
        { 
        case VER_PLATFORM_WIN32_NT: 
            if (osvi.dwMajorVersion <= 4) 
                system = "Microsoft Windows NT--"; 
    
            if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 ) 
                system = "Microsoft Windows 2000--"; 
    
            if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 ) 
                system = "Microsoft Windows XP--"; 
    
            HKEY hKey; 
            char szProductType[80]; 
            DWORD dwBufLen; 
    
            RegOpenKeyEx( HKEY_LOCAL_MACHINE,"SYSTEM\\CurrentControlSet\\Control\\ProductOptions", 
                0,KEY_QUERY_VALUE, &hKey); 
            RegQueryValueEx( hKey, "ProductType",NULL,NULL,(LPBYTE) szProductType, &dwBufLen); 
            RegCloseKey (hKey); 
            if (lstrcmpi("WINNT", szProductType) == 0) 
                typ = "Workstation"; 
            if (lstrcmpi("SERVERNT",szProductType) == 0) 
                typ = "Server"; 
    
        case VER_PLATFORM_WIN32_WINDOWS: 
            if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0) 
            { 
                system = "Microsoft Windows 95--"; 
                if (osvi.szCSDVersion[1] == 'C') 
                    typ = "OSR2"; 
            } 
    
            if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10) 
            { 
                system = "Microsoft Windows 98--"; 
                if (osvi.szCSDVersion[1] == 'A') 
                    typ = "Second Edition"; 
            } 
    
            if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90) 
            { 
                system = " Mircosoft Windows ME--"; 
            } 
            break; 
    
        case VER_PLATFORM_WIN32s: 
            system = "Micorsoft Win32s"; 
            break; 
        }
    
    	std::cout<<system<<std::endl;
    
    }
    


  • Warum so kompliziert?
    Einfach "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ProductName" auslesen und fertig



  • Also bei mir finde ich ProductName nicht, weder als Schlüssel noch als Datum. [XP Home]



  • Auch unter XP Prof gibt es den Schlüssel nicht....



  • Hepi schrieb:

    Auch unter XP Prof gibt es den Schlüssel nicht....

    loooooooooooool



  • Hast Du 'n Problem?

    Den Schlüssel HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ProductName gibt es unter WindowsXP Professional nicht!

    ...weil es nämlich unter HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProductName zu finden ist...

    Spaßvogel!



  • ich hab das nur gemacht, weil das jemand schon für die home version geschrieben hat. das wird wohl bei der professional edition nicht anders sein



  • prof schrieb:

    ich hab das nur gemacht, weil das jemand schon für die home version geschrieben hat. das wird wohl bei der professional edition nicht anders sein

    ..ja, weil sich Home und Professional ja überhaupt nicht voneinander unterscheiden, gell?

    Spaßvogel!



  • Hepi schrieb:

    prof schrieb:

    ich hab das nur gemacht, weil das jemand schon für die home version geschrieben hat. das wird wohl bei der professional edition nicht anders sein

    ..ja, weil sich Home und Professional ja überhaupt nicht voneinander unterscheiden, gell?

    Spaßvogel!

    Doch, aber doch nicht in solchen Sachen. *loooooooool*



  • Na, dann schau doch mal bei
    HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0
    nach, bzw. frage die Leute hier, was sie dort unter dem Schlüssel
    ProcessorNameString stehen haben.

    Ich WETTE mit Dir das es hier Leute gibt, bei denen existiert der Schlüssel nicht mal, selbst bei absolut gleichem Betriebssystem!

    ...aber in solchen Sachen sind ja alle gleich.... *kopfschüttel*



  • Davon ab: Wer zur Ermittlung des System-Version die Registry direkt befragt, macht sich ohnehin die Hose mit der Kneifzange zu. 😛


Anmelden zum Antworten