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

WinDev Discussion :

Utilisation de WMI pour nom cartes réseau


Sujet :

WinDev

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2014
    Messages : 15
    Points : 18
    Points
    18
    Par défaut Utilisation de WMI pour nom cartes réseau
    bonjour amis développeurs .

    actuellement, en développement de mon projet, je souhaite récupérer le nom des connexion réseau via un script VB que j'ai trouvé sur Technet/MSDN

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    strComputer = "." 
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
    Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapter")
     
    For Each objItem in colItems 
        Wscript.Echo "Name: " & objItem.Name
        Wscript.Echo "Description: " & objItem.Description
        Wscript.Echo
    Next
    source: http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx ( >> en bas de la page )

    d'apres moi ce bout de code doit sortir le nom de la connexion et sa description.

    j'ai vu quelques codes sur le forum de PC soft pour obtenir via un info le nom des adaptateur réseau qui est le suivant :

    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
    sListe est une chaîne
    oScript est un objet automation "MSScriptControl.ScriptControl"
     
    MonScriptVBS est une chaîne = [
     
    Function ScanCartesReseau()
    Dim objWMIService, colNetworkAdapters, objNetworkAdapter, sInfo
     
    Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
    Set colNetworkAdapters = objWMIService.ExecQuery("Select * from Win32_NetworkAdapterConfiguration Where IPEnabled = True")
     
    sInfo = ""
    For Each objNetworkAdapter In colNetworkAdapters
    If sInfo <> "" Then sInfo = sInfo & Chr(13) & Chr(10)
    sInfo = sInfo & objNetworkAdapter.Description
    Next
     
    ScanCartesReseau = sInfo
    End Function
    ]
     
    oScript>>Language("VBScript")
    oScript>>Reset
    oScript>>AddCode(MonScriptVBS)
    oScript>>Timeout(-1)//pas de timeout
    sListe = oScript>>Run("ScanCartesReseau") //Appel
     
    Info(sListe)
     
     
    en utilisant le même principe tu peux obtenir d'autres infos comme l'adresse I.P, l'adresse MAC de chaque carte réseau.
     
    Ami calmant, J.P ;-)
    Le souci c'est que quand je veut adapter les codes a mon utilisation, a chaque fois que je veut tester l'appli ça me dit : nom inconnu le membre n'existe pas !

    j'utilise ce code qui syntaxiquement me parais juste/logique ...

    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
     
    oScript est un objet Automation "MSScriptControl.ScriptControl"
    MonScriptVBS est une chaîne = [
    function SCR()
    Dim objWMIService, colItems, objItem, sinfo
     
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
    Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapter")
     
    sinfo= ""
    For Each objItem in colItems 
    If sinfo <> "" Then sinfo = sinfo & Chr(13) & Chr(10)
    sinfo = sinfo & objItem.Name
    sinfo = sinfo & objItem.Description
    Next
     
    SCR = sinfo
    End Function
    ]
    oScript>>Language("VBScript")
    oScript>>Reset
    oScript>>AddCode(MonScriptVBS)
    oScript>>Timeout(-1)//pas de timeout
    sListe = oScript>>Run("SCR") //Appel
    l'erreur est la suivante

    En tentant d'invoquer la méthode <Run> ou de lire la propriété <Run>, l'objet Automation/ActiveX a renvoyé l'erreur suivante :
    'Erreur 80041021 : '
    En tentant d'invoquer la méthode <Run>, l'objet Automation/ActiveX a renvoyé l'erreur suivante :
    'Erreur 80041021 : '
    En tentant de lire la propriété <Run>, l'objet Automation/ActiveX a renvoyé l'erreur suivante :
    'Erreur 80020003, Le membre demandé n'existe pas'
    En tentant d'écrire la propriété <Run>, l'objet Automation/ActiveX a renvoyé l'erreur suivante :
    'Erreur 80020003, Le membre demandé n'existe pas'
    je suis débutant en programmation, mais la je ne comprends pas pourquoi ça passe pas avec windev . quelqu’un a une idée ?

  2. #2
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 999
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 999
    Points : 9 380
    Points
    9 380
    Par défaut
    regarde bien ,ton erreur est ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
    la variable strComputer n'est pas déclarée et d'ailleurs tu n'en as pas besoin car tu cherches les connexions réseau de ton poste .
    Il suffit de mettre à la place :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2014
    Messages : 15
    Points : 18
    Points
    18
    Par défaut
    oh la la... oui en effet( je pense que c'est l'heuretardive ! ) . Merci cela fonctionne

    mais du coup le resultat n'est pas celui auquel je m'attendais . c'est trop précis :

    j'aimerais chercher avec WMI ( ou netsh ) a afficher le nom des connexion dans un info ( j'adapterais après mon code pour le mettre dans une combo déroulante pour ce que je veut faire ) mais déjà si j'arrivais a ce résultat, ce serais pas mal. le souci c'est que je ne vois pas par quoi passer pour obtenir ces informations .

    via une image, je vais vous montrer ce que je recherche .

    Nom : noms connexion reseau.PNG
Affichages : 2222
Taille : 17,8 Ko

    j'aimerais obtenir dans une combo le nom des connexion ( Wifi-5, hostednetwork ) et isoler que les interfaces WIFI .

    j'ai vu que Via powershell on peut faire des commandes pour afficher les cartes réseau et les trier par interfaces


    en powershell on a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    get-wmiobject win32_networkadapter |select netconnectionid,name
    ça, ça me renvoie : tout ç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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    PS C:\Windows\system32> get-wmiobject win32_networkadapter |select netconnectionid,name
     
    netconnectionid                                             name
    ---------------                                             ----
                                                                Miniport WAN (L2TP)
                                                                Miniport WAN (SSTP)
                                                                Miniport WAN (IKEv2)
                                                                Miniport WAN (PPTP)
                                                                Miniport WAN (PPPOE)
                                                                Miniport WAN (IP)
                                                                Miniport WAN (IPv6)
                                                                Miniport WAN (Moniteur réseau)
                                                                Carte réseau de débogage du noyau Microsoft
                                                                Carte asynchrone RAS
                                                                Mini-carte Dell Wireless 1397 WLAN
    Ethernet                                                    Contrôleur Realtek PCIe GBE Family
                                                                Carte virtuelle directe Wi-Fi Microsoft
                                                                Carte Microsoft ISATAP
                                                                Teredo Tunneling Pseudo-Interface
                                                                Carte Microsoft ISATAP
                                                                Apple Mobile Device Ethernet
                                                                Carte Microsoft ISATAP
                                                                802.11n Wireless LAN Card
                                                                Carte Microsoft 6to4
                                                                Carte Microsoft ISATAP #5
                                                                Périphérique Bluetooth (réseau personnel)
                                                                Périphérique Bluetooth (réseau personnel)
                                                                Carte virtuelle de réseau hébergé Microsoft
                                                                Carte Microsoft ISATAP
                                                                Carte virtuelle de réseau hébergé Microsoft
                                                                Carte virtuelle directe Wi-Fi Microsoft
                                                                Mini-carte Dell Wireless 1397 WLAN
                                                                Carte réseau sans fil Qualcomm Atheros AR5B93
                                                                Carte virtuelle directe Wi-Fi Microsoft
                                                                Carte virtuelle de réseau hébergé Microsoft
                                                                Carte virtuelle de réseau hébergé Microsoft
                                                                Carte virtuelle directe Wi-Fi Microsoft
    Wi-Fi 5                                                     Carte réseau sans fil Qualcomm Atheros AR9002WB-1NG
    HostedNetwork                                               Carte virtuelle de réseau hébergé Microsoft #5
                                                                Carte virtuelle directe Wi-Fi Microsoft #5
    Connexion réseau Bluetooth 3                                Périphérique Bluetooth (réseau personnel) #3
                                                                Carte virtuelle directe Wi-Fi Microsoft
                                                                SAMSUNG Mobile USB Remote NDIS Network Device
    alors du coup j'ai modifié le script VBS en remplacant
    sinfo & objItem.description
    sinfo & objItem.name


    par : le paramètre souligné en gras .

    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
    MonScriptVBS est une chaîne = [
    function SCR()
    Dim objWMIService, colItems, objItem, sinfo
    
    Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
    Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapter")
    
    sinfo = ""
    For Each objItem in colItems 
    If sinfo <> "" Then sinfo = sinfo & Chr(13) & Chr(10)
    sinfo = sinfo & objItem.netconnectionid
    
    Next
    
    SCR = sinfo
    End Function
    ]
    et ça m affiche en effet les noms. mais il y a un nombre élevé de lignes .

    ça me renvoi tout ç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
    34
    35
    36
    37
    38
    39
    40
    41
    PS C:\Windows\system32> get-wmiobject win32_networkadapter |select netconnectionid
     
    netconnectionid
    ---------------
     
     
     
     
     
     
     
     
     
     
     
    Ethernet
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
    Wi-Fi 5
    HostedNetwork
     
    Connexion réseau Bluetooth 3

    je pense avoir une solution pour enlever les lignes vides avec un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SI RésulstaRequeteAffiché <>"" alors 
    listeajoute(maliste,RésulstaRequeteAffiché)
    FIN


    EDIT , ça n’enlève pas les lignes vides




    EDIT 2

    avec ce code cela enleve les lignes vides :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Cpt est un entier=Liste1..Occurrence
     
    TANTQUE Cpt>0
    	SI (Liste1[Cpt])="" ALORS 
    		ListeSupprime(Liste1,Cpt)
    	FIN
    	Cpt--
    FIN
    Par contre y aurait il moyen de trouver quelles interfaces sont des interfaces Wifi de celle qui ne sont pas wifi ?
    je sens que je suis très prés du but mais je ne vois pas comment faire .

  4. #4
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 999
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 999
    Points : 9 380
    Points
    9 380
    Par défaut
    hello,
    dans la requête il faut faire une sélection avec un Where sur le type d'adaptateur réseau.
    Voici un exemple en utilisant l'objet automation WbemScripting.SWbemLocator (plus simple d'emploi) au lieu du Vbscript.
    Cela ne fonctionne qu'à partir de Vista à cause de ItemIndex qui n'existait pas avant dans WMI.


    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
    // J.P Décembre 2014
    objLocator est un objet Automation "WbemScripting.SWbemLocator"
    objService est un objet Automation dynamique
    Resultats est un objet Automation dynamique
     
    QUAND EXCEPTION DANS
    	objService = objLocator>>ConnectServer(".", "root\cimv2")
    	objService>>Security_>>ImpersonationLevel = 3 
     
    	// Récupération des adaptateurs réseau avec une condition sur le type
    	// 0 = ethernet     9 = sans fil
    	Resultats = objService>>ExecQuery("SELECT * FROM Win32_NetworkAdapter WHERE AdapterTypeID = 9")
    	POUR x = 0 _A_ Resultats>>Count -1
    		Trace("Nom Adaptateur  : ",Resultats>>ItemIndex(x)>>Properties_>>Item("Name")>>Value )
    		Trace("Description  : ",Resultats>>ItemIndex(x)>>Properties_>>Item("Description")>>Value )
    		Trace("Adresse MAC  : ",Resultats>>ItemIndex(x)>>Properties_>>Item("MACAddress")>>Value )
    		Trace("=========================")
    	FIN
    FAIRE
    	Erreur("Erreur execution WMI",ExceptionInfo(errInfo))
    	ExceptionActive()
    	RENVOYER "Erreur WMI"
    FIN
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2014
    Messages : 15
    Points : 18
    Points
    18
    Par défaut
    Merci pour le script, cela dit quand je clique sur mon bouton, il ne se produit rien, les traces n'apparaissent pas , je ne vois pas ce qui cloche .

    EDIT j'ai peut etre trouvé pourquoi ça n'affiche rien du tout ( ni meme la fenetre trace)

    j'ai testé la commande Powershell suivante :

    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
    PS C:\Windows\system32> get-wmiobject win32_networkadapter |select netconnectionid,name,adaptertypeid
     
    netconnectionid                         name                                    adaptertypeid
    ---------------                         ----                                    -------------
                                            Miniport WAN (L2TP)
                                            Miniport WAN (SSTP)
                                            Miniport WAN (IKEv2)
                                            Miniport WAN (PPTP)
                                            Miniport WAN (PPPOE)
                                            Miniport WAN (IP)
                                            Miniport WAN (IPv6)
                                            Miniport WAN (Moniteur réseau)
                                            Carte réseau de débogage du noyau Mi...
                                            Carte asynchrone RAS
                                            Mini-carte Dell Wireless 1397 WLAN
    Ethernet                                Contrôleur Realtek PCIe GBE Family      0
                                            Carte virtuelle directe Wi-Fi Microsoft
                                            Carte Microsoft ISATAP                  15
                                            Teredo Tunneling Pseudo-Interface       15
                                            Carte Microsoft ISATAP                  15
                                            Apple Mobile Device Ethernet
                                            Carte Microsoft ISATAP                  15
                                            802.11n Wireless LAN Card
                                            Carte Microsoft 6to4                    15
                                            Carte Microsoft ISATAP                  15
                                            Périphérique Bluetooth (réseau perso...
                                            Périphérique Bluetooth (réseau perso...
                                            Carte virtuelle de réseau hébergé Mi...
                                            Carte Microsoft ISATAP                  15
                                            Carte virtuelle de réseau hébergé Mi...
                                            Carte virtuelle directe Wi-Fi Microsoft
                                            Mini-carte Dell Wireless 1397 WLAN
                                            Carte réseau sans fil Qualcomm Ather...
                                            Carte virtuelle directe Wi-Fi Microsoft
                                            Carte virtuelle de réseau hébergé Mi...
                                            Carte virtuelle de réseau hébergé Mi...
                                            Carte virtuelle directe Wi-Fi Microsoft
    Wi-Fi 5                                 Carte réseau sans fil Qualcomm Ather... 0
                                            Carte virtuelle de réseau hébergé Mi... 0
                                            Carte virtuelle directe Wi-Fi Micros... 0
    Connexion réseau Bluetooth 3            Périphérique Bluetooth (réseau perso... 0
                                            Carte virtuelle directe Wi-Fi Microsoft
                                            SAMSUNG Mobile USB Remote NDIS Netwo...
    je vois que les id des cartes reseau sont "0" ici . mais aussi pour le bluetooth et l'ethernet... . faudrais que je teste cette comande sur un autre PC pour voir si l'id des interfaces change d'un pc a l'autre .


    EDIT 2 @14h14 :

    en testant avec "0" dans le script donné plus haut, j'obtiens bien les traces, par contre le bluetooth est affiché aussi et egalement l'ethernet . je pense que c'est parce que ma carte Wifi de mon pc portable fait egalement buethooth. le constructeur de la carte a du associer le meme ID materiel pour le BT et le Wifi .

    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
     
    Nom Adaptateur  :  Contrôleur Realtek PCIe GBE Family
    Description  :  Contrôleur Realtek PCIe GBE Family
    Adresse MAC  :  00:26:B9:EB:47:XX
    =========================
    Nom Adaptateur  :  Carte réseau sans fil Qualcomm Atheros AR9002WB-1NG
    Description  :  Carte réseau sans fil Qualcomm Atheros AR9002WB-1NG
    Adresse MAC  :  74:2F:68:9B:13:XX
    =========================
    Nom Adaptateur  :  Carte virtuelle de réseau hébergé Microsoft #5
    Description  :  Carte virtuelle de réseau hébergé Microsoft
    Adresse MAC  :  46:2F:68:9B:13:XX
    =========================
    Nom Adaptateur  :  Carte virtuelle directe Wi-Fi Microsoft #5
    Description  :  Carte virtuelle directe Wi-Fi Microsoft
    Adresse MAC  :  06:2F:68:9B:13:XX
    =========================
    Nom Adaptateur  :  Périphérique Bluetooth (réseau personnel) #3
    Description  :  Périphérique Bluetooth (réseau personnel)
    Adresse MAC  :  74:2F:68:9B:34:XX
    =========================
    (j'ai masqué avec XX la fin des adresses mac)

    sinon j'ai trouvé une solution temporaire avec ma combo de depart en enlevant les lignes, je peut selectionner le nom de la carte, recuperer la valeur affichée et envoyer ça dans une variable globale, puis avec netsh utiliser la variable globale pour passer les parametres des commandes , et j'aimerais laisser apparaitre uniquement les lignes qui concernent les cartes WIFI . mais peut etre que le script ne foncitonne pas sur mon pc , c'est un Windows 8.0


    EDIT 3 @ 14H24

    je regarde actuellement sur d'autres forum englais de technet, toutes les personnes qui utilisent ces fonctions, semblet avoir une difference entre Wifi et ehternet, moi tout est identifié par "0" que ce soit BT, ethernet ou Wifi.. je ne vois pas pourquoi personnellement...

  6. #6
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 999
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 999
    Points : 9 380
    Points
    9 380
    Par défaut
    tu peux essayer de faire une sélection des réseaux "actifs" par :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM Win32_NetworkAdapterConfigura WHERE NetEnabled = True
    ou
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM Win32_NetworkAdapter WHERE PhysicalAdapter = True

    et de repérer le WIFI par le nom du réseau : propriété : NetConnectionID

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	Resultats = objService>>ExecQuery("SELECT * FROM Win32_NetworkAdapter WHERE NetEnabled = True")
    	POUR x = 0 _A_ Resultats>>Count -1
    		Trace("Nom Adaptateur  : ",Resultats>>ItemIndex(x)>>Properties_>>Item("Name")>>Value )
    		Trace("Description  : ",Resultats>>ItemIndex(x)>>Properties_>>Item("Description")>>Value )
    		Trace("Adresse MAC  : ",Resultats>>ItemIndex(x)>>Properties_>>Item("MACAddress")>>Value )
    		Trace("Nom Service  : ",Resultats>>ItemIndex(x)>>Properties_>>Item("ServiceName")>>Value )
    	    Trace("Nom Réseau  : ",Resultats>>ItemIndex(x)>>Properties_>>Item("NetConnectionID")>>Value )
    		Trace("=========================")
    	FIN
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2014
    Messages : 15
    Points : 18
    Points
    18
    Par défaut
    re,

    en effet il y avais cette méthode également,

    en cherchant vraiment l'utilité de la commande, je me suis dit qu'il me fallait uniquement le nom de l'interface wifi virtuelle ( de type réseau hébergé )

    j'ai utilisé ça et ai complété la requête en SQL

    Code VBScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim objWMIService, colItems, objItem, sinfo
    
    Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
    Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapter WHERE PhysicalAdapter = true AND Description LIKE '%vir%'")

    du coup ça marche , ma liste déroulante m'affiche bien le nom du réseau dans mon cas "HostedNetwork", par contre j'aimerais ajouter une condition . si aucune carte n'est trouvée mettre un message de type erreur ou info depuis WinDev . je pense pouvoir le faire avec macombo..valeuraffiché=""

    et par la suite, j'aimerais faire une personnalisation du nom du réseau via Netsh, car sur un PC lambda, quand on crée une nouvelle connexion sans fil virtuelle, elle apparait sous le nom de "connexion au réseau sans fil n°xx ou xx représente un chiffre.

    j'aimerais également ajouter une vérification du réseau hébergé (si le pc a été mis en veille, le réseau hébergé n'existe plus ) faire une sorte de bouton reset, qui permettrait de relancer le réseau hébergé si il n'existe plus , en vérifiant avec WMI si il existe toujours .

    avec la propriété :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM Win32_NetworkAdapterConfigura WHERE NetEnabled = True

    par exemple

  8. #8
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2014
    Messages : 15
    Points : 18
    Points
    18
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Resultats = objService>>ExecQuery("SELECT * FROM Win32_NetworkAdapter WHERE NetEnabled = True")
    	POUR x = 0 _A_ Resultats>>Count -1
    		Trace("Nom Adaptateur  : ",Resultats>>ItemIndex(x)>>Properties_>>Item("Name")>>Value )
    		Trace("Description  : ",Resultats>>ItemIndex(x)>>Properties_>>Item("Description")>>Value )
    		Trace("Adresse MAC  : ",Resultats>>ItemIndex(x)>>Properties_>>Item("MACAddress")>>Value )
    		Trace("Nom Service  : ",Resultats>>ItemIndex(x)>>Properties_>>Item("ServiceName")>>Value )
    	    Trace("Nom Réseau  : ",Resultats>>ItemIndex(x)>>Properties_>>Item("NetConnectionID")>>Value )
    		Trace("=========================")
    	FIN
    re J-P,

    Par contre pour cet algorithme, il n'est pas possible de récupérer les valeurs autrement que par trace() ?

    j'ai essayé info resultats, ça ne fonctionne pas .


    edit, en effet, il faut mettre en variable avant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mavariable=(Resultats>>ItemIndex(x)>>Properties_>>Item("NetConnectionID")>>Value)
    info(mavariable)
    cela dit , si aucune interface n'est trouvée, je n'ai pas de message, on dirais que le script ne se lance meme pas .

    j'ai essayé a la fin du script avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SI mavariable ="" ALORS
    info("variable vide")
    SINON
    mavariable=(Resultats>>ItemIndex(x)>>Properties_>>Item("NetConnectionID")>>Value)
    info(mavariable)

  9. #9
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 999
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 999
    Points : 9 380
    Points
    9 380
    Par défaut
    Resultats est un objet tu ne peux pas afficher un objet , il faut que tu récupères les éléments lisibles de l'objet comme les propriétés dans un tableau , une structure.
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  10. #10
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2014
    Messages : 15
    Points : 18
    Points
    18
    Par défaut
    en effet (j'ai édité mon poste precedent)

    mais ce que je ne comprends pas c'est : pourquoi si il ne trouve pas d'objet avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM Win32_NetworkAdapter WHERE PhysicalAdapter = true AND Description LIKE '%vir%'
    il ne me lance pas la trace, a priori, il devrait y avoir au moins la trace vide, mais il ne se passe rien, je dois systematiquement lancer mon reseau adhoc/hébergé avant pour que le script fonctionne.
    je pense que comme il ne vois pas de carte réseau contenant "vir" il ne fait rien ( mais je vois toujours pas pourquoi la trace ne s'affiche pas ) .

    j'ai essayé sans "AND Description LIKE '%vir%" et ça m'affiche bien mes interfaces de mon pc .

  11. #11
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2014
    Messages : 15
    Points : 18
    Points
    18
    Par défaut
    Ok , tout marche bien, avec mes requetes et j'ai meme modifié le critère de selection ... par contre j'ai un problème avec la combo que je remplis par programmation :

    j’exécute a l’initialisation de la combo le code donné plus haut par J-P, pour remplir la combo avec ListeAjoute(macombo,infos_de_la_querry)
    puis j'ajoute un élément conditionnel de type texte listeajoute(maCombo,"mon message") au cas ou la fonction VBS ne renverrai rien du tout .

    cette méthode de rempliassage de la combo par programmation fonctionne également, seulement, la combo ne se sélectionne pas d'elle même, je suis obligé de la dérouler pour sélectionner l’élément.

    j'ai essayé avec Listeaffiche(macombo,tadebut) mais ça ne fonctionne pas sur les combos mémoire ...


    Du coup, dans mon analyse j'ai modifié deux propriété de ma table principale : champ combo en champ type combo sur deux octets, et j'ai créé une autre propriété de type chaine/texte (50 octets) pour récupérer le nom de l'interface reseau de manuère textuelle pour que je puisse l'afficher dans ma combo ( plutot que d'avoir des chiffres dans ma combo)

    puis j'ai choisi de remplir la combo par fichier, dans la fenêtre description de la combo j'ai bien précisé que ma rubrique affiché est une chaine et la rubrique mémorisée est le combo sur 2 octet .

    avec des hmodifie(monfichier) juste après le script et ça fonctionne !
    ça me renvoie bien ce que je lui demandes mais la combo ne se rafraichis pas, je suis la aussi avec le remplissage par ficher, obligé de sélectionner le nom dans la liste déroulante... quelqu'un a une idée ?

    j'ai essayé avec listeAffiche(macombo,tadébut) ou tainit(qui fait boucler le programe) tareexecuterequete .

    voici mon bout de code a l’initialisation de la combo

    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
    sListe est une chaîne
    oScript est un objet Automation "MSScriptControl.ScriptControl"
    MonScriptVBS est une chaîne = [
    function SCR()
    Dim objWMIService, colItems, objItem, sinfo
    
    Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
    Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapter WHERE PhysicalAdapter = True AND Description LIKE '%hébergé Microsoft%'")
    
    sinfo = ""
    For Each objItem in colItems 
    	If sinfo <> "" Then sinfo = sinfo & Chr(13) & Chr(10)
    	sinfo = sinfo & objItem.netconnectionid
    	Next
    	
    	SCR = sinfo
    End Function
    ]
    oScript>>Language("VBScript")
    oScript>>Reset
    oScript>>AddCode(MonScriptVBS)
    oScript>>Timeout(-1)//pas de timeout
    sListe = oScript>>Run("SCR") //Appel
    SI sListe="" ALORS
    	parametres.NOM_WIFI_CHAINE="Adhoc non activé"
    	HModifie(parametres)
    	WIFI_NAME_CHAINE="Adhoc non activé"
    	//ListeAjoute(COMBO_WIFI_NAME,WIFI_NAME_CHAINE)
    	
    SINON
    	parametres.NOM_WIFI_CHAINE=sListe
    	HModifie(parametres)
    	WIFI_NAME_CHAINE=sListe
    	//ListeAjoute(COMBO_WIFI_NAME,WIFI_NAME_CHAINE)
    	//ListeSelectPlus(COMBO_WIFI_NAME,1)
    FIN

  12. #12
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 999
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 999
    Points : 9 380
    Points
    9 380
    Par défaut
    hello,
    merry christmas,
    avec WbemScripting.SWbemLocator il faut tester le nombre de résultat à 0 quand il n'y a pas de résultat. Pour une combo après l'avoir remplie, il faut indiquer l'index que l'on veut voir afficher. Exemple :
    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
    objLocator est un objet Automation "WbemScripting.SWbemLocator"
    objService est un objet Automation dynamique
    Resultats est un objet Automation dynamique
     
    QUAND EXCEPTION DANS
    	objService = objLocator>>ConnectServer(".", "root\cimv2")
    	objService>>Security_>>ImpersonationLevel = 3 
     
    	// Récupération des adaptateurs réseau avec une condition sur le type
    	// 0 = ethernet     9 = sans fil
    	Resultats = objService>>ExecQuery("SELECT Name,Description,MACAddress,ServiceName,NetConnectionID  FROM Win32_NetworkAdapter WHERE  AdapterTypeID = 	0")
    	SI Resultats>>Count = 0 ALORS 
    		Info("pas de résultat")
    	SINON
    	POUR x = 0 _A_ Resultats>>Count -1
    		Trace("Nom Adaptateur  : ",Resultats>>ItemIndex(x)>>Properties_>>Item("Name")>>Value )
    		Trace("Description  : ",Resultats>>ItemIndex(x)>>Properties_>>Item("Description")>>Value )
    		Trace("Adresse MAC  : ",Resultats>>ItemIndex(x)>>Properties_>>Item("MACAddress")>>Value )
    		Trace("Nom Service  : ",Resultats>>ItemIndex(x)>>Properties_>>Item("ServiceName")>>Value )
    	    Trace("Nom Réseau  : ",Resultats>>ItemIndex(x)>>Properties_>>Item("NetConnectionID")>>Value )
    	    ListeAjoute(Combo1,Resultats>>ItemIndex(x)>>Properties_>>Item("Name")>>Value)
    		Trace("=========================")
    	FIN
    	Combo1 = 1
    	FIN
     
    FAIRE
    	Erreur("Erreur execution WMI",ExceptionInfo(errInfo))
    	ExceptionActive()
    	RENVOYER "Erreur WMI"
    FIN
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  13. #13
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2014
    Messages : 15
    Points : 18
    Points
    18
    Par défaut
    Bonjour, noyeux Joel également

    je viens de tester le code, enfait l'execution du code est tellemnt rapide que la combo n'a pas le temps de se remplir , avec des

    ça passe, et la combo se sélectionne d'elle même .

    j'ai du utiliser également multitâche pour temporiser le programme avant de rentrer des valeurs en mémoire dans les variable au changement d’état d'un interrupteur

    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
    //ENVOI DES AUTRES INSTRUCTION CONDITIONELLES
    	INT_AD_HOC..X=271
    	MAIN.IMG_ADHOC_OFF..Visible=Faux
    	MAIN.IMG_ADHOC_ON..Visible=Vrai
    	//tempo avant envoi de la commande juste apres avoir envoyé le  "netsh wlan start hostednetwork"
    	Multitâche(20)
    	Trace("il c'est passé 0.20s avant l'execution du code WebemScripting")
     
    	//DEBUT DETECTION CARTE RESEAU
    	// J.P Décembre 2014 - FORUM DEVELOPPEZ aka Jurasik Pork
    	objLocator est un objet Automation "WbemScripting.SWbemLocator"
    	objService est un objet Automation dynamique
    	Resultats est un objet Automation dynamique
     
    	QUAND EXCEPTION DANS
    		objService = objLocator>>ConnectServer(".", "root\cimv2")
    		objService>>Security_>>ImpersonationLevel = 3 
     
    		// Récupération des adaptateurs réseau avec une condition sur la description qui contient ...hébergé...
    		//AND Description LIKE '%vir%'
    		Resultats = objService>>ExecQuery("SELECT * FROM Win32_NetworkAdapter WHERE PhysicalAdapter = True AND Description LIKE '%hébergé Microsoft%' ")	
    		POUR x = 0 _A_ Resultats>>Count -1
    			Trace("Nom connexion  : ",Resultats>>ItemIndex(x)>>Properties_>>Item("Netconnectionid")>>Value )
    			WIFI_NAME_CHAINE=(Resultats>>ItemIndex(x)>>Properties_>>Item("Netconnectionid")>>Value)
    			Trace("=======NOM DE LA CARTE WAILLE FAILLE VIRTUELLE==========")
    			Trace(WIFI_NAME_CHAINE)
    		FIN
    	FAIRE
    		Erreur("Erreur execution WMI",ExceptionInfo(errInfo))
    		ExceptionActive()
    		RENVOYER "Erreur WMI"
    	FIN
    	///////FIN DETECTION CARTES RESEAU
    la j'ai fait une batterie de tests et ça fonctionne


    voici mon code adapté a mon utilisation

    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
    //Déclaration des élements necessaire au fonctionnement de "WbemScripting.SWbemLocator"
    objLocator est un objet Automation "WbemScripting.SWbemLocator"
    objService est un objet Automation dynamique
    Resultats est un objet Automation dynamique
    //Déclaration d'une chaine qui va stocker le resultat de la query
    resultatquery est une chaîne
    QUAND EXCEPTION DANS
    	objService = objLocator>>ConnectServer(".", "root\cimv2")
    	objService>>Security_>>ImpersonationLevel = 3 
     
    	//Modification de la QUERY et du script pour sélectionner uniquement les cartes contenant ..."hébergé"... dans leurs Descriptions 
    	Resultats = objService>>ExecQuery("SELECT Description,NetConnectionID  FROM Win32_NetworkAdapter WHERE  AdapterTypeID = 0 AND Description LIKE '%hébergé%'")
    		POUR x = 0 _A_ Resultats>>Count -1
    			//Feedback Visuel
    			Trace("Nom Réseau  : ",Resultats>>ItemIndex(x)>>Properties_>>Item("NetConnectionID")>>Value )
    			resultatquery = (Resultats>>ItemIndex(x)>>Properties_>>Item("NetConnectionID")>>Value)
    			//Si resulstatquery="0" : il se trouve que sur mon pc il retourne un resultat qui est 0 meme si le adhoc n'est pas activé ! donc mise en condition 
    			SI resultatquery = "0" ALORS
    				//temporisation du programme avant l'execution du code qui précède le Multitâche(20)
    				Multitâche(20)
    				ListeAjoute(COMBO_WIFI_NAME,"Adhoc Non activé")
    				COMBO_WIFI_NAME = 1
    				Trace("La combo dans le ""SI"" est a la position : "+COMBO_WIFI_NAME)
    			SINON
    			Multitâche(20)
    			ListeAjoute(COMBO_WIFI_NAME,Resultats>>ItemIndex(x)>>Properties_>>Item("NetConnectionID")>>Value)
    			COMBO_WIFI_NAME = 1
    			Trace("La combo dans le ""SINON"" est a la position : "+COMBO_WIFI_NAME)
    			FIN
    		FIN
    		COMBO_WIFI_NAME = 1	
    FAIRE
    	//Vérification des infos extraites quand il y a une exeption dans "objService"
    	Erreur("Erreur execution WMI",ExceptionInfo(errInfo))
    	ExceptionActive()
    	RENVOYER "Erreur WMI"
    FIN
    Je développe sur un pc portable equipé d'un core i7 première génération @2.0GHZ, je ne sais pas si c'est lié a mon bug de rafraichissement de combo ... mais avec les temporisations ça fonctionne .


    un grand merci à toi J-P , tu dois connaitre énormément de choses sous Windows( partie scripting réseau ) ainsi que dans d'autres langages .

    je suis très impressionné


    par contre une dernière petite chose : dans mon code je laisse la possibilité a l'utilisateur de modifier le nom de la connexion réseau de la carte virtuelle ( plutot que d'avoir connexion au reseau local n°xx)

    quand je valide j'aimerais que la combo se rafraichisse mais cette fois avec le nouveau nom . il entre bien en variable mais je ne vois pas comment faire , j'ai essayé un listeSupprimeTout(MaCombo) Listeajoute(macombo,nouveauNom)en fermeture de fenetre mais ça ne fonctionne pas

    une idée ?


    il y avais un hlitrecherche avec des anciennes valeurs de recherches qui trainais . la ça fonctionne a présent avec le code de fermeture

  14. #14
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2014
    Messages : 15
    Points : 18
    Points
    18
    Par défaut
    Bonjour

    j'ai une autre question : quand je lance mon application sur un PC Windows 7 32 bits . la trace du script "WbemScripting.SWbemLocator" ne fonctionne pas .

    par contre j'ai pu tester mon appli que sur deux machines en W8/8.1/Pro 64 Bits et ça marche sans problèmes .

    d'où pourrais provenir le problème ?

Discussions similaires

  1. Nom carte réseau
    Par Logiinx dans le forum VB.NET
    Réponses: 4
    Dernier message: 12/09/2014, 18h15
  2. Utilisation de variables pour nom de widgets
    Par Matmal11 dans le forum Tcl/Tk
    Réponses: 1
    Dernier message: 20/08/2009, 17h52
  3. [Carte réseau] un driver pour une carte réseau?
    Par adil_vpb dans le forum Hardware
    Réponses: 5
    Dernier message: 20/04/2007, 13h48
  4. Réponses: 7
    Dernier message: 07/09/2004, 14h16
  5. [XSL] utiliser une variable pour nom d'élément
    Par luta dans le forum XSL/XSLT/XPATH
    Réponses: 13
    Dernier message: 07/09/2004, 13h58

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