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

Python Discussion :

[sys] besoin d'aide pour exécuter une fonction d'un DLL


Sujet :

Python

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut [sys] besoin d'aide pour exécuter une fonction d'un DLL
    Bonjour,

    je suis actuellement en train d'apprendre à programmer en Python en autodidacte.

    Pour me lancer dans un défi qui corresponds à un besoin dans mon travail (Automaticien/Roboticien dans la programmation de machine Spé), j'essais de programme un logiciel de changement D'IP automatique de ma/mes carte(s) Réseau.

    l'idée est que le logiciel puisse afficher une GUI avec 3 ou 4 info sur la carte réseau actuellement utilisé/sélectionné et des boutons pour assigner une IP fixe à ma carte, mettre la carte en DHCP, écrire le masque-sous-réseau, etc...

    Pour ce faire, je m'aide d'une librairie qui effectue ses actions mais sous un autre langage (AutoIT 3) (lien de la librairie : Impossible de mettre un lien dans le message ) et j'essais de réécrire cette librairie en Python pour partager cette librairie au plus grand nombre

    mon soucis est le suivant quand j'essais d'exécuté la fonction "DisableNetAdapter" j'ai plusieurs erreur qui apparaisse.

    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
    from pprint import pprint
    import winreg
    import ctypes
    import win32com.client
    import platform
     
    wbemFlagReturnImmediately = 0x10
    wbemFlagForwardOnly = 0x20
    Name_PC =platform.node()
     
     
     
    # #FUNCTION# ====================================================================================================================
    # Name...........: _DisableNetAdapter
    # Description....: Disables the specified network adapter.
    # Syntax.........: _DisableNetAdapter($sNetAdapter)
    # Parameters.....: $sNetAdapter    - Name of the network adapter.
    #                                    The Windows network connection name can be used instead of network adapter.
    # Return values..: Success  - 1
    #                  Failure  - 0
    # ===============================================================================================================================
     
    def DisableNetAdapter(NetAdapter):
        wmi_instance = win32com.client.GetObject(r"winmgmts:\\"+ Name_PC + r"\root\cimv2")
        if wmi_instance == 0:
            return 0
        adapterName = GetNetworkAdapterFromID(NetAdapter)
        QueryNetAdapterConfig = str("select * from Win32_NetworkAdapter Where Name = '" + adapterName + "'")
        colNetAdapterConfig = wmi_instance.ExecQuery(QueryNetAdapterConfig,"WQL",(wbemFlagReturnImmediately+wbemFlagForwardOnly))
        if not type(colNetAdapterConfig) is win32com.client.CDispatch:
            return 0
        for objNetAdapter in colNetAdapterConfig:
            try:
                return_obj = ctypes.c_uint32(objNetAdapter.Disable()).value
                if return_obj == 0:
                    return 1
            except:
                pass
        return 0
     
    # #FUNCTION# ====================================================================================================================
    # Name...........: _GetNetworkAdapterFromID
    # Description....: Get the network card name from its Windows network connection name
    # Syntax.........: _GetNetworkAdapterFromID($sNetworkID)
    # Parameters.....: $sNetworkID        - Name of the network connection (ex: Local Area Network).
    # Return values..: Success  - Returns the network adapter name
    #                  Failure  - 0
    # ===============================================================================================================================
     
    def GetNetworkAdapterFromID(NetworkID):
        NetworkList = GetNetworkAdapterList()
        if NetworkList == 0:
            return 0
        for i in range(len(NetworkList)):
            if NetworkList[i][1] == NetworkID:
                return NetworkList[i][0]
        return 0
     
    # #FUNCTION# ====================================================================================================================
    # Name...........: _GetNetworkAdapterList
    # Description....: Get a list of Ethernet network adapter installed on the system
    # Syntax.........: _GetNetworkAdapterList()
    # Return values..: Success  - Returns a 2 dimensional array.
    #                    element[n][0] - Name of the network adapter
    #                    element[n][1] - Name of the network ID
    #                  Failure  - 0
    # ===============================================================================================================================
     
    def GetNetworkAdapterList():
     
        Reg = winreg.ConnectRegistry(None,winreg.HKEY_LOCAL_MACHINE)
        Key = winreg.OpenKey(Reg,r"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces")
        Guid = [];index = [];list1 = [];list2 = [];i = 0
        while 1:
            try:
                Guid.append(winreg.EnumKey(Key,i).upper())
                i += 1
            except: 
                break
        winreg.CloseKey(Key)
        i = 0
        while 1:
            index.append(winreg.EnumKey((winreg.OpenKey(Reg,r"SYSTEM\\CurrentControlSet\\Control\\Class\\{4D36E972-E325-11CE-BFC1-08002BE10318}\\")),i)) 
            try:
                for j in range(len(Guid)):
                    if (winreg.QueryValueEx(winreg.OpenKey(Reg,(r"SYSTEM\\CurrentControlSet\\Control\\Class\\{4D36E972-E325-11CE-BFC1-08002BE10318}\\" + str(index[i]))),"NetCfgInstanceId")[0]== Guid[j]):
                        list1.append(winreg.QueryValueEx(winreg.OpenKey(Reg,(r"SYSTEM\\CurrentControlSet\\Control\\Class\\{4D36E972-E325-11CE-BFC1-08002BE10318}\\"+ str(index[i])) ,1),"DriverDesc")[0])
                        list2.append(winreg.QueryValueEx(winreg.OpenKey(Reg,(r"SYSTEM\\CurrentControlSet\\Control\\Network\\{4D36E972-E325-11CE-BFC1-08002BE10318}\\"+ str(Guid[j]) + "\\Connection") ,1),"Name")[0])     
            except:
                break
            i += 1
        return tuple(zip(list1,list2))
     
    pprint(DisableNetAdapter("Ethernet"))

    donc si j'exécute pprint(DisableNetAdapter("Ethernet")) ma carte réseau est bien désactivé mais je n'ai pas le bon retour avec mon PPRINT car je devrais avoir un retour a 1 quand j'ai pas exécuté la fonction. sauf qu'en "Mode Débuggage" j'ai pu constaté que cette ligne pose problème et arrête l'exécution du "try" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return_obj = ctypes.c_uint32(objNetAdapter.Disable()).value
    j'ai donc décomposé la fonction en commentant toutes la partie "gestion défaut" avec le try et j'obtiens cette erreur :
    Une exception s'est produite : TypeError
    'int' object is not callable
    File "D:\2-Documents\Personnel\Changeur_IP_TEST.py", line 34, in DisableNetAdapter
    return_obj = ctypes.c_uint32(objNetAdapter.Disable()).value
    ^^^^^^^^^^^^^^^^^^^^
    File "D:\2-Documents\Personnel\Changeur_IP_TEST.py", line 250, in <module>
    pprint(DisableNetAdapter("Ethernet"))
    ^^^^^^^^^^^^^^^^^^
    TypeError: 'int' object is not callable
    j'ai beaucoup chercher sur internet mais je ne comprends pas bien l'erreur pouvez-vous m'aidez a la comprendre ?

    je ne comprends pas comment utilisé ctypes pour pouvoir "charger" les fonctions d'un DLL dans mon projet Python.
    si j'ai bien compris la librairie utilise le DLL cimwin32.dll .
    Fichiers attachés Fichiers attachés
    Dernière modification par ProgElecT ; 22/02/2024 à 14h11. Motif: Bienvenue sur DVP, pour les citations - -> balises[QUOTE] . . . [/QUOTE]

Discussions similaires

  1. Besoin d'aide pour créer une fonction
    Par Arnvincent dans le forum R
    Réponses: 3
    Dernier message: 07/06/2020, 19h32
  2. [AC-2013] Besoin d'aide pour modifier une fonction
    Par Jsiorat dans le forum VBA Access
    Réponses: 4
    Dernier message: 15/11/2018, 10h27
  3. besoin d'aide pour faire une fonction explicite
    Par killianfer dans le forum Général Python
    Réponses: 1
    Dernier message: 03/11/2018, 11h20
  4. Besoin d'aide pour créer une fonction
    Par xavxx58 dans le forum Prolog
    Réponses: 13
    Dernier message: 14/09/2008, 13h03
  5. besoin d'aide pour intégrer une entité dans un MCD
    Par barkleyfr dans le forum Schéma
    Réponses: 17
    Dernier message: 13/10/2005, 13h29

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