Simuler Ctrl+c depuis Python vers le clavier .

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. 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
    1. 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
      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.