IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

Indication d'OS ?


Sujet :

MFC

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 10
    Points : 5
    Points
    5
    Par défaut Indication d'OS ?
    int GetOs()
    {
    OSVERSIONINFO osvi;

    osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
    GetVersionEx( &osvi );

    if( osvi.dwPlatformId == VER_PLATFORM_WIN32_NT )
    return DIJ_OS_WINNT;
    else if( osvi.dwPlatformId == VER_PLATFORM_WIN32s )
    return DIJ_OS_WIN31;
    else if( osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS )
    {
    if( osvi.dwMinorVersion == 0 )
    return DIJ_OS_WIN95;
    else if( osvi.dwMinorVersion > 0 )
    return DIJ_OS_WIN98;
    }
    return DIJ_OS_INCONNU;
    }

    Bonjour,

    voici une fonction qui me permet de récupérer l'OS sur lequel je suis.
    Cela fonctionne correctement tant que je suis sous Windows 95 - 98 - ou NT, mais cela ne fonctionne pas sous Windows XP.
    En effet, ce programme a été créé alors que WinXP n'existait pas encore, et j'ai l'impression que le prog. passe dans le code pour Win98.

    Quelqu'un sait il quelle valeur correspond à Windows XP, ou quelle est l'erreur dans ce code ?

    Merci d'avance.

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    dans le cas de xp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    //--------------------------------------------------------------------------------
    BOOL IsWindowsXP()
    {
        OSVERSIONINFOEX osvi;
        BOOL bOsVersionInfoEx;
     
       // Try calling GetVersionEx using the OSVERSIONINFOEX structure.
       //
       // If that fails, try using the OSVERSIONINFO structure.
       ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
       osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
     
       if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) )
       {
          // If OSVERSIONINFOEX doesn't work, try OSVERSIONINFO.
          osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
          if (! GetVersionEx ( (OSVERSIONINFO *) &osvi) ) 
             return FALSE;
       }
       if(osvi.dwPlatformId==VER_PLATFORM_WIN32_NT)
       {      
             if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 )
                return TRUE;
       }            
       return FALSE; 
    }

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    J'ai utilisé le code qui m'a été montré, mais quand j'utilise le deboggueur, je me rends compte que je passe dans la si pour Windows 98...

    Etrange, non ?

    Du coup, ca me fonctionne pas forcément...

    Quelqu'un a une idée ?

    Merci

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    ça renvoie true pour win98 ?
    ça m'etonne montre moi ton code avec des balises de code cette fois ci !

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Oui...

  6. #6
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    ma fonction ou ta fonction modifiee ?

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    int GetOs()
    {
    	OSVERSIONINFOEX	osvi;
     
    	osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
    	if(!GetVersionEx((OSVERSIONINFO *)&osvi))
    	{
    		osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
    		GetVersionEx((OSVERSIONINFO *)&osvi);
    	}
     
    	if(osvi.dwPlatformId==VER_PLATFORM_WIN32_NT)
    		return DIJ_OS_WINNT;
    	else if(osvi.dwPlatformId==VER_PLATFORM_WIN32s)
    		return DIJ_OS_WIN31;
    	else if(osvi.dwPlatformId==VER_PLATFORM_WIN32_WINDOWS)
    	{
    		if(osvi.dwMinorVersion==0)
    			return DIJ_OS_WIN95;
    		else if(osvi.dwMinorVersion>0)
    			return DIJ_OS_WIN98;
    	}
    	return DIJ_OS_INCONNU;
    }
    Voici ce que j'ai écrit...

  8. #8
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    moi je ferais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    int GetOs()
    {
        OSVERSIONINFOEX osvi;
        BOOL bOsVersionInfoEx;
     
       // Try calling GetVersionEx using the OSVERSIONINFOEX structure.
       //
       // If that fails, try using the OSVERSIONINFO structure.
       ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
       osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
     
       if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) )
       {
          // If OSVERSIONINFOEX doesn't work, try OSVERSIONINFO.
          osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
          if (! GetVersionEx ( (OSVERSIONINFO *) &osvi) ) 
             return  DIJ_OS_INCONNU;;
       }
       if(osvi.dwPlatformId==VER_PLATFORM_WIN32_NT)
       {      
             if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 )
                return DIJ_OS_WINXP;
          return   DIJ_OS_WINNT;
       }            
      if(osvi.dwPlatformId==VER_PLATFORM_WIN32s) return DIJ_OS_WIN31; 
      if(osvi.dwPlatformId==VER_PLATFORM_WIN32_WINDOWS)
      {
        if(osvi.dwMinorVersion==0) return DIJ_OS_WIN95;
        else if(osvi.dwMinorVersion>0) return DIJ_OS_WIN98;
      } 
       return  DIJ_OS_INCONNU;; 
    }

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Je ne comprends pas.

    J'ai repris exactement la fonction données et je ressorts avec DIJ_OS_WIN98...

    Alors que je suis sous windows XP Professionnal...

  10. #10
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    il y a embrouille je viens de tester ça sur un projet bidon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    int GetOs()
    {
        OSVERSIONINFOEX osvi;
        BOOL bOsVersionInfoEx;
     
       // Try calling GetVersionEx using the OSVERSIONINFOEX structure.
       //
       // If that fails, try using the OSVERSIONINFO structure.
       ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
       osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
     
       if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) )
       {
          // If OSVERSIONINFOEX doesn't work, try OSVERSIONINFO.
          osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
          if (! GetVersionEx ( (OSVERSIONINFO *) &osvi) ) 
             return  -1;
       }
       if(osvi.dwPlatformId==VER_PLATFORM_WIN32_NT)
       {      
             if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 )
                return 4;
          return   3;
       }            
      if(osvi.dwPlatformId==VER_PLATFORM_WIN32s) return 0; 
      if(osvi.dwPlatformId==VER_PLATFORM_WIN32_WINDOWS)
      {
        if(osvi.dwMinorVersion==0) return 1;
        else if(osvi.dwMinorVersion>0) return 2;
      } 
       return  -1; 
    }
    ça renvoie bien 4 : xp et je suis xp Pro.
    à mon avis verifies les valeurs de tes defines DIJ_OS_WIN98 etc...

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Effectivement, j'ai fait le même test dans un petit programme, et ca me ressort bien windows XP.

    Mais quand je mets le même code dans mon application, ça me ressort Windows 98...

    Il doit y avoir une initialisation quelque part qui me modifie les valeurs de l'OS...
    Je vais chercher.

    Merci pour les infos.

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    J'ai trouvé...

    Le programme principal était coché pour travailler en compatibilité Win98...
    Donc tout fonctionnait correctement...

    Quand je décoche cette compatibilité, le code donné ci dessus s'exécute tout à fait normalement.

    Merci pour le coup de main.

  13. #13
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    effectivement bonjour le piege!,
    tes balises de code ne fonctionnent pas ,parce que dans ton profil le bbcode est desactivé .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Foreign-key et indices/index
    Par mesquest dans le forum Outils
    Réponses: 3
    Dernier message: 21/05/2004, 14h22
  2. [LG]Puissance et Indice
    Par luno2545 dans le forum Langage
    Réponses: 2
    Dernier message: 08/05/2004, 10h01
  3. [LG]toujours les indices... avec precisions!!!
    Par k_ro dans le forum Langage
    Réponses: 2
    Dernier message: 25/04/2004, 21h08
  4. [LG]indice en Pascal... merci d'avance
    Par k_ro dans le forum Langage
    Réponses: 3
    Dernier message: 24/04/2004, 20h58
  5. BDD, r-a-z index et indice primary key ?
    Par lord_paco dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 11/07/2003, 10h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo