Betriebssystem ermitteln
Betriebssystem ermitteln
Hallo, ich habe ein Problem...
ich möchte gern beim start meines programmes das Betriebssystem herausfinden, auf welchem ich meine applikation starte.
Gibt es eine Möglichkeit sich das Betriebssystem geben zu lassen und dazu auch noch die richtige version.
wie zum Beispiel:
OS=Windows, Version=XP
oder sowas in dieser Art?
ich würde gern für mein programm verschiedene styles laden, welche vom Betriebssystem abhängig sein sollen.
ich möchte gern beim start meines programmes das Betriebssystem herausfinden, auf welchem ich meine applikation starte.
Gibt es eine Möglichkeit sich das Betriebssystem geben zu lassen und dazu auch noch die richtige version.
wie zum Beispiel:
OS=Windows, Version=XP
oder sowas in dieser Art?
ich würde gern für mein programm verschiedene styles laden, welche vom Betriebssystem abhängig sein sollen.
Welches betriebssystem läuft, das kannst du per präprozessor abfragen, alle möglichen betriebssysteme findest du ziemlich am ende der seite!
http://pronix.linuxdelta.de/C/standard_ ... g_13.shtml
http://pronix.linuxdelta.de/C/standard_ ... g_13.shtml
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
... oder einfach mal die Qt Doku anschauen: http://doc.trolltech.com/4.4/qsysinfo.html
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
ich danke euch für eure vorschläge, aber diese Möglichkeit benutze ich schon. Ich wollte eigentlich wissen, ob es eine andere Lösung gibt. Ich möchte nicht unbedingt auf jedes Betriebssystem testen, welches es ist, sondern gleich, vielleicht über ne bestimmte Methode wissen auf welchem ich arbeite. Wahrscheinlich scheint es das nicht zu geben... ich versuche mein Glück erstmal so...trotzdem nochmal vielen dank...
Doch das gibt es.
Da gibt es noch einige spezifischere und natürlich auch für Mac. Musst du mal gucken.
Ich wollte das schon vorher geschrieben haben, aber ich hatte nicht den Eindruck, dass es das ist was du suchst.
Code: Alles auswählen
#ifdef Q_OS_WIN32
#ifdef Q_OS_Unix
Ich wollte das schon vorher geschrieben haben, aber ich hatte nicht den Eindruck, dass es das ist was du suchst.
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Wobei auch diese Lösung nicht wirklich funktioniert.
Du kannst ein Programm unter Win XP kompilieren, danach aber auf nem Win Vista ausführen. Dann zeigt dein Programm trotzdem XP an, da die Präprozessordirektiven vor der Kompilierung ausgewertet werden, und während der Laufzeit dann nicht mehr geändert werden können.
Wirst wohl nicht drum rum kommen, da einen Zwischenweg zu gehen.
Du kannst ein Programm unter Win XP kompilieren, danach aber auf nem Win Vista ausführen. Dann zeigt dein Programm trotzdem XP an, da die Präprozessordirektiven vor der Kompilierung ausgewertet werden, und während der Laufzeit dann nicht mehr geändert werden können.
Wirst wohl nicht drum rum kommen, da einen Zwischenweg zu gehen.
Für Windows gäbe es das hier.... is aber net wirklich zufriedenstellend....
geklaut vonhttp://www.cplusplus.happycodings.com/c ... ode19.html
Code: Alles auswählen
Get the OS version on your PC
#include <windows.h>
#include <iostream>
#include <dos.h>
#include <string.h>
int main(void)
{
OSVERSIONINFO osver;
osver.dwOSVersionInfoSize = sizeof(osver);
if (GetVersionEx(&osver))
{
if (osver.dwPlatformId == VER_PLATFORM_WIN32s)
cout <<"Win32 ";
else if (osver.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
{
if (osver.dwMinorVersion == 0 && (strchr(osver.szCSDVersion,'B') == NULL)
&& (strchr(osver.szCSDVersion,'C') == NULL))
cout <<"Windows 95 ";
else if (osver.dwMinorVersion == 0 && (strchr(osver.szCSDVersion,'B') != NULL))
cout <<"Windows 95 OSR 2 ";
else if (osver.dwMinorVersion == 0 && (strchr(osver.szCSDVersion,'C') != NULL))
cout <<"Windows 95 OSR 2.5 ";
else if (osver.dwMinorVersion == 10 && (strchr(osver.szCSDVersion,'A') == NULL))
cout <<"Windows 98 ";
else if (osver.dwMinorVersion == 10 && (strchr(osver.szCSDVersion,'A') != NULL))
cout <<"Windows 98 Second Edition ";
else if (osver.dwMinorVersion == 90)
cout <<"Windows Millenium Edition ";
else
cout<<"Unknown Windows ";
}
else if (osver.dwPlatformId == VER_PLATFORM_WIN32_NT)
cout <<"Windows NT ";
cout <<osver.dwMajorVersion<<"."<<osver.dwMinorVersion<<"."
<<(osver.dwBuildNumber & 0xffff)<<osver.szCSDVersion<<endl;
}
else
{
cout <<"Cannot gain version information."<<endl;
}
system("pause");
return 0;
}
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
-
androphinx
- Beiträge: 170
- Registriert: 26. Januar 2009 09:19
- Wohnort: 127.0.0.2
weil ich das bis eben noch net kannte
aber das es so Umständlich sein muss das betriebssystem rauszufinden
Was geben die Fkts zurück wenn ich das falsche BS abfrage?
mit
da sehe ich kein QSysInfo::NoWindows
Wie erkenne ich denn das ich mich nicht auf dem abgefragten BS befnde?
aber das es so Umständlich sein muss das betriebssystem rauszufinden
Was geben die Fkts zurück wenn ich das falsche BS abfrage?
Code: Alles auswählen
WinVersion QSysInfo::windowsVersion () This enum provides symbolic names for the various versions of the Windows operating system. On Windows, the QSysInfo::WindowsVersion variable gives the version of the system on which the application is run.
MS-DOS-based versions:
Constant Value Description
QSysInfo::WV_32s 0x0001 Windows 3.1 with Win 32s
QSysInfo::WV_95 0x0002 Windows 95
QSysInfo::WV_98 0x0003 Windows 98
QSysInfo::WV_Me 0x0004 Windows Me
NT-based versions:
Constant Value Description
QSysInfo::WV_NT 0x0010 Windows NT
QSysInfo::WV_2000 0x0020 Windows 2000
QSysInfo::WV_XP 0x0030 Windows XP
QSysInfo::WV_2003 0x0040 Windows Server 2003
QSysInfo::WV_VISTA 0x0080 Windows Vista
CE-based versions:
Constant Value Description
QSysInfo::WV_CE 0x0100 Windows CE
QSysInfo::WV_CENET 0x0200 Windows CE .NET
QSysInfo::WV_CE_5 0x0300 Windows CE 5.x
QSysInfo::WV_CE_6 0x0400 Windows CE 6.x
The following masks can be used for testing whether a Windows version is MS-DOS-based, NT-based, or CE-based:
Constant Value Description
QSysInfo::WV_DOS_based 0x000f MS-DOS-based version of Windows
QSysInfo::WV_NT_based 0x00f0 NT-based version of Windows
QSysInfo::WV_CE_based 0x0f00 CE-based version of Windows
da sehe ich kein QSysInfo::NoWindows
Wie erkenne ich denn das ich mich nicht auf dem abgefragten BS befnde?
AuE hat geschrieben:
da sehe ich kein QSysInfo::NoWindows
Code: Alles auswählen
#ifdef Q_OS_WIN32
// toString(QSysInfo::WindowsVersion)
#elif Q_OS_Unix
// uname -sr
#elif Q_OS_Mac
// toString(QSysInfo::MacVersion)
#endif