Simuler Ctrl+c depuis Python vers le clavier .

[Fermé]
Signaler
Messages postés
38
Date d'inscription
mardi 17 juin 2014
Statut
Membre
Dernière intervention
15 août 2014
-
Messages postés
38
Date d'inscription
mardi 17 juin 2014
Statut
Membre
Dernière intervention
15 août 2014
-
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


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
Messages postés
38
Date d'inscription
mardi 17 juin 2014
Statut
Membre
Dernière intervention
15 août 2014
1
Merci je vais chercher de se côté là .
Messages postés
4068
Date d'inscription
jeudi 18 août 2011
Statut
Membre
Dernière intervention
19 juin 2017
707
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
Messages postés
38
Date d'inscription
mardi 17 juin 2014
Statut
Membre
Dernière intervention
15 août 2014
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.