Simuler Ctrl+c depuis Python vers le clavier .

Fermé
papanou1965 Messages postés 37 Date d'inscription mardi 17 juin 2014 Statut Membre Dernière intervention 15 août 2014 - 14 août 2014 à 09:05
papanou1965 Messages postés 37 Date d'inscription mardi 17 juin 2014 Statut Membre Dernière intervention 15 août 2014 - 15 août 2014 à 03:17
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

Utilisateur anonyme
14 août 2014 à 11:04
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
papanou1965 Messages postés 37 Date d'inscription mardi 17 juin 2014 Statut Membre Dernière intervention 15 août 2014 1
14 août 2014 à 16:04
Merci je vais chercher de se côté là .
0
Sugel Messages postés 4070 Date d'inscription jeudi 18 août 2011 Statut Membre Dernière intervention 19 juin 2017 724
14 août 2014 à 19:36
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
papanou1965 Messages postés 37 Date d'inscription mardi 17 juin 2014 Statut Membre Dernière intervention 15 août 2014 1
15 août 2014 à 03:17
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