Ich versuche, einen Mausklick auf ein Fenster zu simulieren. Im Moment habe ich Erfolg tut dies wie folgt (ich bin mit Python, aber es sollte auf allgemeines win32 gelten):win32: einen Klick simulieren, ohne Mausbewegungen zu simulieren?
win32api.SetCursorPos((x,y))
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,0,0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0)
Dies funktioniert gut. Wenn das Klicken jedoch geschieht, während ich die Maus manuell bewege, wird die Cursorposition abgeworfen. Gibt es eine Möglichkeit, einen Klick direkt an eine gegebene (x,y)
Koordinate zu senden, ohne die Maus dort zu bewegen? Ich habe mit nicht viel Glück so etwas wie das folgende versucht:
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)
Die Koordinaten, die ich habe, sind absolute Koordinaten, aber keine Koordinaten relativ zur Fensterposition. Wird PostMessage sie als absolute oder als solche relativ zum Fenster übertragen? Ich könnte das hwnd schon bekommen, aber nur meine Coords in '(x - left, y - top)' übersetzen, wo ich 'left' und' top' von 'GetWindowRect' habe, hat nicht an der richtigen Stelle geklickt. – Claudiu
Ah, wirklich. Sie müssen eine absolute Klickposition in die relative konvertieren. Verwenden Sie ScreenToClient (hWnd, lpPoint) vor PostMessage – Andrew
ah ty, ich werde das versuchen! Gibt es in diesem Fall einen Unterschied zwischen Postnachricht und Sendemeldung? – Claudiu