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 :

récupérer la position du curseur clavier pas souris


Sujet :

Python

  1. #1
    Membre confirmé
    Homme Profil pro
    support technique
    Inscrit en
    Mars 2020
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : support technique

    Informations forums :
    Inscription : Mars 2020
    Messages : 79
    Par défaut récupérer la position du curseur clavier pas souris
    Bonjour,
    J'ai fait un petit script qui met dans une liste tous les ctrl C et qui permettrait de les coller par la suite.
    Je coince au moment justement de les coller
    Il faudrait que je récupère la position du curseur clavier avant le click sur la liste afin de coller au bon endroit ?
    Sauriez vous comment récupérer le curseur clavier (qui est forcément différent du curseur souris) ?

    Le programme ci-dessous stocke les Ctrl C, les mets dans une liste. Quand on clique sur la liste il les met en mémoire et faut que j'aille clicker là ou je veux les mettre et que je fasse un Ctrl V, j'aimerai éliminer cette dernière étape.
    En espérant avoir été assez clair.
    Merci d'avance.
    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
    from clipboard import paste, copy
    from pynput.keyboard import GlobalHotKeys, Controller
    from tkinter import Tk, Listbox, Button, Frame
    from tkinter import Scrollbar, Y, LEFT, RIGHT, TOP
    # import tkinter as Tk
    global var
    global Lb
    var = []
    keyboard = Controller()
     
    def metdansvar():
        global var
        var.append(paste())
     
     
    def quitte():
        h.stop()
     
     
    def showclip():
        def clic(evt):
            i = Lb.curselection()
            copy(Lb.get(i))
     
        f1 = Frame(root)
        s1 = Scrollbar(f1)
        Lb = Listbox(f1)
        for i in range(len(var)):
            Lb.insert(i, var[i])
        s1.config(command=Lb.yview)
        Lb.config(yscrollcommand=s1.set, width=0, height=0)
        Lb.pack(side=LEFT, fill=Y)
        s1.pack(side=RIGHT, fill=Y)
        f1.pack()
        Lb.bind('<ButtonRelease-1>', clic)
     
     
    with GlobalHotKeys({'<ctrl>+q': quitte, '<ctrl>+c': metdansvar}) as h:
     
        root = Tk()
        button1 = Button(root, text='Refresh', command=showclip,
                         padx=10, justify='center', width=50)
        button1.pack(side=TOP, fill=Y)
        root.mainloop()
        h.join()

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 762
    Par défaut
    Citation Envoyé par figuedi Voir le message
    Sauriez vous comment récupérer le curseur clavier (qui est forcément différent du curseur souris) ?
    Pas sûr qu'une telle chose existe et ce que vous voulez en faire n'est pas si clair.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre confirmé
    Homme Profil pro
    support technique
    Inscrit en
    Mars 2020
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : support technique

    Informations forums :
    Inscription : Mars 2020
    Messages : 79
    Par défaut
    Ce que je veux faire c'est garder en mémoire la dernière application.

    j'ai trouvé ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    from win32gui import GetWindowText, GetForegroundWindow, SetForegroundWindow
    current_old=GetWindowText(GetForegroundWindow())
    SetForegroundWindow(current_old)
    Je veux stocker l'ancienne application active après chaque changement comme ça quand je vais cliquer dans ma listBox je met l'application active -1 en acrive et mon ctrl V devrait fonctionner.
    Il ne me reste plus qu'à comprendre comment le faire. mais déjà j'ai trouvé peut etre l'outil

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 762
    Par défaut
    Citation Envoyé par figuedi Voir le message
    Ce que je veux faire c'est garder en mémoire la dernière application.
    Et vous voyez bien que ce sont des appels "systèmes" Windows... et que vous demandez de l'aide probablement dans un mauvais forum.

    note: ah oui... vous ne savez programmer qu'avec python, le monde doit donc se décliner depuis Python... en fait, c'est un peu plus compliqué: regardez le nombre de rubriques/forums qu'il existe sur DVP!

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre confirmé
    Homme Profil pro
    support technique
    Inscrit en
    Mars 2020
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : support technique

    Informations forums :
    Inscription : Mars 2020
    Messages : 79
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    note: ah oui... vous ne savez programmer qu'avec python, le monde doit donc se décliner depuis Python... en fait, c'est un peu plus compliqué: regardez le nombre de rubriques/forums qu'il existe sur DVP!
    - W
    Je vous trouve bien généreux quand vous dites que je ne sais programmer qu'en Python, mais bon merci du compliment

    C'est vrai que c'est plus simple que je refasse tout le reste vu que Python n'a pas de librairie dédiée à la position du curseur.
    Le fait de ne pas trouver sur google (qui est pourtant mon ami fidèle) aurait du me mettre la puce à l'oreille.
    Et je n'aurais certes pas du poser la question sur le forum.

    Toutes mes excuses pour le dérangement occasionné.

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 762
    Par défaut
    Citation Envoyé par figuedi Voir le message
    C'est vrai que c'est plus simple que je refasse tout le reste vu que Python n'a pas de librairie dédiée à la position du curseur.
    Pourquoi voulez vous que Python ait ce genre de bibliothèque? C'est le boulot de l'OS.
    Sur Windows, l'interface pour le programmeur Python est win32.
    Et le sujet est de la programmation avancée dans le monde Windows.

    Citation Envoyé par figuedi Voir le message
    Le fait de ne pas trouver sur google (qui est pourtant mon ami fidèle) aurait du me mettre la puce à l'oreille.
    Parce que vous regardez le monde depuis le point de vue "python" en ignorant que ce n'est qu'un langage de programmation et que la plupart des fonctionnalités intéressantes d'un ordinateur sont fournies/gérées par l'OS.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre confirmé
    Homme Profil pro
    support technique
    Inscrit en
    Mars 2020
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : support technique

    Informations forums :
    Inscription : Mars 2020
    Messages : 79
    Par défaut
    Pyinput me donne la position du curseur souris, il aurait pu donner la position du curseur clavier.

    Il y a un module clavier et un module souris avec des "Listener" et des "Contoller", il permet de détecter la position de la souris le click ou le double click, et le clavier detecte les frappes claviers, peut les reproduire ou les enregistrer.
    JE m'étais dit que comme le module souris détecté la position du curseur pourquoi le clavier ne detecterait il pas la position du curseur clavier.

    Comme il ne le fait pas je me suis dit si je détecte la fenâtre activre j'aurai peut etre la position du curseur clavier.

    Mais je n'en suis pas sûr j'essaie je tâtonne, je m'amuse car je vous avouerai que j'en ai aucun interêt. Ma boite m'a payé l'abonnement à TypeItIn qui a déjà cette fonctionnalité avec d'autres.
    J'ai réussis à reproduire les autres qui sont en fait juste une automatisation de certains evenements et je me suis dit que si je savais faire cette gestion de clipboard je pourrais faire économiser à ma boite les 40€. MAis que c'est une enorme société Américaine ils s'en foutent un peu de ces 40€ par ans.

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 762
    Par défaut
    Citation Envoyé par figuedi Voir le message
    Comme il ne le fait pas je me suis dit si je détecte la fenâtre activre j'aurai peut etre la position du curseur clavier.
    Les entrées clavier vont toujours à une application bien définie et seront associées à une fenêtre bien définie de cette application. Reste à savoir comment cela se traduit sur le GUI natif de windows et si on ne trouve pas en cherchant sur Internet, on peut toujours demander dans un forum windows.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Membre confirmé
    Homme Profil pro
    support technique
    Inscrit en
    Mars 2020
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : support technique

    Informations forums :
    Inscription : Mars 2020
    Messages : 79
    Par défaut
    Bon j'ai fini par trouver
    en utilisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    from win32gui import GetForegroundWindow, SetForegroundWindow
    On récupère bien la fenetre activre mais le focus n'est pas mis dessus, mais avec la fonction SetFocus()
    En fait il existes un moyen en appuyant sur "alt"
    J'ai donc réussi à mettre les Ctrl C dans une listbox de Tkinter et quand je clique sur un des éléments de la liste Box, il me les colle bien directement là ou je veux

    Le programme est ici.

    C'était juste pour clore la discussion même si elle était déjà résolue

    Bonne journée

    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
    from win32gui import GetForegroundWindow, SetForegroundWindow
    from pynput.keyboard import Controller, Key, GlobalHotKeys
    from tkinter import Tk, Listbox,  Frame
    from tkinter import Scrollbar, Y, LEFT, RIGHT, END
    from time import sleep
    from clipboard import paste, copy
    keyboard = Controller()
    global fenetrecoller
    global var
    var = []
     
     
    def copier():
        global fenetrecoller
        keyboard.press(Key.alt)
        try:
            SetForegroundWindow(fenetrecoller)
        finally:
            keyboard.release(Key.alt)
            keyboard.press(Key.ctrl)
            keyboard.press('v')
            keyboard.release('v')
            keyboard.release(Key.ctrl)
     
     
    def coller():
        global fenetrecoller
        fenetrecoller = GetForegroundWindow()
     
     
    def metdansvar():
        global var
        Lb.delete(0, END)
        sleep(0.25)
        var.append(paste())
        if len(var) > 20:
            for i in range(len(var)-20, len(var)):
                Lb.insert(i, var[i])
        else:
            for i in range(len(var)):
                Lb.insert(i, var[i])
        Lb.bind('<ButtonRelease-1>', clic)
     
     
    def clic(evt):
        sleep(0.25)
        i = Lb.curselection()
        copy(Lb.get(i))
        keyboard.press(Key.alt)
        try:
            SetForegroundWindow(fenetrecoller)
        finally:    
            keyboard.release(Key.alt)
            keyboard.press(Key.ctrl)
            keyboard.press('v')
            keyboard.release('v')
            keyboard.release(Key.ctrl)
     
     
    with GlobalHotKeys({'<ctrl>+c': metdansvar,
                       '<ctrl>+v': coller}) as h:
        root = Tk()
        root.title('shortcut to fill RIT')
        f1 = Frame(root)
        Lb = Listbox(f1)
        Sc = Scrollbar(f1)
        Sc.config(command=Lb.yview)
        Lb.config(yscrollcommand=Sc.set, width=0, height=0)
        Lb.pack(side=LEFT, fill=Y)
        Sc.pack(side=RIGHT, fill=Y)
        f1.pack()
        Lb.bind('<ButtonRelease-1>', clic)
        root.mainloop()
        h.join()

  10. #10
    Membre confirmé
    Homme Profil pro
    support technique
    Inscrit en
    Mars 2020
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : support technique

    Informations forums :
    Inscription : Mars 2020
    Messages : 79
    Par défaut
    Avec la gestion de l'erreur qui ne me gênait pas trop mais ça le fait pas trop quand même
    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
    from win32gui import GetForegroundWindow, SetForegroundWindow
    from pynput.keyboard import Controller, Key, GlobalHotKeys
    from tkinter import Tk, Listbox, Frame, Toplevel, Label
    from tkinter import Scrollbar, Y, LEFT, RIGHT, END
    from time import sleep
    from clipboard import paste, copy
    keyboard = Controller()
    global fenetrecoller
    global var
    # fenetrecoller = ''
    var = []
     
     
    def coller():
        global fenetrecoller
        fenetrecoller = GetForegroundWindow()
     
     
    def metdansvar():
        global var
        Lb.delete(0, END)
        sleep(0.25)
        var.append(paste())
        if len(var) > 20:
            for i in range(len(var)-20, len(var)):
                Lb.insert(i, var[i])
        else:
            for i in range(len(var)):
                Lb.insert(i, var[i])
        Lb.bind('<ButtonRelease-1>', clic)
     
     
    def clic2(evt):
        sleep(0.25)
        i = Lb.curselection()
        copy(Lb.get(i))
        if fenetrecoller != '':
            keyboard.press(Key.alt)
            SetForegroundWindow(fenetrecoller)
            keyboard.release(Key.alt)
            with keyboard.pressed(Key.ctrl):
                keyboard.press('v')
                keyboard.release('v')
     
     
    def ask4name():
        keyboard.release(Key.alt)
        ask = Toplevel(root)
        label = Label(ask, text='merci de faire le premier Ctrl V tout seul pour que'
                      ' je sache ou vous voulez copier les autres')
        label.pack()
     
     
    def clic(evt):
        sleep(0.25)
        i = Lb.curselection()
        copy(Lb.get(i))
        keyboard.press(Key.alt)
        try:
            SetForegroundWindow(fenetrecoller)
        except NameError:
            ask4name()
        finally:
            keyboard.release(Key.alt)
            keyboard.press(Key.ctrl)
            keyboard.press('v')
            keyboard.release('v')
            keyboard.release(Key.ctrl)
     
     
    with GlobalHotKeys({'<ctrl>+c': metdansvar,
                       '<ctrl>+v': coller}) as h:
        root = Tk()
        root.title('shortcut to fill RIT')
        f1 = Frame(root)
        Lb = Listbox(f1)
        Sc = Scrollbar(f1)
        Sc.config(command=Lb.yview)
        Lb.config(yscrollcommand=Sc.set, width=50, height=10)
        Lb.pack(side=LEFT, fill=Y)
        Sc.pack(side=RIGHT, fill=Y)
        f1.pack()
        Lb.bind('<ButtonRelease-1>', clic)
        root.mainloop()
        h.join()

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Pb de position du curseur de ma souris
    Par BuzzLeclaire dans le forum Débuter
    Réponses: 0
    Dernier message: 19/10/2009, 13h14
  2. [Plugin] Récupérer la position du curseur
    Par Amon dans le forum Eclipse Platform
    Réponses: 4
    Dernier message: 12/02/2009, 10h38
  3. récupérer la position du curseur
    Par yababas dans le forum Débuter
    Réponses: 2
    Dernier message: 16/06/2008, 10h33
  4. Récupérer la position sur X de la souris selon certaines conditions
    Par remilafouine dans le forum ActionScript 1 & ActionScript 2
    Réponses: 5
    Dernier message: 05/07/2007, 13h07
  5. position du curseur de la souris et php
    Par Manfried dans le forum Langage
    Réponses: 2
    Dernier message: 20/12/2005, 22h27

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