Simuler Ctrl+c depuis Python vers le clavier .

papanou1965 Messages postés 31 Date d'inscription   Statut Membre Dernière intervention   -  
papanou1965 Messages postés 31 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour, Voilà le soucis à six sous.
J'arrive sans problème à détecter une frappe de Ctrl+c au clavier dans Python.
Mais je n'arrive pas à faire le contraire .
C'est à dire de remplacer l'utilisateur par Python et de lui faire faire un Ctrl+c.
Cela fait 3 jours que j'arpente le net et je ne m'en sort pas .
Si vous aviez une petite indication pour m'aider ce serais sympa.

4 réponses

  1. Utilisateur anonyme
     
    Il faut envoyer un signal, il existe un module en python qui se nomme justement signal et je pense que celui qui t'intéresse est SIGINT
    0
  2. papanou1965 Messages postés 31 Date d'inscription   Statut Membre Dernière intervention   1
     
    Merci je vais chercher de se côté là .
    0
  3. Sugel Messages postés 4293 Date d'inscription   Statut Membre Dernière intervention   728
     
    tu peut apparemment le faire avec ctypes:
    import ctypes
    import time
    
    SendInput = ctypes.windll.user32.SendInput
    
    # C struct redefinitions 
    PUL = ctypes.POINTER(ctypes.c_ulong)
    class KeyBdInput(ctypes.Structure):
        _fields_ = [("wVk", ctypes.c_ushort),
                    ("wScan", ctypes.c_ushort),
                    ("dwFlags", ctypes.c_ulong),
                    ("time", ctypes.c_ulong),
                    ("dwExtraInfo", PUL)]
    
    class HardwareInput(ctypes.Structure):
        _fields_ = [("uMsg", ctypes.c_ulong),
                    ("wParamL", ctypes.c_short),
                    ("wParamH", ctypes.c_ushort)]
    
    class MouseInput(ctypes.Structure):
        _fields_ = [("dx", ctypes.c_long),
                    ("dy", ctypes.c_long),
                    ("mouseData", ctypes.c_ulong),
                    ("dwFlags", ctypes.c_ulong),
                    ("time",ctypes.c_ulong),
                    ("dwExtraInfo", PUL)]
    
    class Input_I(ctypes.Union):
        _fields_ = [("ki", KeyBdInput),
                     ("mi", MouseInput),
                     ("hi", HardwareInput)]
    
    class Input(ctypes.Structure):
        _fields_ = [("type", ctypes.c_ulong),
                    ("ii", Input_I)]
    
    # Actuals Functions
    
    def PressKey(hexKeyCode):
    
        extra = ctypes.c_ulong(0)
        ii_ = Input_I()
        ii_.ki = KeyBdInput( hexKeyCode, 0x48, 0, 0, ctypes.pointer(extra) )
        x = Input( ctypes.c_ulong(1), ii_ )
        SendInput(1, ctypes.pointer(x), ctypes.sizeof(x))
    
    def ReleaseKey(hexKeyCode):
    
        extra = ctypes.c_ulong(0)
        ii_ = Input_I()
        ii_.ki = KeyBdInput( hexKeyCode, 0x48, 0x0002, 0, ctypes.pointer(extra) )
        x = Input( ctypes.c_ulong(1), ii_ )
        SendInput(1, ctypes.pointer(x), ctypes.sizeof(x))
    
    
    def run():
        PressKey(0x11) #Ctrl
        PressKey(0x43) #C
        ReleaseKey(0x43) #~C
        ReleaseKey(0x11) #~Ctrl
    
    if __name__ =="__main__":
    
        run()


    https://stackoverflow.com/questions/13564851/how-to-generate-keyboard-events-in-python

    Google it :p
    0
  4. papanou1965 Messages postés 31 Date d'inscription   Statut Membre Dernière intervention   1
     
    Merci à vous deux .
    Voilà ce qui se passe dans les deux cas.
    Ctrl+c ferme la console.
    Et ce n'est pas ce que j'attendais , même si python fait ce qu'il doit faire .
    Je voulais faire un simple copier dans le presse papier d'une zone sélectionnée.
    Et aller lire le contenu pour l'utiliser dans une variable.
    Le script de Suguel fonctionne bien , j'espère que tu n'a pas coder tout sa.
    Moi j'ai trouvé ceci qui fait exactement pareil

    import os
    import signal
    
    os.kill(signal.CTRL_C_EVENT, 1) 
    r=input('je devrais passer ici! et attendre.')


    Le soucis c'est qu'il n'y passera jamais .
    Merci pour votre aide et désolé de vous avoir fait chercher avec moi pour des prunes.
    Bonne journée @ tous.
    0