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

API, COM et SDKs Delphi Discussion :

Determiner la version de Windows (10 en particulier)


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre chevronné

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

    Informations forums :
    Inscription : Août 2005
    Messages : 1 011
    Points : 2 078
    Points
    2 078
    Par défaut Determiner la version de Windows (10 en particulier)
    Bonjour
    D'abord le titre complet
    Déterminer la version de Windows à partir de Windows 8.1 .
    Dans les anciennes versions de DELPHI (XE starter par exemple)


    Traditionnellement la version de Windows était détectée par « GetVersionEx »
    Cette fonction est « deprecated » à partir de Windows 8.1 (dixit Microsoft) et il faut utiliser de nouvelles fonctions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ……
    IsWindowsVistaSP2OrGreater: Bool; 
    Windows7OrGreater: Bool;
    IsWindows7SP1OrGreater: Bool; 
    IsWindows8OrGreater: Bool;
    IsWindows8Point1OrGreater: Booll;
    IsWindows8Point1OrGreater: Bool; ;
    IsWindows10OrGreater: Bool; 
    ….
    Ces fonctions ne sont pas disponibles dans les anciennes versions de DELPHI (dans mon cas XE starter) Dans les dernières je ne sais pas.

    J’ai trouvé une unité pour les utiliser dans les anciennes versions
    Problème j’ai testé et c’est Ok pour XP, 8.1 (et sans doute pour les autres versions) mais pour Windows 10 ça bug : La fonction IsWindows10OrGreater renvoie False

    Pour information extrait de l’unité pour utiliser ces fonctions
    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
     
    Const 
    WIN32_WINNT_NT4 = $0400;
      WIN32_WINNT_WIN2K = $0500;
      WIN32_WINNT_WINXP = $0501;
      WIN32_WINNT_WS03 = $0502;
      WIN32_WINNT_VISTA = $0600;
      WIN32_WINNT_WS08 = $0600;
      WIN32_WINNT_LONGHORN = $0600;
      WIN32_WINNT_WIN7 = $0601;
      WIN32_WINNT_WIN8 = $0602;
      WIN32_WINNT_WINBLUE = $0603;
      WIN32_WINNT_WIN10 = $0A00;
     
    function IsWindows10OrGreater: Bool; stdcall;
     
    Implementation
    function IsWindows8Point1OrGreater;
    begin
      Result := IsWindowsVersionOrGreater(HIBYTE(WIN32_WINNT_WINBLUE),
        LOBYTE(WIN32_WINNT_WINBLUE), 0);
    end;
     
    function IsWindows10OrGreater ;
    // FG bug sous Windows 10 renvie False
    begin
      Result := IsWindowsVersionOrGreater(HIBYTE(WIN32_WINNT_WIN10),
        LOBYTE(WIN32_WINNT_WIN10), 0);
    end;
    Auriez vous une solution pour régler le problème ?

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 856
    Points : 11 290
    Points
    11 290
    Billets dans le blog
    6
    Par défaut
    Trouvé ici ; à tester :
    Code c++ : 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
    // RTL_OSVERSIONINFOEXW is defined in winnt.h
    BOOL GetOsVersion(RTL_OSVERSIONINFOEXW* pk_OsVer)
    {
        typedef LONG (WINAPI* tRtlGetVersion)(RTL_OSVERSIONINFOEXW*);
     
        memset(pk_OsVer, 0, sizeof(RTL_OSVERSIONINFOEXW));
        pk_OsVer->dwOSVersionInfoSize = sizeof(RTL_OSVERSIONINFOEXW);
     
        HMODULE h_NtDll = GetModuleHandleW(L"ntdll.dll");
        tRtlGetVersion f_RtlGetVersion = (tRtlGetVersion)GetProcAddress(h_NtDll, "RtlGetVersion");
     
        if (!f_RtlGetVersion)
            return FALSE; // This will never happen (all processes load ntdll.dll)
     
        LONG Status = f_RtlGetVersion(pk_OsVer);
        return Status == 0; // STATUS_SUCCESS;
    }
    Il semble d'après quelques lectures rapides que si l'on n'inclue pas Win10 dans le manifest (ou que l'appli est exécutée en mode compatibilité), le retour n'est pas bon.
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Membre chevronné

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

    Informations forums :
    Inscription : Août 2005
    Messages : 1 011
    Points : 2 078
    Points
    2 078
    Par défaut
    Bonjour,

    Merci pour la réponse rapide mais pour tester je n'ai pas de compilateur c ++ (et surtout pas les compétences en C++ )
    Quant à traduire en Delphi hors de portée !

    En cherchant j'ai effectivement lu qu'avec un manifest on pouvait faire marcher GetVersionEx mais c'était pas totalement clair pour moi.

    ET a partir du moment ou il y a de nouvelles fonctions simples et faciles à utiliser ..

    En l'état j'aurai plutôt tendance à penser que c'est le "WIN32_WINNT_WIN10 = $0A00;" qui n'est pas la bonne valeur puisque pour 8.1 et XP que j'ai testé la détection par ces fonctions est OK .

    J'aurai bien aimé tester sous Windows 10 pour WIN32_WINNT_WIN10 toutes les valeurs de $0000 à $FFFF en espérant avoir pour un valeur une réponse true pour le moment j'ai renoncé.

    A suivre ...

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 856
    Points : 11 290
    Points
    11 290
    Billets dans le blog
    6
    Par défaut
    Si ça manquait, voici des définitions issues de l'unité JclWin32 de la Jedi Code Library
    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
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    type
      POSVERSIONINFOEXA = ^OSVERSIONINFOEXA;
      {$EXTERNALSYM POSVERSIONINFOEXA}
      _OSVERSIONINFOEXA = record
        dwOSVersionInfoSize: DWORD;
        dwMajorVersion: DWORD;
        dwMinorVersion: DWORD;
        dwBuildNumber: DWORD;
        dwPlatformId: DWORD;
        szCSDVersion: array [0..127] of CHAR;     // Maintenance string for PSS usage
        wServicePackMajor: WORD;
        wServicePackMinor: WORD;
        wSuiteMask: WORD;
        wProductType: BYTE;
        wReserved: BYTE;
      end;
      {$EXTERNALSYM _OSVERSIONINFOEXA}
      OSVERSIONINFOEXA = _OSVERSIONINFOEXA;
      {$EXTERNALSYM OSVERSIONINFOEXA}
      LPOSVERSIONINFOEXA = ^OSVERSIONINFOEXA;
      {$EXTERNALSYM LPOSVERSIONINFOEXA}
      TOSVersionInfoExA = _OSVERSIONINFOEXA;
     
      POSVERSIONINFOEXW = ^OSVERSIONINFOEXW;
      {$EXTERNALSYM POSVERSIONINFOEXW}
      _OSVERSIONINFOEXW = record
        dwOSVersionInfoSize: DWORD;
        dwMajorVersion: DWORD;
        dwMinorVersion: DWORD;
        dwBuildNumber: DWORD;
        dwPlatformId: DWORD;
        szCSDVersion: array [0..127] of WCHAR;     // Maintenance string for PSS usage
        wServicePackMajor: WORD;
        wServicePackMinor: WORD;
        wSuiteMask: WORD;
        wProductType: BYTE;
        wReserved: BYTE;
      end;
      {$EXTERNALSYM _OSVERSIONINFOEXW}
      OSVERSIONINFOEXW = _OSVERSIONINFOEXW;
      {$EXTERNALSYM OSVERSIONINFOEXW}
      LPOSVERSIONINFOEXW = ^OSVERSIONINFOEXW;
      {$EXTERNALSYM LPOSVERSIONINFOEXW}
      RTL_OSVERSIONINFOEXW = _OSVERSIONINFOEXW;
      {$EXTERNALSYM RTL_OSVERSIONINFOEXW}
      PRTL_OSVERSIONINFOEXW = ^RTL_OSVERSIONINFOEXW;
      {$EXTERNALSYM PRTL_OSVERSIONINFOEXW}
      TOSVersionInfoExW = _OSVERSIONINFOEXW;
     
    {$IFDEF UNICODE}
     
      OSVERSIONINFOEX = OSVERSIONINFOEXW;
      {$EXTERNALSYM OSVERSIONINFOEX}
      POSVERSIONINFOEX = POSVERSIONINFOEXW;
      {$EXTERNALSYM POSVERSIONINFOEX}
      LPOSVERSIONINFOEX = LPOSVERSIONINFOEXW;
      {$EXTERNALSYM LPOSVERSIONINFOEX}
      TOSVersionInfoEx = TOSVersionInfoExW;
     
    {$ELSE}
     
      OSVERSIONINFOEX = OSVERSIONINFOEXA;
      {$EXTERNALSYM OSVERSIONINFOEX}
      POSVERSIONINFOEX = POSVERSIONINFOEXA;
      {$EXTERNALSYM POSVERSIONINFOEX}
      LPOSVERSIONINFOEX = LPOSVERSIONINFOEXA;
      {$EXTERNALSYM LPOSVERSIONINFOEX}
      TOSVersionInfoEx = TOSVersionInfoExA;  
     
    {$ENDIF}
     
    //
    // RtlVerifyVersionInfo() conditions
    //
     
    const
      VER_EQUAL         = 1;
      {$EXTERNALSYM VER_EQUAL}
      VER_GREATER       = 2;
      {$EXTERNALSYM VER_GREATER}
      VER_GREATER_EQUAL = 3;
      {$EXTERNALSYM VER_GREATER_EQUAL}
      VER_LESS          = 4;
      {$EXTERNALSYM VER_LESS}
      VER_LESS_EQUAL    = 5;
      {$EXTERNALSYM VER_LESS_EQUAL}
      VER_AND           = 6;
      {$EXTERNALSYM VER_AND}
      VER_OR            = 7;
      {$EXTERNALSYM VER_OR}
     
      VER_CONDITION_MASK              = 7;
      {$EXTERNALSYM VER_CONDITION_MASK}
      VER_NUM_BITS_PER_CONDITION_MASK = 3;
      {$EXTERNALSYM VER_NUM_BITS_PER_CONDITION_MASK}
     
    //
    // RtlVerifyVersionInfo() type mask bits
    //
     
      VER_MINORVERSION     = $0000001;
      {$EXTERNALSYM VER_MINORVERSION}
      VER_MAJORVERSION     = $0000002;
      {$EXTERNALSYM VER_MAJORVERSION}
      VER_BUILDNUMBER      = $0000004;
      {$EXTERNALSYM VER_BUILDNUMBER}
      VER_PLATFORMID       = $0000008;
      {$EXTERNALSYM VER_PLATFORMID}
      VER_SERVICEPACKMINOR = $0000010;
      {$EXTERNALSYM VER_SERVICEPACKMINOR}
      VER_SERVICEPACKMAJOR = $0000020;
      {$EXTERNALSYM VER_SERVICEPACKMAJOR}
      VER_SUITENAME        = $0000040;
      {$EXTERNALSYM VER_SUITENAME}
      VER_PRODUCT_TYPE     = $0000080;
      {$EXTERNALSYM VER_PRODUCT_TYPE}
     
    //
    // RtlVerifyVersionInfo() os product type values
    //
     
      VER_NT_WORKSTATION       = $0000001;
      {$EXTERNALSYM VER_NT_WORKSTATION}
      VER_NT_DOMAIN_CONTROLLER = $0000002;
      {$EXTERNALSYM VER_NT_DOMAIN_CONTROLLER}
      VER_NT_SERVER            = $0000003;
      {$EXTERNALSYM VER_NT_SERVER}
     
    //
    // dwPlatformId defines:
    //
     
      VER_PLATFORM_WIN32s        = 0;
      {$EXTERNALSYM VER_PLATFORM_WIN32s}
      VER_PLATFORM_WIN32_WINDOWS = 1;
      {$EXTERNALSYM VER_PLATFORM_WIN32_WINDOWS}
      VER_PLATFORM_WIN32_NT      = 2;
      {$EXTERNALSYM VER_PLATFORM_WIN32_NT}
    d'où à peu près (non testé) :

    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
    type 
      // type LONG (WINAPI* tRtlGetVersion)(RTL_OSVERSIONINFOEXW*);
      tRtlGetVersion = function (var PRTL_OSVERSIONINFOEXW: RTL_OSVERSIONINFOEXW): integer; stdcall;
     
    function GetOsVersion(var pk_OsVer: RTL_OSVERSIONINFOEXW): Boolean;
    var
      StructSize: integer;
      h_NtDll : HMODULE;
      RtlGetVersion: tRtlGetVersion;
    begin
      StructSize := SizeOf(RTL_OSVERSIONINFOEXW);
      ZeroMemory(pk_OsVer, StructSize);
      pk_OsVer.dwOSVersionInfoSize := StructSize;
     
      h_NtDll := GetModuleHandleW('ntdll.dll');
      RtlGetVersion := GetProcAddress(h_NtDll, 'RtlGetVersion');
      if not Assigned(RtlGetVersion) then 
        Result := False // This will never happen (all processes load ntdll.dll)
      else
        Result := ( RtlGetVersion(pk_OsVer) = 0 );  
    end;
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  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 : 53
    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,

    Pourquoi ne pas utiliser le type TOSVersion ?

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

    Par contre je ne sais plus si c'est apparu en XE ou en XE2.

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 685
    Points : 13 097
    Points
    13 097
    Par défaut
    Citation Envoyé par Thierry Laborde Voir le message
    Pourquoi ne pas utiliser le type TOSVersion ?
    Ça ne change rien si le manifest n'est pas à jour
    Zatoobux semble y être parvenu par WMI.

  7. #7
    Membre chevronné

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

    Informations forums :
    Inscription : Août 2005
    Messages : 1 011
    Points : 2 078
    Points
    2 078
    Par défaut Determiner la version de Windows
    Bonjour
    Pourquoi ne pas utiliser le type TOSVersion ?
    http://docwiki.embarcadero.com/Libra...ils.TOSVersion
    Par contre je ne sais plus si c'est apparu en XE ou en XE2.
    Pas de chance pour moi, c'est a partir de XE2 !

  8. #8
    Membre chevronné

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

    Informations forums :
    Inscription : Août 2005
    Messages : 1 011
    Points : 2 078
    Points
    2 078
    Par défaut Version de windows
    Bonjour
    @Tourlourou
    Merci pour le code, je regarde

  9. #9
    Membre chevronné

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

    Informations forums :
    Inscription : Août 2005
    Messages : 1 011
    Points : 2 078
    Points
    2 078
    Par défaut Déterminer la version de Windows
    Bonjour,
    Pour clore provisoirement la discussion J’en fais la synthèse :

    Pour déterminer la version de Windows :
    1- « GetVersionEx() » ;
    Ok jusqu’à Windows 8.1 mais pas au-delà .
    Microsoft déclare cette fonction « deprecated » et préconise d’utiliser le set de fonctions "isWindowsxxxOrGreather"
    Ces fonctions sont boguées : Windows 10 n’est pas détecté, Windows XP service pack 3 est détecté simplement Windows XP.

    D’ailleurs dans un autre billet https://msdn.microsoft.com/fr-fr/lib...(v=vs.85).aspx
    Microsoft indique qu’il vaut mieux ne pas les utiliser et que pour être sur il faut utiliser « loadlibrairy » et tester l’existence des fonctions spécifiques à l’OS !
    Un peu approximatif tout cela …

    2- Il semble possible d’utiliser VMI mais c’est pas forcément très simple.

    3- Le registre
    Mais finalement on peut (1), détecter très simplement l’OS en lisant le registre (il existe des clés spécifiques à Windows 10).
    Ci-joint un petit programme démo.
    Je n’ai pu le tester que sur les OS que je possède : XP 32 bits, Windows 8.1 64 bits, Windows 10 64 bits.
    S’i certains veulent le tester sous d’autres OS et services pack je ferai les mises au point éventuelles.

    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 …

    (1), en l’attente du débogage éventuel , par Microsoft, de « IswindowsxxxGreather than »
    Fichiers attachés Fichiers attachés

  10. #10
    Membre émérite Avatar de Cpt Anderson
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 624
    Points : 2 479
    Points
    2 479
    Par défaut
    Je reviens la dessus alors que je suis confronté au problème...
    du coup, si d'autres cherchent la solution, en passant par Powershell, avec la fonction (Get-WmiObject -class Win32_OperatingSystem).Caption, on a la version de Windows, alors qu'avec la solution ci-dessous, Windows 11 est considéré comme Windows 10 Pro.

    Voila, désolé pour le post sur cette discussion...


    Citation Envoyé par gaby277 Voir le message
    Bonjour,
    Pour clore provisoirement la discussion J’en fais la synthèse :

    Pour déterminer la version de Windows :
    1- « GetVersionEx() » ;
    Ok jusqu’à Windows 8.1 mais pas au-delà .
    Microsoft déclare cette fonction « deprecated » et préconise d’utiliser le set de fonctions "isWindowsxxxOrGreather"
    Ces fonctions sont boguées : Windows 10 n’est pas détecté, Windows XP service pack 3 est détecté simplement Windows XP.

    D’ailleurs dans un autre billet https://msdn.microsoft.com/fr-fr/lib...(v=vs.85).aspx
    Microsoft indique qu’il vaut mieux ne pas les utiliser et que pour être sur il faut utiliser « loadlibrairy » et tester l’existence des fonctions spécifiques à l’OS !
    Un peu approximatif tout cela …

    2- Il semble possible d’utiliser VMI mais c’est pas forcément très simple.

    3- Le registre
    Mais finalement on peut (1), détecter très simplement l’OS en lisant le registre (il existe des clés spécifiques à Windows 10).
    Ci-joint un petit programme démo.
    Je n’ai pu le tester que sur les OS que je possède : XP 32 bits, Windows 8.1 64 bits, Windows 10 64 bits.
    S’i certains veulent le tester sous d’autres OS et services pack je ferai les mises au point éventuelles.

    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 …

    (1), en l’attente du débogage éventuel , par Microsoft, de « IswindowsxxxGreather than »
    Voici la méthode de mon chef:

    copy (DateTimeToStr(Now),7,4)+
    copy (DateTimeToStr(Now),4,2)+copy (DateTimeToStr(Now),1,2)+copy (DateTimeToStr(Now),12,2)+
    copy (DateTimeToStr(Now),15,2)+copy (DateTimeToStr(Now),18,2)

    Je lui ai dit que FormatDateTime irait surement mieux


  11. #11
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Merci de le faire remonter, moi je découvre ce versionhelpers.h, je suis encore à utiliser CheckWin32Version soit donc GetVersionEx lancé une seule fois au démarrage de l'application (voir TOSVersion qui supporte tous les OS VCL et FMX)

    Je crois que la dernière fois que j'ai testé la version, c'était
    6.0 pour le thème Aero ... HDS_NOSIZING, ttAeroWizardBody, le débloquage du zoom à 200%
    6.1 pour le ITaskbarList3 et le message 'TaskbarButtonCreated'.
    6.2 pour le \Terminal Server\GlassSessionId
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

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

Discussions similaires

  1. Connaitre la version de windows
    Par coach dans le forum Windows
    Réponses: 1
    Dernier message: 21/11/2005, 19h12
  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