2010-09-15 10 views
3

Y at-il une différence entre déplacer la souris dans Windows en utilisant les deux techniques suivantes?win32: déplacer la souris avec SetCursorPos vs mouse_event

win32api.SetCursorPos((x,y)) 

vs:

nx = x*65535/win32api.GetSystemMetrics(0) 
ny = y*65535/win32api.GetSystemMetrics(1) 
win32api.mouse_event(win32con.MOUSEEVENTF_ABSOLUTE|win32con.MOUSEEVENTF_MOVE,nx,ny) 

-t-il passé quelque chose différemment dans la façon dont Windows traite les mouvements?

Répondre

4

Je crois que mouse_event fonctionne en insérant les événements dans le flux d'entrée de la souris où SetCursorPos déplace simplement le curseur autour de l'écran. Je ne crois pas que SetCursorPos génère des événements d'entrée non plus (bien que je puisse me tromper).

Les implications pratiques sont que lorsque vous utilisez SetCursorPos, il déplace simplement le curseur. Lorsque, comme lorsque vous utilisez mouse_event, il insère les événements dans le flux d'entrée qui génèrent à leur tour des événements d'entrée pour tous les programmes en écoute. Cela a des implications avec les programmes qui écoutent les événements de souris de niveau inférieur plutôt que simplement les clics du curseur; jeux par exemple. En outre, si vous utilisez mouse_event pour déplacer le curseur et activer l'accélération du curseur/pointeur, le mouvement de la souris résultant doit être soumis à toutes les courbes d'accélération utilisées par Windows.

+0

Une autre différence est que SetCursorPos fonctionne pour définir la position de la souris sur un second moniteur alors que le positionnement absolu sur SendInput/mouse_event est limité à l'affichage principal. –

Questions connexes