mikrocontroller.net

Forum: PC-Programmierung Mit C++ feststellen welche Betriebsystem


Autor: Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Gibt es unter Borland Builder C++ die Möglichkeit festzustellen, welche
Betriebssystem gerade läuft?
Es muss bestimmt eine API Funktion geben die dies ermöglicht oder?

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Win32-API-Funktion GetVersionEx machts:


osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO)
GetVersionEx (&osvi);
bIsWindows98orLater =
   (osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) &&
   ( (osvi.dwMajorVersion > 4) ||
   ( (osvi.dwMajorVersion == 4) && (osvi.dwMinorVersion > 0) ) );

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Rufus!

Hei Danke für die Info!
Leider funktioniert dies bei mir nicht.
Kannst du mir ein Beispiel geben?

Gruß

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
am besten doch einfach im msdn nachlesen :)
(rufus' beispiel scheint übrigens auch von dort zu stammen)

http://msdn.microsoft.com/library/default.asp?url=...

du solltest auch dem link auf der seite zur struktur OSVERSIONINFO
folgen.

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Leider funktioniert dies bei mir nicht."

Ich liebe so präzise Aussagen. Was soll ich mir daraus
zurechtreimen?

Dank an Thomas für die Präzisierung; ich hatte allerdings mit der
Offline-Version der MSDN gearbeitet und konnte daher keinen Link posten
(was hilft euch ein Link auf einen lokalen Netzwerkserver?).

Die MSDN-Dokumentation ist (mittlerweile*) ziemlich gut, da auch
Rahmenbedingungen (welche Headerdatei muss eingebunden werden, welche
Importlibrary muss verwendet werden etc.) beschrieben werden.


*) war ein langer Leidensweg. Ich arbeite seit über zwölf Jahren damit.

Autor: Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok ich habe mal auf der MSN Seite die Info daz gelesen.
So wie es aussieht funktioniert diese Funktion nicht unter Windows95,
Windows98 und WIndowsME.

Ich brauche aber eine Funktion womit ich feststellen kann, welches
Betriebssystem gerade aktiv ist.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Requires Windows XP, Windows 2000 Professional, Windows NT Workstation
3.5 and later, Windows Me, Windows 98, or Windows 95."

?

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenns nicht klappt, gibts noch ne andere möglichkeit:
startbild suchen und texterkennung drüber laufen lassen.

bei nt/2k/xp ist das startbild (wenn ich mich recht erinnere) eine
ressource in der datei ntoskrnl.exe, welche sich im system32
verzeichnis befinden sollte, bei den anderen versionen war es ne datei
namens logo.sys im windows verzeichnis.

Autor: Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Unterstützung!

Leider bringt mir das jetzt nicht weiter.
Gibt es keine gemeinsame API Funktion unter WinNT, Win2000, Win98,
WinME womit ich feststellen kann, womit das System gerade läuft?

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Dokumentation zufolge funktioniert die von mir genannte Funktion
auch unter den 9x-Varianten von Windows.

Was exakt ist denn das Fehlerverhalten? Du schreibst nur "funktioniert
nicht" - was soll diese extrem präzise Formulierung bedeuten? Kann Dein
Compiler den Code nicht übersetzen, gibt's 'ne Exception, gibt die
Funktion 0 zurück, gibt's 'nen Bluescreen oder was?

Autor: Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Den Code habe ich bei mir in Borland Builder C++ implementiert.
Sorry leider weiss ich nicht mehr was der Compiler als Fehlermeldung
angegeben hat.

Zudem verstehe ich den Code nicht!

osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO)
GetVersionEx (&osvi);
bIsWindows98orLater =
   (osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) &&
   ( (osvi.dwMajorVersion > 4) ||
   ( (osvi.dwMajorVersion == 4) && (osvi.dwMinorVersion > 0) ) );

Welcher Wert wird dann zurückgegeben?
Welcher Wert entspricht dann dem aktiven Betriebssystem?

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Etwas ausführlicher als das MS'sche Code-Fragment:

  OSVERSIONINFO osvi;

  memset(&osvi, 0, sizeof (OSVERSIONINFO));
  osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO)

  GetVersionEx(&osvi);


Das ist bereits die ganze Versionsabfrage.

  BOOL bIsWindows98orLater =
   (osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) &&
   ( (osvi.dwMajorVersion > 4) ||
   ( (osvi.dwMajorVersion == 4) && (osvi.dwMinorVersion > 0) ) );

Das ist eine Auswertung der von GetVersionEx gelieferten Struktur -
bIsWindows98orLater wird dem Namen entsprechend gesetzt.

Wenn Du Dir die MSDN-Dokumentation, zu der Thomas erfreulicherweise
einen Link gepostet hat, mal durchläsest, könntest Du Dir die Funktion
der einzelnen Member der Struktur OSVERSIONINFO ansehen.

Autor: Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok jetzt habe ich den Code einigermaßen kappiert.
BOOL bIsWindows98orLater --> in desem stehet dann drin 1 oder 0.
Oder?

Welcher Wert erscheint wenn ich WinME oder Win2000 oder WinXP oder
WinNT benutze?

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
TRUE. Also ein Wert != 0.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.