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

Macros et VBA Excel Discussion :

[Sources][FAQ VBA Excel] Informations sur les applications [Fait]


Sujet :

Macros et VBA Excel

  1. #1
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut [Sources][FAQ VBA Excel] Informations sur les applications
    Sélectionnez n'importe quel type de fichier à partir de la boite de dialogue (GetOpenFileName).
    La procédure va ensuite récupérer le nom de l'executable associé à ce fichier et retourner des informations sur la version du programme, notamment :
    le nom de l'éditeur
    la description du programme
    la version du fichier
    le nom interne
    le copyright
    le nom de l'application
    le nom du produit
    la version du produit

    testé avec WinXP/Excel2002 et Win98/Excel97



    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
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    '*********************
    'Sources:
    'http://support.microsoft.com/kb/466935/fr
    'http://support.microsoft.com/kb/160042/fr
    'http://vb.developpez.com/faq/?page=Fichiers#num_version
    '
    'adapté pour utilisation en VBA Excel
    '*********************
     
    Option Explicit
     
    'Renvoie des informations sur la version, pour le fichier spécifié.
    'lptstrFilename: adresse du nom de fichier
    'dwHandle: handle d'information sur la version
    'dwLen: taille du buffer contenant l'information
    'lpData: adresse du premier octet du buffer contenant l'information
    Private Declare Function GetFileVersionInfo Lib "Version.dll" Alias _
    "GetFileVersionInfoA" (ByVal lptstrFilename As String, ByVal dwHandle As Long, _
    ByVal dwLen As Long, lpData As Any) As Long
     
    'La fonction GetFileVersionInfoSize détermine si les informations sur la
    'version existent. Si c'est le cas, cette fonction retourne la taille du
    'buffer contenant l'information et le handle d'information que l'on
    'passera à L'API GetFileVersionInfo. Cette dernière permet de récupérer
    'les informations sur la version.
    'lptstrFilename: adresse du nom de fichier
    'lpdwHandle: adresse du handle d'information sur la version
    Private Declare Function _
    GetFileVersionInfoSize Lib "Version.dll" Alias "GetFileVersionInfoSizeA" _
    (ByVal lptstrFilename As String, lpdwHandle As Long) As Long
     
    'La fonction VerQueryValue retourne la partie d'information sur la version:
    'pBlock: adresse du premier octet du buffer contenant l'information
    'lpSubBlock: adresse de la partie de l'information qui nous intéresse
    'lplpBuffer: adresse du buffer contenant la valeur demandée
    'puLen: adresse de la taille du buffer contenant la valeur demandée
    Private Declare Function VerQueryValue Lib "Version.dll" Alias "VerQueryValueA" _
    (pBlock As Any, ByVal lpSubBlock As String, lplpBuffer As Any, puLen As Long) As Long
     
    Private Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" (dest As Any, _
    ByVal Source As Long, ByVal Length As Long)
     
    'Copie une chaîne de caractères dans une autre
    Private Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" _
    (ByVal lpString1 As String, ByVal lpString2 As Long) As Long
     
    'Renvoie l'adresse de l'executable auquel le fichier est associé
    Public Declare Function FindExecutableA Lib "shell32.dll" (ByVal lpFile As String, _
    ByVal lpdirectory As String, ByVal lpResult As String) As Long
     
    Public Const MAX_FILENAME_LEN = 256
     
     
    Public Function DescriptionAppli(ByVal Cible As String, _
        ByVal TypeInfo As String) As String
     
        Dim Buffer As String, Lang_Charset_String As String
        Dim Rc As Long, HexNumber As Long, P As Long
        Dim strVersionInfo As String, strTemp As String
        Dim BufferLen As Long, Dummy As Long
        Dim sBuffer() As Byte
        Dim ByteBuffer(255) As Byte
     
        strVersionInfo = TypeInfo
     
        'Vérifie si les informations sur la version existent.
        BufferLen = GetFileVersionInfoSize(Cible, Dummy)
        If BufferLen < 1 Then Exit Function
     
        ReDim sBuffer(BufferLen)
        Rc = GetFileVersionInfo(Cible, 0&, BufferLen, sBuffer(0))
        If Rc = 0 Then
            DescriptionAppli = False
            Exit Function
        End If
     
        '"\VarFileInfo\Translation" permet de récupérer la langue utilisée et
        'le type de caractère:
        'Par exemple, on peut récupérer la valeur 040C1200 où 040C identifie la
        'langue française et 1200 identifie le jeu de caractères Unicode
        '(Les valeurs des identifiants de langue et de jeu de caractères sont
        'données dans l'aide WIN SDK 32 HELP pour la structure VERSIONINFO).
        Rc = _
        VerQueryValue(sBuffer(0), "\VarFileInfo\Translation", P, BufferLen)
     
        If Rc = 0 Then Exit Function
     
        MoveMemory ByteBuffer(0), P, BufferLen
     
        HexNumber = ByteBuffer(2) + ByteBuffer(3) * &H100 + ByteBuffer(0) * _
            &H10000 + ByteBuffer(1) * &H1000000
     
        Lang_Charset_String = Hex(HexNumber)
     
        Do While Len(Lang_Charset_String) < 8
            Lang_Charset_String = "0" & Lang_Charset_String
        Loop
     
        Buffer = String(255, 0)
        strTemp = "\StringFileInfo\" & Lang_Charset_String & "\" & strVersionInfo
        Rc = VerQueryValue(sBuffer(0), strTemp, P, BufferLen)
     
        If Rc = 0 Then Exit Function
     
        lstrcpy Buffer, P
        Buffer = Mid$(Buffer, 1, InStr(Buffer, Chr(0)) - 1)
     
        DescriptionAppli = Buffer
    End Function
     
     
    'Permet de retrouver l'executable du fichier spécifié.
    Function FindExecutable(s As String) As String
        Dim i As Integer
        Dim S2 As String
     
        S2 = String(MAX_FILENAME_LEN, 32) & Chr$(0)
        i = FindExecutableA(s & Chr$(0), vbNullString, S2)
     
        If i > 32 Then
            FindExecutable = Left$(S2, InStr(S2, Chr$(0)) - 1)
            Else
            FindExecutable = ""
        End If
    End Function
     
     
    Sub AfficherInformationsApplication()
        Dim Resultat As String, MonAppli As String, LeFichier As String
        Dim X As Variant
        Dim Tableau As Variant
        Dim i As Byte
     
        'Définit les types d'informatins à récupérer
        Tableau = Array("Name", "comments ", "CompanyName", "FileDescription", _
            "FileVersion", "InternalName", "LegalCopyright", "legalTrademarks", _
            "privateBuild", "OriginalFileName", "ProductName", _
            "productVersionNum", "ProductVersion")
     
        'Affiche un boîte de dialogue pour sélectionner un fichier sur le PC
        X = Application.GetOpenFilename
        'On sort si aucun fichier n'est sélectionné ou si vous avez appuyé
        'sur le bouton "Annuler".
        If X = False Then Exit Sub
     
        LeFichier = X
        'Recherche l'executable associé au fichier sélectionné
        MonAppli = FindExecutable(LeFichier)
     
        'boucle sur les infos à récupérer
        For i = 0 To 12
            Resultat = Resultat & Tableau(i) & " :  " & _
                DescriptionAppli(MonAppli, Tableau(i)) & vbLf
        Next i
     
        'Affiche le resultat de la procedure
        MsgBox Resultat, , "Informations : " & MonAppli
    End Sub

  2. #2
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 130
    Points : 3 118
    Points
    3 118
    Par défaut
    A noter dans l'exemple fourni il y a redirection vers l'exécutable attaché ce qui provoque inévitablement une erreur
    s'il s'agit d'un activeX pour peu que l'utilitaire d'analyse de dépendances soit installé

Discussions similaires

  1. Informations sur les applications
    Par SilkyRoad dans le forum Contribuez
    Réponses: 0
    Dernier message: 13/01/2012, 14h29
  2. Informations sur les applications
    Par SilkyRoad dans le forum Contribuez
    Réponses: 0
    Dernier message: 29/12/2011, 14h49
  3. [VBA Excel] documentation sur les classes Excel
    Par Ragmaxone dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 17/07/2008, 17h08
  4. [VBA/Excel] Boucler sur les colonnes
    Par jefe.k dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 23/02/2007, 08h42
  5. [VBA-Excel] Question sur les Treeview
    Par marsupilami34 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/12/2006, 16h21

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