Estoy tratando de simular un clic del mouse en una ventana. Actualmente tengo éxito haciendo esto de la siguiente manera (estoy usando Python, pero debe aplicarse a Win32 general):win32: simular un clic sin simular el movimiento del mouse?
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 descarta. ¿Hay alguna manera de enviar un clic directamente a una determinada coordenada (x,y)
sin mover el mouse allí? He intentado algo como lo siguiente con no 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)
Las coordenadas que tengo son coordenadas absolutas, sin embargo, no son coordenadas relativas a la posición de la ventana ... ¿PostMessage las transmitirá como absolutas o como relativas a la ventana? De hecho, ya podía obtener el hwnd, pero la traducción de mis coords a '(x - left, y - top)', donde obtuve 'left' y' top' de 'GetWindowRect' no hizo clic en el lugar correcto. – Claudiu
Ah, de verdad. Necesita convertir una posición de clic absoluta en la relativa. Use ScreenToClient (hWnd, lpPoint) antes de PostMessage – Andrew
¡ah, intentaré eso! ¿Hay alguna diferencia entre postmessage y sendmessage en este caso? – Claudiu