J'essaye de simuler un clic de souris sur une fenêtre. J'ai actuellement le succès à faire, comme suit (j'utilise Python, mais il devrait appliquer à win32 général):win32: simuler un clic sans simuler le mouvement de la souris?
win32api.SetCursorPos((x,y))
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,0,0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0)
Cela fonctionne très bien. Toutefois, si le clic se produit lorsque je déplace manuellement la souris, la position du curseur est désactivée. Est-il possible d'envoyer un clic directement à une coordonnée donnée (x,y)
sans y déplacer la souris? J'ai essayé quelque chose comme ce qui suit avec pas beaucoup de chance:
nx = x*65535/win32api.GetSystemMetrics(0)
ny = y*65535/win32api.GetSystemMetrics(1)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN | \
win32con.MOUSEEVENTF_ABSOLUTE,nx,ny)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP | \
win32con.MOUSEEVENTF_ABSOLUTE,nx,ny)
Les coordonnées que j'ai sont des coordonnées absolues, cependant, pas de coordonnées par rapport à la position de la fenêtre. PostMessage les transmettra-t-il comme absolues ou comme celles relatives à la fenêtre? En fait, je pouvais déjà obtenir le hwnd, mais traduire juste mes coords à '(x - left, y - top)', où 'got' left' et 'top' de' GetWindowRect' ne cliquait pas au bon endroit. – Claudiu
Ah, vraiment. Vous devez convertir une position de clic absolue dans le relatif. Utilisez ScreenToClient (hWnd, lpPoint) avant PostMessage – Andrew
ah ty, je vais essayer ça! Y a-t-il des différences entre postmessage et sendmessage dans ce cas? – Claudiu