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

Langage Delphi Discussion :

Connaître la version de Windows


Sujet :

Langage Delphi

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement de composants
    Inscrit en
    Juin 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement de composants

    Informations forums :
    Inscription : Juin 2015
    Messages : 13
    Points : 10
    Points
    10
    Par défaut Connaître la version de Windows
    Bonjour,

    Existe-il une fonction qui nous permette de connaître la version de Windows ? CheckWin32Version et Win32MajorVersion ne m'aident pas vraiment car elles sont influencées par le mode compatibilité, elles se comportent comme si l'OS était celui défini par ce mode. Par exemple, si mon application tourne sur Windows 7 en mode compatibilité Windows XP Win32MajorVersion me retourne 5 (Windows XP) alors que je voudrais qu'elle retourne 6 (Windows 7). Comment pourrais-je donc faire pour connaître le vrai OS installé sur la machine ?

    Merci d'avance !

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 091
    Points : 41 065
    Points
    41 065
    Billets dans le blog
    62
    Par défaut
    C'est certainement possible via les WMI
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Membre émérite
    Avatar de Thierry Laborde
    Homme Profil pro
    N/A
    Inscrit en
    Avril 2002
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : N/A

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 391
    Points : 2 529
    Points
    2 529
    Par défaut
    Citation Envoyé par LiffeurDeiench Voir le message
    Bonjour,

    Existe-il une fonction qui nous permette de connaître la version de Windows ?
    Bonjour,

    Quelle version de Delphi avez-vous ?

  4. #4
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement de composants
    Inscrit en
    Juin 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement de composants

    Informations forums :
    Inscription : Juin 2015
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    J'utilise Delphi XE

  5. #5
    Membre émérite
    Avatar de Thierry Laborde
    Homme Profil pro
    N/A
    Inscrit en
    Avril 2002
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : N/A

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 391
    Points : 2 529
    Points
    2 529
    Par défaut
    Il existe une nouvelle classe TOSversion, mais malheureusement pour vous, si je ne me trompe pas, elle existe depuis XE2 :

    http://docwiki.embarcadero.com/Libra...ils.TOSVersion

  6. #6
    Membre émérite
    Avatar de Thierry Laborde
    Homme Profil pro
    N/A
    Inscrit en
    Avril 2002
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : N/A

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 391
    Points : 2 529
    Points
    2 529
    Par défaut
    Mais l'API GetNativeSystemInfo devrait vous aider :

    https://msdn.microsoft.com/en-us/lib...40(VS.85).aspx

  7. #7
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement de composants
    Inscrit en
    Juin 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement de composants

    Informations forums :
    Inscription : Juin 2015
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    Oui, j'ai vu la classe "TOSversion", malheureusement l'utilisation de Delphi XE est indépendant de ma volonté donc j'ai fais une crois dessus ^^

    Par contre, je n'ai pas l'impression que la fonction "GetNativeSystemInfo" retourne des indos par rapport à l'OS. Elle semble être liée à l'architecture du system.

    Merci !

  8. #8
    Membre émérite
    Avatar de Thierry Laborde
    Homme Profil pro
    N/A
    Inscrit en
    Avril 2002
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : N/A

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 391
    Points : 2 529
    Points
    2 529
    Par défaut
    Un lien qui pourra peut être vous aider :

    http://www.delphidabbler.com/articles?article=23

  9. #9
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement de composants
    Inscrit en
    Juin 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement de composants

    Informations forums :
    Inscription : Juin 2015
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    Merci

  10. #10
    Membre chevronné

    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 1 013
    Points : 2 080
    Points
    2 080
    Par défaut Version de windows
    Bonjour,
    En complément des informations de Thierry Laborde
    Sous XE c'est pas simple ...
    Jusqu'à Windows 8 de mémoire avec major et minor version on s'en sort (on trouve facilement du code)

    On peut aussi lire le registre et récupérer quelques informations. Un morceau de code jamais vraiment fini :
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    function VersionWinRegistre(): string;
     
    var
      Registre: TRegistry;
      strVersionWindows: string;
      BoolWindows10: boolean;
      Bool64bit: boolean;
      i1, i2: integer;
      s1, s2: string;
      message: string;
     
    begin
      // On detecte si Windows10 ou antérieur à Windows10
      BoolWindows10 := IsWindows10OrGreater;
      Bool64bit := IsWin64;
      strVersionWindows := '';
      Registre := TRegistry.Create; //Crée un objet TRegistry
      Registre.RootKey := HKEY_LOCAL_MACHINE; //Définit la clé principale
     
      Registre.OpenKeyReadOnly(CleInfosWindows);
     
      try
     
        strVersionWindows :=
          'Les informations sont issues de la lecture des valeurs de la clé : ';
        //memo1.Lines.Add(strVersionWindows);
        message := strVersionWindows + Newline;
     
        strVersionWindows := CleInfosWindows;
        //memo1.Lines.Add(strVersionWindows);
        //memo1.Lines.Add('');
        message := message + strVersionWindows + Newline;
     
        strVersionWindows := 'Os : ' + Registre.ReadString('ProductName');
        strVersionWindows := strVersionWindows +
          '   (service(s) pack non recherché(s))';
        //memo1.Lines.Add(strVersionWindows);
        message := message + strVersionWindows + Newline;
     
        // Si Windows 10 major et minor version ne sont pas dans la clé
        // 'CurrentVersion' mais CurrentMajorVersionNumber et CurrentMinorVersionNumber
        if BoolWindows10 then
        begin
          i1 := Registre.ReadInteger('CurrentMajorVersionNumber');
          i2 := Registre.ReadInteger('CurrentMinorVersionNumber');
          strVersionWindows := 'Major version  : ' + intTostr(i1) +
            ' Minor Version : ' + intTostr(i2);
          //memo1.Lines.Add(strVersionWindows);
          message := message + strVersionWindows + Newline;
        end
        else
        begin
          strVersionWindows := 'Major et minor version  : ' +
            Registre.ReadString('CurrentVersion');
          //memo1.Lines.Add(strVersionWindows);
          message := message + strVersionWindows + Newline;
        end;
     
        strVersionWindows := 'Build : ' + Registre.ReadString('CurrentBuild');
        //memo1.Lines.Add(strVersionWindows);
        //memo1.Lines.Add('');
        message := message + strVersionWindows + Newline;
        //    Nota  :
        //Pour le build sous XP sp3 la clé « Current build »  donne un résultat erroné
        // ( mais c’est indiqué dans la clé !) c’est « BuildLab »
        // qui donne la bonne valeur …
     
        strVersionWindows :=
          '(Programme testé uniquement sous XP 32, 8.1 64 et 10 64)';
        //memo1.Lines.Add(strVersionWindows);
        message := message + strVersionWindows + Newline;
        Result := message;
      except
        showmessage('Erreur certaines informations peuvent etre erronées:  ');
      end;
     
      Registre.CloseKey; //Ferme la clé
      Registre.Free; //Détruit l'objet
    end;

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 642
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 642
    Points : 10 596
    Points
    10 596
    Par défaut
    C'est avec la fonction VerifyVersionInfo , mais si je ne dis pas de bêtises à partir de Windows 8, elle te retourne toujours Windows 8.

    À ce que je comprends, Microsoft a plus ou moins déprécié GetVersion pour:
    • forcer à utiliser les nouvelles APIs
    • ne plus avoir d'applications compatibles à partir d'une version de Windows, mais une liste de versions de Windows sur lesquels l'application a été testée avec succès.

  12. #12
    Membre actif
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 266
    Points : 291
    Points
    291
    Par défaut
    C'est possible en utilisant une requête WMI sur root\cimv2, classe : Win32_OperatingSystem, propriété : Version

    Quand je l'utilise pour obtenir un diagnostique du système de l'utilisateur, j'interroge également les propriété Caption, ServicePackMajorVersion, ServicePackMinorVersion, OSArchitecture.

  13. #13
    Membre émérite
    Avatar de Thierry Laborde
    Homme Profil pro
    N/A
    Inscrit en
    Avril 2002
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : N/A

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 391
    Points : 2 529
    Points
    2 529
    Par défaut
    Bonjour,

    Un lien qui peut être intéressant :

    http://www.winsoft.sk/osversion.htm

    Le source est fourni

  14. #14
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 813
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 813
    Points : 15 228
    Points
    15 228
    Par défaut
    Yop !

    Merci pour ce lien,
    Citation Envoyé par Thierry Laborde Voir le message
    Un lien qui peut être intéressant :

    http://www.winsoft.sk/osversion.htm
    ça ressemble tout à fait à ce que je disais il y a une semaine et depuis, plus de nouvelles...

    Bon, moi je ne peux pas tester à 100 % because je tourne avec le pingouin depuis trois ans et que ma machine virtuelle la plus récente est un XP, mais je le sentais bien (réminiscences de w2k/D7...)
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  15. #15
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 740
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 740
    Points : 13 285
    Points
    13 285
    Par défaut
    Citation Envoyé par Jipété Voir le message
    ça ressemble tout à fait à ce que je disais il y a une semaine et depuis, plus de nouvelles...
    Bon pour te répondre, lorsqu'on recherche dwMajorVersion, dwMinorVersion et dwBuildNumber, passer par une structure OSVERSIONINFO ou OSVERSIONINFOEX, c'est kif-kif bourricot.

  16. #16
    Membre actif
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 266
    Points : 291
    Points
    291
    Par défaut
    j'avais ouvert le sujet :
    http://www.developpez.net/forums/d15...s-windows-8-a/ avec plusieurs liens sur le sujet.

    Ici, comme le disais foetus, la version renvoyée dépendra de ce que tu indiques comme compatibilité de ton application dans le manifeste de l'application (si tu n'indique pas de compatibilité ca renvoie 6.2).
    Applications not manifested for Windows 8.1 or Windows 10 will return the Windows 8 OS version value (6.2). Once an application is manifested for a given operating system version, GetVersionEx will always return the version that the application is manifested for in future releases. To manifest your applications for Windows 8.1 or Windows 10, refer to Targeting your application for Windows.
    GetVersionEx ne renvoie plus la version de windows mais la version de windows pour laquelle tu indiques que ton application est compatible.

    par contre
    selon la discussion manifest-madness (https://blogs.msdn.microsoft.com/chu...ifest-madness/) VerifyVersionInfo a le meme comportement depuis Windows 10 :
    With Windows 10 VerifyVersionInfo is now subject to the same manifest-based behavior as GetVersion(Ex): by default IsWindowsrGreater and earlier will return 'true' as expected on Windows 10, but both IsWindows8Point1OrGreater and IsWindows10OrGreater will return 'false' without the appropriate GUIDs present in the <compatibility> section

    Je ne connais que WMI pour obtenir la version de Windows.

Discussions similaires

  1. Réponses: 3
    Dernier message: 09/08/2011, 11h25
  2. Version de Windows pour Delphi 8
    Par alainvh dans le forum EDI
    Réponses: 8
    Dernier message: 22/06/2004, 11h37
  3. Connaître la version de windows?
    Par Age Piranha dans le forum Windows
    Réponses: 3
    Dernier message: 12/04/2004, 21h09
  4. Version de Windows dans Visual Studio !!!
    Par Jasmine dans le forum MFC
    Réponses: 3
    Dernier message: 18/03/2004, 17h40
  5. Appli devant tourner sous différentes versions de Windows?
    Par AnneOlga dans le forum C++Builder
    Réponses: 4
    Dernier message: 12/11/2003, 10h48

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