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

Vos Contributions VBScript Discussion :

Un explorateur d'objets COM


Sujet :

Vos Contributions VBScript

  1. #1
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 296
    Points : 3 549
    Points
    3 549
    Par défaut Un explorateur d'objets COM
    cette discussion : http://www.developpez.net/forums/d63...e-dobjets-vbs/ me fait penser
    qu'un explorateur d'objets COM est toujours utile quand on souhaite étendre les possibilités de vbs
    l'un des plus performants pour faire le tri dans la ménagerie des objets com enregistrés (ou pas)
    est à mon sens celui-ci: http://www.japheth.de/COMView.html
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  2. #2
    Membre averti

    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Décembre 2003
    Messages
    333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 333
    Points : 382
    Points
    382
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    pour faire suite à cette discution, j'ai creusé un peu le sujet et j'ai fait un explorateur d'objet VBS artisanal.

    Principe :

    Brute force : J'instancie chaque objet, je regarde si une erreur est générée, si non c'est que j'ai pu instancier mon objet. Aprés, es-ce qu'il est utile, c'est une autre histoire...

    Attention, du fait du principe précédement énoncé, vous pouvez avoir des messages d'erreurs fenêtré (ce qui est normal, certains composant n'étant pas instanciable. C'est par ailleurs assez long. Parfois il faut taper entrée dans la console pour le faire repartir suite suite à une interruption win32.

    Le script en question : run.rar
    Une liste générée sur un XPSP2 disposant d'office 2007 : liste.txt
    Le code :

    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
    Option Explicit
    ' Cette partie du script provient de chez www.robvanderwoude.com
    'Elle liste les objets COM et ActiveX présent sur windows
     
    Const HKEY_CLASSES_ROOT = &H80000000
     
    Dim arrProgID, lstProgID, objReg, strMsg, strProgID, strSubKey, subKey, subKeys()
     
    Set lstProgID = CreateObject( "System.Collections.ArrayList" )
    Set objReg    = GetObject( "winmgmts://./root/default:StdRegProv" )
     
    ' List all subkeys of HKEY_CLASSES_ROOT\CLSID
    objReg.EnumKey HKEY_CLASSES_ROOT, "CLSID", subKeys
     
    ' Loop through the list of subkeys
    For Each subKey In subKeys
    	' Check each subkey for the existence of a ProgID
    	strSubKey = "CLSID\" & subKey & "\ProgID"
    	objReg.GetStringValue HKEY_CLASSES_ROOT, strSubKey, "", strProgID
    	' If a ProgID exists, add it to the list
    	If Not IsNull( strProgID ) Then lstProgID.Add strProgID
    Next
     
    ' Sort the list of ProgIDs
    lstProgID.Sort
     
    ' Copy the list to an array (this makes displaying it much easier)
    arrProgID = lstProgID.ToArray
     
    ' Display the entire array
    'WScript.Echo Join( arrProgID, vbCrLf )
     
    'Boucle d'affichage de la liste d'objet
    '	Principe :
    '	Pour savoir si un objet possède une inteface scriptable, on l'instancie
    '	si une erreur est reportée, l'objet n'est pas scriptable
     
    WScript.Echo "Liste des objets COM/ActiveX disponible sur votre système" & vbCrLf
    Dim alpha, objet, script, resultat, shell, regex, resultatregex
    	Set shell = WScript.CreateObject("wscript.shell")
    	Set regex = New RegExp : regex.IgnoreCase= True : regex.Global=  False : regex.Pattern = "[^.]+[.][^.]+"
    For Each objet In arrProgID
    	Set resultatregex = regex.Execute (objet)
    	If objet <> "" And resultatregex.Count <>0 Then
    ' Certain objet on des guillemets, ce qui est gênant pour nous
    ' La plupart des objets on des chiffres la lfin du type word.document.12
    ' Nous ne voulons qu'une forme du type xxxx.xxxx, d'ou l'emploie d'une regex
    		objet = resultatregex(0).Value
    		objet = Replace(objet,"""","")
    'Certain test d'objet plante WSH, on est obligé de runner chaque test dans un sous shell en bidouillant un peu
    '(Mais la bidouille, n'es ce pas l'essence même du script ... ;)
    		script = "cmd /c echo Dim objet: Set objet = wscript.createobject(""" & objet & """) : WScript.Quit 33 >c:\temp.vbs "
    		shell.Run script,0
    		resultat = shell.Run ("cscript.exe c:\temp.vbs",0,true)
    		shell.Run "cmd /c del c:\temp.vbs",0
    ' à priori l'instruction run renvoie 0 même si l'instanciation s'est mal passée.
    ' Du coup je génère un exit code 33 à la fin pour être sur que le code est allez jusqu'au bout
    		If Eval(resultat = 33) Then
    			WScript.Echo objet
    			shell.Run "cmd /c echo " & objet & " >> liste.txt",0
    		Else
    			' Pour Debug only
    			'WScript.Echo "Exit code : " & resultat & " : " & objet & "  : NOK!"
    		End If
    	Else
    		' Pour Debug only
    		'WScript.Echo "Object non traité : " & objet
    	End If 
    Next
    C'est une ébauche pas trés fine, mais c'est la seule que j'ai trovué à ce jour pour obtenir ma liste

    N'hésitez pas à me faire un retour dessus, voir mieux, poster des corrections/amélioration directement sur ce post

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2008
    Messages : 252
    Points : 124
    Points
    124
    Par défaut
    Salut john.fender je sais c'est un vieux poste mais ton explorateur d'objet me plait beaucoup ^^.

    Je voudrais savoir si tu as une version en peu plus élaboré ou si tu es rester sur celui là ?

    Merci d'avance !

    Sokai

  4. #4
    Membre averti

    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Décembre 2003
    Messages
    333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 333
    Points : 382
    Points
    382
    Billets dans le blog
    1
    Par défaut
    Salut !

    non, j'ai jamais fait mieux. J'ai d'ailleurs pas cherché du coup, me débrouillant avec celui. Si tu fais mieux (ou trouve mieux) à l'occaz, je suis moi aussi prenneur.

    John.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2008
    Messages : 252
    Points : 124
    Points
    124
    Par défaut
    Ouai j'avais commencé à le modifié (il y a déjà quelque mois ) pour ne pas créer à chaque fois une instance d'objet car chez moi beaucoup généraient des erreurs. Ce qui avait comme conséquence d'afficher des erreurs et bloquer le script.

    Mais si non je ne l'ai pas amélioré plus que ça ^^.

    Si jamais je me replonge dedans je posterais ici la nouvelle version .

    Merci tout de même il m'a bien servis !

    See ya ~~

Discussions similaires

  1. Réponses: 16
    Dernier message: 06/06/2007, 12h42
  2. [Définition] Objet COM
    Par Etanne dans le forum Windows
    Réponses: 4
    Dernier message: 19/08/2004, 18h44
  3. Objet COM ou pas en réseau ?
    Par corwin_d_ambre dans le forum Web & réseau
    Réponses: 11
    Dernier message: 13/07/2004, 17h38
  4. [objets COM] "Catastrophic failure"
    Par Air'V dans le forum ASP
    Réponses: 5
    Dernier message: 10/09/2003, 11h45
  5. Désenregistrement d'Objets COM sous Windows
    Par barthelv dans le forum Windows
    Réponses: 2
    Dernier message: 21/05/2003, 15h11

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