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 :

Global Hot Key avec python 3.xx..


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Electronicien
    Inscrit en
    Août 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Electronicien
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2014
    Messages : 16
    Par défaut Global Hot Key avec python 3.xx..
    Bonsoir à tous,

    Après de longues recherches infructueuses je me décide de poster..

    Je cherche à faire un raccourcis clavier "global" qui fonctionnerait sans pour autant avoir le focus sur ma fenêtre.

    J'ai trouvé pas mal de trucs mais rien qui marche avec python 3.xx..

    Ou du moins je m'y connais pas assez pour adapter le code :/..

    Il doit surement y avoir moyen d'utiliser l'API de Windows en interceptant les Virtual-Key Codes mais de nouveau tous se que j'ai trouvé à ce sujet semble obsolète ou pas fonctionnel chez moi..

    Je suis sous Python 3.4 et Windows 7 Pro


    Merci d'avance et bonne nuit !
    Gauthier

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 695
    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 695
    Par défaut
    Salut,

    Avez vous regardé, testé l'exemple proposé par Tim Golden ici?

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

  3. #3
    Membre averti
    Homme Profil pro
    Electronicien
    Inscrit en
    Août 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Electronicien
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2014
    Messages : 16
    Par défaut
    Bonsoir et merci pour ta réponse !

    J'avais trouvé un truc similaire mais il était beaucoup plus complexe du coups j'avais rien compris ^^

    Celui-là fonctionne à merveille merci !

    Par contre comment faire pour l'utiliser avec un thread ?

    Car comme ça tout seul ça fonctionne bien mais une fois assemblé avec d'autres threads je n'arrive pas à joindre le thread du HOTKEYS.

    Tu sais comment je dois faire ?


    Merci pour ton temps,
    Bien à toi

    Gauthier

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 695
    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 695
    Par défaut
    Salut,

    Citation Envoyé par gaut5 Voir le message
    Par contre comment faire pour l'utiliser avec un thread ?

    Car comme ça tout seul ça fonctionne bien mais une fois assemblé avec d'autres threads je n'arrive pas à joindre le thread du HOTKEYS.

    Tu sais comment je dois faire ?
    Il y a trop de façons de "composer" cela avec des threads.
    Postez un exemple pour montrer ce que vous voulez faire.

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

  5. #5
    Membre averti
    Homme Profil pro
    Electronicien
    Inscrit en
    Août 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Electronicien
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2014
    Messages : 16
    Par défaut
    Bonjour et merci pour ta réponse

    Voici un exemple de se que j'aimerai faire,

    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
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    #!/usr/bin/python
     
    from PyQt5.QtCore import *
    from PyQt5.QtWidgets import *
    from PyQt5.QtGui import *
    from threading import Thread
    import os, sys, time, ctypes, win32con
    from ctypes import wintypes
     
    statut_on_off = True
     
     
    class MaFenetre(QWidget):
         def __init__(self, FL=220, FH=100):
            QWidget.__init__(self)
            self.setWindowIcon(QIcon("icone64.ico"))
            self.setWindowTitle("Test")
            self.setFixedSize(FL, FH)
     
            self.frame1 = QFrame(self)
            self.frame1.setFrameStyle(QFrame.StyledPanel | QFrame.Plain)
            self.frame1.setLineWidth(1)
            self.frame1.setMidLineWidth(1)
            self.frame1.setGeometry(5, 5, 210, 90)
     
     
         def closeEvent(self, event):
            global statut_on_off
            statut_on_off = False
            user32.PostQuitMessage (0)
     
     
     
     
     
     
    byref = ctypes.byref
    user32 = ctypes.windll.user32
     
    def handle_win_f8 ():
        os.startfile (os.environ['TEMP'])
     
    def handle_win_f9 ():
        user32.PostQuitMessage (0)                      
     
    def HotKeysS():
     
     
     
      HOTKEYS = {
        1 : (win32con.VK_F8, win32con.MOD_CONTROL),
        2 : (win32con.VK_F9, win32con.MOD_CONTROL)
      }
     
     
      HOTKEY_ACTIONS = {
        1 : handle_win_f8,
        2 : handle_win_f9
      }
     
      for id, (vk, modifiers) in HOTKEYS.items():
        print ("Registering id", id, "for key", vk)
        if not user32.RegisterHotKey (None, id, modifiers, vk):
          print ("Unable to register id", id)
     
     
      try:
        msg = wintypes.MSG ()
        while user32.GetMessageA (byref (msg), None, 0, 0) != 0:
          if msg.message == win32con.WM_HOTKEY:
            action_to_take = HOTKEY_ACTIONS.get (msg.wParam)
            if action_to_take:
              action_to_take ()
          user32.TranslateMessage (byref (msg))
          user32.DispatchMessageA (byref (msg))
      finally:
        for id in HOTKEYS.keys ():
          user32.UnregisterHotKey (None, id)
     
     
    def main():
     
        a=QApplication(sys.argv)
        fenetre=MaFenetre()
        fenetre.show()
        a.exec()
     
     
    def Boucle():
        global statut_on_off
        while statut_on_off == True:
          print("Action 1")
          time.sleep(2)
          print("Action 2")
          time.sleep(2)
          print("Action 3")
          time.sleep(2)
     
     
    thread_1 = Thread(target = main)
    thread_2 = Thread(target = Boucle)
    thread_3 = Thread(target = HotKeysS)
     
    if __name__ == '__main__':
     
        thread_1.start()
        thread_2.start()
        thread_3.start()
     
        thread_1.join()
        print("thread 1 joined.")
        thread_2.join()
        print("thread 2 joined.")
        thread_3.join()
        print("thread 3 joined.")
        sys.exit()
    Lorsque tu quitte la fenêtre les 2 premiers threads finissent mais pas le 3ème. Il faut faire F9 pour qu'il rende sa main.

    D'ailleurs je comprends pas bien ce principe de "PostQuitMessage".. Pourquoi en passant par F9 cela fonctionne et pas par ma fonction CloseEvent ?


    Merci encore !
    Bien à toi

    Gauthier

  6. #6
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 304
    Par défaut
    Salut,

    Je ne puis répondre à ta question, je suis sous Linux, mais je suis surpris que tu puisses créer ta fenêtre dans un thread.

    C'est possible sous Windows, çà ? Sous Linux, aucune chance.

Discussions similaires

  1. création de base mySQL avec python
    Par preacher_man dans le forum Bibliothèques tierces
    Réponses: 7
    Dernier message: 23/06/2006, 19h38
  2. Manipuler un fichier excel avec python
    Par dipajero dans le forum Général Python
    Réponses: 4
    Dernier message: 09/02/2006, 23h14
  3. cmt se connecté a oracle pour faire une requete avec python
    Par dipajero dans le forum Bibliothèques tierces
    Réponses: 6
    Dernier message: 28/12/2005, 20h22
  4. Réponses: 2
    Dernier message: 19/12/2005, 13h15
  5. Les 128 derniers bits d'un fichier en ligne avec Python ?
    Par ecocentric dans le forum Réseau/Web
    Réponses: 7
    Dernier message: 26/09/2005, 12h40

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