Windows version ermitteln erweitern (aus FAQ)



  • Du musst nur die letzte switch-Anweisung um einen case 2 : erweitern.



  • 👍
    Danke! Hat Super funktioniert. Wüsste nicht das es so einfach ist.



  • Gern geschehen. Suchmaschinen benutzen ist einfach.

    Und wehe, du kommst bei Longhorn oder einer anderen neuen Windowsversion wieder hier angedackelt! 😉



  • @koh
    könntest du nicht den ganzen Source der Funktion posten, damit jemand das FAQ aktualisieren kann. Ich brauch die selbe Funktion in etwa einem Monat...



  • Jansen schrieb:

    Gern geschehen. Suchmaschinen benutzen ist einfach.

    Und wehe, du kommst bei Longhorn oder einer anderen neuen Windowsversion wieder hier angedackelt! 😉

    Nein jetzt weiss ich ja wie es geht!

    // liefert den namen des betriebssystems zurück 
    AnsiString GetOperationSystemName() 
    { 
      OSVERSIONINFO osinfo; 
    
      osinfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); 
    
      if (!GetVersionEx(&osinfo)) return "Unbekannt"; 
    
      int major = osinfo.dwMajorVersion; 
      int minor = osinfo.dwMinorVersion; 
      int build = osinfo.dwBuildNumber; 
    
      switch(osinfo.dwPlatformId) 
      { 
        case VER_PLATFORM_WIN32s        : return "Windows 3.1"; 
    
        case VER_PLATFORM_WIN32_WINDOWS : 
    
          if (major == 4) 
          { 
            if (minor == 0) 
            { 
              switch(LOWORD(build)) 
              { 
                case  951 : return "Windows 95A (OSR 1.0)"; 
                case 1111 : return "Windows 95B (OSR 2.0)"; 
                default   : return "Windows 95"; 
              } 
            } 
    
            if (minor == 3) 
            { 
              switch(LOWORD(build)) 
              { 
                case 1212 : return "Windows 95B (OSR 2.1)"; 
                case 1214 : return "Windows 95C (OSR 2.5)"; 
                default   : return "Windows 95"; 
              } 
            } 
    
            if (minor == 10) 
            { 
              switch(LOWORD(build)) 
              { 
                case 1998 : return "Windows 98 (Final Release)"; 
                case 2000 : 
                case 2222 : return "Windows 98 (Second Edition)"; 
                default   : return "Windows 98"; 
              } 
            } 
    
            if (minor == 90) 
            { 
              switch(LOWORD(build)) 
              { 
                case 3000 : return "Windows ME"; 
                default   : return "Windows ME"; 
              } 
            } 
          } 
    
        case VER_PLATFORM_WIN32_NT      : 
    
          if (major == 3) return "Windows NT 3.51"; 
          if (major == 4) return "Windows NT 4.0"; 
    
          if (major == 5) 
          { 
            switch(minor) 
            { 
              case 0 : if (build == 2195) return "Windows 2000"; 
    
              case 1 : 
              { 
                switch(build) 
                { 
                  case 2505 : return "Windows XP"; 
                  case 2600 : return "Windows XP (Service Pack 1)"; 
                } 
              } 
              case 2: if (minor == 2) return "Windows Server 2003";
            } 
          } 
      } 
    
      return "Unbekannt"; 
    }
    


  • danke 👍
    werd ich grad speichern



  • das if (minor == 2) kannste aber weglassen, da das schon im switch abgefragt wird!

    besser wäre es, wenn du mal das ergebnis von GetVersionEx, speziell die major, minor, release und build nummer, mal angeben tätest. denn sonst gibts früher oder später ärger mit neuen versionen...



  • Habe den case2 jetzt auf die Build Nr. geändert. Funktioniert auch alles. Falls noch Versionen vergessen wurden oder ihr noch ander Buildnummern habe sagt bitte bescheid. Möchte gerne alle Versionen erkennen können.

    Von Windows XP 64 gint es noch keine Final oder?

    case 2 :
    {
    if (minor == 2)
    switch(build)
    {
    case 3790: return "Windows Server 2003";
    }
    }



  • Wie erkenne ich jetzt bei WINDOWS2000 welches service pack installiert ist ???



  • Siehe wServicePackMajor und wServicePackMinor in OSVERSIONINFOEX.



  • Ihr könnt mir doch sicher auch noch Sagen wie ich die Sprache des Betriebsystem auslesen kann!?

    Stefan



  • @seiermeier was meinst Du ?
    😕

    Ob RUSSISCh , deutsch oder Türkisch ???



  • Was mache ich falsch ???

    OSVERSIONINFOEXW infEX;

    WORD SP = infEX.wServicePackMajor;

    SP ist 22916

    (Ich habe SP 3 )

    Major version number of the latest Service Pack installed on the system. For example, for Service Pack 3, the major version number is 3. If no Service Pack has been installed, the value is zero.



  • Wie kommst du auf OSVERSIONINFOEXW?



  • Einfacher ist :

    _OSVERSIONINFO
    TCHAR szCSDVersion[128];

    da steht es gleich im Klartext drinn . 🙄



  • Immerhin gut zu sehen, dass du weitergelesen hast. 😉

    Allerdings bekommst du bei szCSDVersion halt immer die Langversion, auch wenn du in deinem Programm vielleicht nur Platz für ein 'SP 3' hast. Ganz davon abgesehen, dass sich "Service Pack n" auch schlecht in einem switch/case-Konstrukt wie in o.g. Beispielen einsetzen lässt.

    Und was war nun mit deinem OSVERSIONINFOEXW?



  • nas was denn sonst?



  • Hier noch ein sehr guter Link:

    http://www.codeguru.com/Cpp/W-P/system/systeminformation/article.php/c8973/

    Viel Erfolg

    Michael


Anmelden zum Antworten