Partage
  • Partager sur Facebook
  • Partager sur Twitter

focus console - global keys

    11 février 2014 à 10:15:06

    Bonjour,

    J'ai un programme qui me permet de cliquer à différents endroits de mon écran.

    Mon problème est le suivant, si la console n'a pas le focus, je ne peux pas quitter ma boucle à l'aide de la combinaison de touche Ctrl + C.

    En revanche si je clique sur la console alors que mon programme est en cours, la combinaison de touche Ctrl + C  fonctionne.

    Comment je peux régler ce problème ?

    Mon code :

    import win32api
    import win32con
    import time
    
    
    def clickerleft(x,y):
        """Clicks on given position x,y
    
        Input:
        x -- Horizontal position in pixels, starts from top-left position
        y -- Vertical position in pixels, start from top-left position
    
        """
    
        win32api.SetCursorPos((x,y))
        win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0)
        win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)
    
    def foo():
    	try:
    		while 1:
    			#os.system("bash command")
    			clickerleft(1193,757)
    			time.sleep(0.1)	
    			clickerleft(113,757)
    			time.sleep(30)	
    			clickerleft(1193,757)
    			time.sleep(0.1)
    	except KeyboardInterrupt:
    		print("Interrupted!")
    
    foo()
    



    -
    Edité par querzy 13 février 2014 à 19:01:30

    • Partager sur Facebook
    • Partager sur Twitter
      11 février 2014 à 16:25:31

      La combinaison ctrl-c est spécifique a la console.

      C'est comme si tu nous demandais comment enregistrer un document avec la combinaison ctr-s alors que tu as le focus sur minecraft.

      • Partager sur Facebook
      • Partager sur Twitter
      Bevet Breizh! Breizh dizalc'h! Betek an trec'h! Ha mallozh ruz d'ar c'hallaoued! Trouvez votre voie
        11 février 2014 à 18:02:59

        Je viens de trouver un début de réponse ici mais je ne sais pas vraiment comment l'appliquer !!

        Apparemment il faut passer par le dossier TEMP de windows.

        Toutes les réponses sont les bienvenues !!

        -
        Edité par querzy 11 février 2014 à 18:09:29

        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          11 février 2014 à 19:17:20

          querzy a écrit:

          Apparemment il faut passer par le dossier TEMP de windows.

          Non, c'est juste pour l'exemple que l'auteur a associé la combinaison [win] + [F3] à l'ouverture du dossier %tmp%. De ton coté tu pourrais très bien associer cette combinaison au kill d'un process (celui de cmd.exe par exemple). C'est une idée, mais peut-être que tu ne cherches pas à créer des raccourcis-clavier globaux ?

          • Partager sur Facebook
          • Partager sur Twitter
            11 février 2014 à 22:03:31

            Bonsoir,

            Merci PsycoPy. J'ai trouvé sur le site stackoverflow un exemple similaire. J'ai donc pu modifier mon code.

            Maintenant j'arrive à quitter mon programme avec la touche Echap même si je clique manuellement en-dehors de la console. Mais j'ai une question toute bête où je peux y mettre ma fonction clic ?

            Voici mon code :

            import win32api, time, win32con, ctypes, ctypes.wintypes
            from sys import exit
            
            def clickerleft(x,y):
                """Clicks on given position x,y
            
                Input:
                x -- Horizontal position in pixels, starts from top-left position
                y -- Vertical position in pixels, start from top-left position
            
                """
            
                win32api.SetCursorPos((x,y))
                win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0)
                win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)
            
            def fonctionclic():
            	while True :
            		clickerleft(438,579)
            		time.sleep(0.3)	
            		clickerleft(1155,761) 
            		time.sleep(0.3)
            		
            ctypes.windll.user32.RegisterHotKey(None, 1, 0, win32con.VK_ESCAPE)
            		
            try:
            	msg = ctypes.wintypes.MSG()
            	while ctypes.windll.user32.GetMessageA(ctypes.byref(msg), None, 0, 0) != 0:
            		if msg.message == win32con.WM_HOTKEY:			
            			exit()
            		ctypes.windll.user32.TranslateMessage(ctypes.byref(msg))
            		ctypes.windll.user32.DispatchMessageA(ctypes.byref(msg))
            finally:
                ctypes.windll.user32.UnregisterHotKey(None, 1)



            -
            Edité par querzy 12 février 2014 à 9:30:15

            • Partager sur Facebook
            • Partager sur Twitter
              13 février 2014 à 10:46:04

              Bonjour ,

              J'ai essayé de modifier mon code, je peux démarrer avec la touche F1 mais je ne peux pas sortir de la boucle de ma fonction clic avec la touche Echap (je pense que la présence d'une boucle while dans ma fonction clic m'empêche de quitter mon programme) :

              import win32api, time, win32con, ctypes, ctypes.wintypes
              from sys import exit
              
              def clickerleft(x,y):
                  """Clicks on given position x,y
              
                  Input:
                  x -- Horizontal position in pixels, starts from top-left position
                  y -- Vertical position in pixels, start from top-left position
              
                  """
              
                  win32api.SetCursorPos((x,y))
                  win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0)
                  win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)
              
              def fonctionclic():
              	while True :
              		clickerleft(438,579)
              		time.sleep(0.3)	
              		clickerleft(1155,761) 
              		time.sleep(20)
              		
              ctypes.windll.user32.RegisterHotKey(None, 1, 0, win32con.VK_ESCAPE)
              ctypes.windll.user32.RegisterHotKey(None, 2, 0, win32con.VK_F1)	
              	
              try:
              	msg = ctypes.wintypes.MSG()
              	while ctypes.windll.user32.GetMessageA(ctypes.byref(msg), None, 0, 0) != 0:
              		if msg.message == win32con.WM_HOTKEY and msg.wParam == 1:#	1 ou 2			
              			exit()
              		elif msg.message == win32con.WM_HOTKEY and msg.wParam == 2: 
              			fonctionclic()
              		ctypes.windll.user32.TranslateMessage(ctypes.byref(msg))
              		ctypes.windll.user32.DispatchMessageA(ctypes.byref(msg))
              finally:
              	ctypes.windll.user32.UnregisterHotKey(None, 1)
              	ctypes.windll.user32.UnregisterHotKey(None, 2)



              -
              Edité par querzy 13 février 2014 à 18:59:10

              • Partager sur Facebook
              • Partager sur Twitter

              focus console - global keys

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown