2010-04-23 9 views
2

Je veux être en mesure de faire une combinaison de pressions sur les touches et clics de souris simultanément, comme par exemple dans Control+LeftClickGénération souris-clavier événements combinaison en python

En ce moment je suis en mesure de faire le contrôle, puis un clic gauche avec le code suivant:

import win32com, win32api, win32con 
def CopyBox(x, y): 
    time.sleep(.2) 
    wsh = win32com.client.Dispatch("WScript.Shell") 
    wsh.SendKeys("^") 
    win32api.SetCursorPos((x,y)) 
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, x, y, 0, 0) 
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, x, y, 0, 0) 

Ce que cela fait est appuyez sur le contrôle du clavier, puis il clique. J'en ai besoin pour garder le contrôle enfoncé plus longtemps et revenir tant qu'il est encore pressé pour continuer à exécuter le code. Existe-t-il un moyen plus bas de dire appuyer sur la touche et plus tard dans le code lui dire de soulever la clé comme ce que fait la souris?

Répondre

2

appuyer sur Ctrl:

win32api.keybd_event(win32con.VK_CONTROL, 0, win32con.KEYEVENTF_EXTENDEDKEY, 0) 

à libérer:

win32api.keybd_event(win32con.VK_CONTROL, 0, win32con.KEYEVENTF_EXTENDEDKEY | win32con.KEYEVENTF_KEYUP, 0) 

donc votre code ressemblera à ceci:

import win32api, win32con 
def CopyBox(x, y): 
    time.sleep(.2) 
    win32api.keybd_event(win32con.VK_CONTROL, 0, win32con.KEYEVENTF_EXTENDEDKEY, 0) 
    win32api.SetCursorPos((x,y)) 
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, x, y, 0, 0) 
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, x, y, 0, 0) 
    win32api.keybd_event(win32con.VK_CONTROL, 0, win32con.KEYEVENTF_KEYUP, 0) 
+0

Le pressage des travaux de contrôle parfaitement, la libération pas tellement. Après l'exécution du code, la touche Ctrl reste enfoncée jusqu'à la déconnexion ou le redémarrage. – user202459

+0

Pouvez-vous vérifier que cela fonctionne pour vous et qu'il ne s'agit pas d'un problème sur ma machine? – user202459

+0

On dirait que la chose extendedkey (Quoi que ce soit) est ce qui a causé le problème, ça fonctionne parfaitement maintenant. Merci pour votre réponse! – user202459

Questions connexes