Win32: ¿simular un clic sin simular el movimiento del ratón?

Estoy tratando de simular un clic del ratón en una ventana. Actualmente tengo éxito haciendo esto de la siguiente manera (estoy usando Python, pero debería aplicarse a win32 general):

win32api.SetCursorPos((x,y)) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,0,0) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0) 

Esto funciona bien. Sin embargo, si el clic ocurre mientras muevo el mouse manualmente, la posición del cursor se desplaza. ¿Hay alguna forma de enviar un clic directamente a una coordenada dada (x,y) sin mover el mouse allí? He intentado algo como lo siguiente sin mucha suerte:

 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) 

Prueba la función WindowFromPoint ():

 POINT pt; pt.x = 30; // This is your click coordinates pt.y = 30; HWND hWnd = WindowFromPoint(pt); LPARAM lParam = MAKELPARAM(pt.x, pt.y); PostMessage(hWnd, WM_RBUTTONDOWN, MK_RBUTTON, lParam); PostMessage(hWnd, WM_RBUTTONUP, MK_RBUTTON, lParam); 

Esto no responde a la pregunta, pero resuelve mi problema:

 win32api.ClipCursor((x-1,y-1,x+1,y+1)) win32api.SetCursorPos((x,y)) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN| \ win32con.MOUSEEVENTF_ABSOLUTE,0,0) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP| \ win32con.MOUSEEVENTF_ABSOLUTE,0,0) win32api.ClipCursor((0,0,0,0)) 

El resultado es que cualquier movimiento que haga no interferirá con el clic. El inconveniente es que mi movimiento real será desordenado, por lo que todavía estoy abierto a sugerencias.