Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding > Coding Tutorials
You last visited: Today at 07:05

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[C++] Betriebssystem ermitteln

Discussion on [C++] Betriebssystem ermitteln within the Coding Tutorials forum part of the General Coding category.

Reply
 
Old   #1
 
xNopex's Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
[C++] Betriebssystem ermitteln

Im Grunde ist das Ganze nicht schwer zu realisieren. Zuerst enumerieren wir für uns valide OS systeme durch:

Code:
enum
{
    WIN_2000 = 0, WIN_XP, WIN_VISTA, WIN_7
};
Es sollte klar sein, was hier passiert: WIN_2000 ist nun als 0 definiert, Win_XP als 1, WIN_VISTA als 2 und WIN_7 als 3.

Im folgenden habe ich kurz eine Funktion geschrieben, die das OS gemäß unserer Enumeration als Integer-Wert zurückgibt:

Code:
int GetWinVersion()
{
    OSVERSIONINFO info;
    OSVERSIONINFOEX ex;

    ZeroMemory( &info, sizeof( OSVERSIONINFO ) );
    ZeroMemory( &ex, sizeof( OSVERSIONINFOEX ) );
    info.dwOSVersionInfoSize = sizeof( OSVERSIONINFO );
    ex.dwOSVersionInfoSize = sizeof( OSVERSIONINFOEX );

    GetVersionEx( &info );
    GetVersionEx( ( OSVERSIONINFO * ) &ex );

    if( info.dwMajorVersion == 5 && info.dwMinorVersion == 0 )
        return WIN_2000;

    if( info.dwMajorVersion == 5 && info.dwMinorVersion == 1 )
        return WIN_XP;

    if( info.dwMajorVersion == 6 && info.dwMinorVersion == 0 && ex.wProductType == VER_NT_WORKSTATION )
        return WIN_VISTA;

    if( info.dwMajorVersion == 6 && info.dwMinorVersion == 1 && ex.wProductType == VER_NT_WORKSTATION )
        return WIN_7;

    return -1;
}
Die Infos zum Bestimmen des OS ( dwMajorVersion, dwMinorVersion, wProductType) erhält man aus dem Mekka der WinAPI Programmierung: MSDN.
Hier mal der Link zu den Strukturen:




Wenn du die Links verfolgst, findest du eben auch eine Tabelle vor, die die genauen Werte für die Bestimmung des OS enthält.

Joa und das wärs auch schon. Hier noch mal ein kleiner Beispielcode für die Verwendung der Funktion:

Code:
#include <iostream>
#include <windows.h>

using namespace std;

enum
{
    WIN_2000 = 0, WIN_XP, WIN_VISTA,  WIN_7
};

int GetWinVersion();

int main()
{
    int ver = GetWinVersion();

    switch( ver )
    {
        case -1:
            cout << "Unbekannte Win Version...\n";
            break;
        case WIN_2000:
            cout << "Du hast Win2000\n";
            break;
        case WIN_XP:
            cout << "Du hast WinXP\n";
            break;
        case WIN_VISTA:
            cout << "Du hast WinVISTA\n";
            break;
        case WIN_7:
            cout << "Du hast Win7\n";
            break;
    }
    cin.get();
    return 0;
}


int GetWinVersion()
{
    OSVERSIONINFO info;
    OSVERSIONINFOEX ex;

    ZeroMemory( &info, sizeof( OSVERSIONINFO ) );
    ZeroMemory( &ex, sizeof( OSVERSIONINFOEX ) );
    info.dwOSVersionInfoSize = sizeof( OSVERSIONINFO );
    ex.dwOSVersionInfoSize = sizeof( OSVERSIONINFOEX );

    GetVersionEx( &info );
    GetVersionEx( ( OSVERSIONINFO * ) &ex );

    if( info.dwMajorVersion == 5 && info.dwMinorVersion == 0 )
        return WIN_2000;

    if( info.dwMajorVersion == 5 && info.dwMinorVersion == 1 )
        return WIN_XP;

    if( info.dwMajorVersion == 6 && info.dwMinorVersion == 0 && ex.wProductType == VER_NT_WORKSTATION )
        return WIN_VISTA;

    if( info.dwMajorVersion == 6 && info.dwMinorVersion == 1 && ex.wProductType == VER_NT_WORKSTATION )
        return WIN_7;

    return -1;
}
xNopex is offline  
Thanks
4 Users
Old 10/04/2011, 16:52   #2
 
Logexx's Avatar
 
elite*gold: 0
Join Date: Aug 2011
Posts: 10
Received Thanks: 0
THX Nice!
Logexx is offline  
Old 10/04/2011, 21:51   #3
 
elite*gold: LOCKED
Join Date: Dec 2009
Posts: 434
Received Thanks: 396
Da die meisten die sowas hier einbauen/benutzen auf diesen Board mit D3D Menu's Arbeiten ,würde ich es persönlich eher über char ausgeben.

Code:
char cWin   [50] =  {NULL};


		 char GetWinVersion()
{

    OSVERSIONINFO info;
    OSVERSIONINFOEX ex;

    ZeroMemory( &info, sizeof( OSVERSIONINFO ) );
    ZeroMemory( &ex, sizeof( OSVERSIONINFOEX ) );
    info.dwOSVersionInfoSize = sizeof( OSVERSIONINFO );
    ex.dwOSVersionInfoSize = sizeof( OSVERSIONINFOEX );

    GetVersionEx( &info );
    GetVersionEx( ( OSVERSIONINFO * ) &ex );

    if( info.dwMajorVersion == 5 && info.dwMinorVersion == 0 )
	{sprintf(cWin,"WIN_2000");}

    if( info.dwMajorVersion == 5 && info.dwMinorVersion == 1 )
	{sprintf(cWin,"WIN_XP");}

    if( info.dwMajorVersion == 6 && info.dwMinorVersion == 0 && ex.wProductType == VER_NT_WORKSTATION )
	{sprintf(cWin,"WIN_VISTA");}

    if( info.dwMajorVersion == 6 && info.dwMinorVersion == 1 && ex.wProductType == VER_NT_WORKSTATION )
	{sprintf(cWin,"WIN_7");}

	sprintf(cWin,"Error");
}
Habe das schnell ohne C umgeschrieben.
KingClem™ is offline  
Old 10/05/2011, 17:55   #4
 
Brutalon's Avatar
 
elite*gold: 0
Join Date: Jul 2011
Posts: 995
Received Thanks: 471
Das hattest du damals auch in deinem Irrlicht Menu :-)
Brutalon is offline  
Old 10/15/2011, 12:42   #5


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
Quote:
Originally Posted by KingClem™ View Post
Da die meisten die sowas hier einbauen/benutzen auf diesen Board mit D3D Menu's Arbeiten ,würde ich es persönlich eher über char ausgeben.

Code:
char cWin   [50] =  {NULL};


		 char GetWinVersion()
{

    OSVERSIONINFO info;
    OSVERSIONINFOEX ex;

    ZeroMemory( &info, sizeof( OSVERSIONINFO ) );
    ZeroMemory( &ex, sizeof( OSVERSIONINFOEX ) );
    info.dwOSVersionInfoSize = sizeof( OSVERSIONINFO );
    ex.dwOSVersionInfoSize = sizeof( OSVERSIONINFOEX );

    GetVersionEx( &info );
    GetVersionEx( ( OSVERSIONINFO * ) &ex );

    if( info.dwMajorVersion == 5 && info.dwMinorVersion == 0 )
	{sprintf(cWin,"WIN_2000");}

    if( info.dwMajorVersion == 5 && info.dwMinorVersion == 1 )
	{sprintf(cWin,"WIN_XP");}

    if( info.dwMajorVersion == 6 && info.dwMinorVersion == 0 && ex.wProductType == VER_NT_WORKSTATION )
	{sprintf(cWin,"WIN_VISTA");}

    if( info.dwMajorVersion == 6 && info.dwMinorVersion == 1 && ex.wProductType == VER_NT_WORKSTATION )
	{sprintf(cWin,"WIN_7");}

	sprintf(cWin,"Error");
}
Habe das schnell ohne C umgeschrieben.
Nur dass deine Funktion fehlerhaft ist und es deutlich schöner wäre, wenn man die Strings in einem Array hätte und den Enumerationswert einfach als Index nutzt, als jeden String in dem if-else-Konstrukt zu kopieren.

Außerdem wäre mir neu, dass man das im Rahmen von D3D Entwicklung als String braucht.
MrSm!th is offline  
Thanks
1 User
Old 11/11/2011, 15:41   #6
 
Kraizy​'s Avatar
 
elite*gold: 0
The Black Market: 471/0/0
Join Date: Apr 2010
Posts: 9,696
Received Thanks: 1,810
Quote:
Originally Posted by Hacker_Elite View Post
Cod MW 3 installer download cracked:
Hast du dich verlaufen? Keiner will deinen Keylogger haben..
Kraizy​ is offline  
Old 11/11/2011, 21:39   #7
 
elite*gold: 0
Join Date: Apr 2006
Posts: 6,597
Received Thanks: 1,830
@KingClem™
wtf lol was hat das mit d3d entwicklung zu tun?
Medix is offline  
Reply


Similar Threads Similar Threads
[Delphi] Aktives Fenster/Programm ermitteln
08/07/2010 - General Coding - 4 Replies
Hi ihrs, ich weiß, nur wenige benutzen diese Sprache (auch wenn ich sie super finde^^). Aber vllt kennt sich dennoch wer damit n bisl aus. Mein Problem: Ich programier grad einen Passwort Manager. Der 1. Teil (Also der Anmeldeteil für den Manager und der Kryptographoie-Teil für die Passwörter) ist fertig. Nun soll der Manager aber auch noch das richtige Passwort in ein Programm einfügen. Der Benutzer muss zuerst den Exe-Namen des Programms mit seinen Login-Daten eingeben. Damit kann ich...
Last chaos Base adresse für bot ermitteln geht nicht mehr !!!
05/23/2010 - Last Chaos - 8 Replies
Hi ich hab mehrmals versucht die neue base adresse für den ultra bot zu ermitteln (mit cheat engine) aber irgendwie geht das nciht mehr. Hat da jemand ne Ahnung wieso??? oder weis vieleicht jemand einen anderen Weg. mfG IceColdKiller007
2 Betriebssystem .. ?
03/12/2010 - Technical Support - 9 Replies
Hey, ich habe ein Problem mit einem Linux Root den ich eigentlich für ts3,2 benutze, jetzt aber für einige andere Programme, die auf Linux nicht benutzbar sind, benutzen will. Meine Frage : kann ich irgendwie das Betriebssystem beibehalten & trotzdem windows oder ähnliches drauf ausführen ? mag bescheuert klingen kommt aber eher daher, das ich keine Ahnung habe wie ich es sonst ausdrücken sollte :rolleyes: lg Tj
Homepages ermitteln!!!
03/11/2009 - Off Topic - 13 Replies
Hi leute hab ne nette seite gefunden, die den preis von websiten ermitellt! Und elitepvpers ist sage und schreibe: $358400.8 USD Wert !! ohne scheiß!
Wie kann man die Dropraten ermitteln?
11/30/2007 - Flyff - 3 Replies
Hallo Nachdem ich raus fand wie man die einzelnen Items per Ressource manager raussucht usw. wollte ich fragen welche zahlen bzw. punkte für die Dropchance stehen bzw. kann jemand ein kleines tut posten wie man das erfahren kann bzw ausrechnen falls es geht? MfG Und danke für jede hilfe.



All times are GMT +2. The time now is 07:05.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.