Maus Klick in ClientForm
-
Hallo,
hab dazu schon bissl gestöbbert und nicht wirklich viel gefunden.
Im Moment arbeite ich mit SetCursorPos(), doch das betrift immer den gesamten Bildschirm.Ich würde gerne Maus Klicks in der Form auf bestimmte Koordinaten ausführen, ohne die Maus da wirklich hinbewegen zu müssen.
Das ist die momentane Lösung...
SetCursorPos(left1 + Form1->Left,top1 + Form1->Top + 75); mouse_event (MOUSEEVENTF_LEFTDOWN, 0,0, 0, 0); mouse_event (MOUSEEVENTF_LEFTUP,0, 0, 0, 0) ;
Ist den das überhabt möglich wie ich es mir vorstelle?
Oder kann ich es mir sparen nach meiner Wunschlösung zu suchen?Danke für jeglichen Rat
-
Guck dir mal die Win API Funktion SendInput an.
Edit:
DaSendInput
mit absoluten Koordinaten arbeitet musst du die relativen Koordinaten des ClientForm noch in absolute umwandeln. Dazu gibt es die MethodeClientToScreen
.
-
DocShoe schrieb:
Guck dir mal die Win API Funktion SendInput an.
Edit:
DaSendInput
mit absoluten Koordinaten arbeitet musst du die relativen Koordinaten des ClientForm noch in absolute umwandeln. Dazu gibt es die MethodeClientToScreen
.Danke für die Antwort, hab auch in dieser Richtung schon bissl was probiert...
z.B. hier mitvoid MouseClick(int x, int y) { double fScreenWidth = GetSystemMetrics( SM_CXSCREEN )-1; double fScreenHeight = GetSystemMetrics( SM_CYSCREEN )-1; double fx = x*(65535.0f/fScreenWidth); double fy = y*(65535.0f/fScreenHeight); INPUT input; input.type = INPUT_MOUSE; input.mi.dwExtraInfo = 0L; input.mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE | MOUSEEVENTF_LEFTDOWN; input.mi.time = 0L; input.mi.mouseData = 0L; input.mi.dx = (long)fx; input.mi.dy = (long)fy; SendInput(1,&input, sizeof(INPUT)); input.mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE | MOUSEEVENTF_LEFTUP; SendInput(1,&input, sizeof(INPUT)); } int main() { MouseClick(300,300); return 0; }
Leider ist das unzureichend, das Problem ist daß die Schaltfläche auf der der Klick erfolgen soll, leider auch ein Mausfocus(MouseOver) braucht...
Jetzt bin ich auf der Suche nach der Erklärung wie ich z.B. WM_MOUSELEFTDOWN WM_MOUSELEFTUP nutzen könnte.
Bin ich da auf dem richtigem Weg?
THX für Rat
-
Ich habe das noch nie benutzt, bin nur mal irgendwann drüber gestolpert.
Vielleicht beißen sich die FlagsMOUSEEVENTF_MOVE
undMOUSEEVENTF_LEFTDOWN
/MOUSEEVENTF_LEFTDOWN
. Hast du mal versucht, das durch 3 Events zu realiseren (move/button down/button up)?
-
DocShoe schrieb:
Ich habe das noch nie benutzt, bin nur mal irgendwann drüber gestolpert.
Vielleicht beißen sich die FlagsMOUSEEVENTF_MOVE
undMOUSEEVENTF_LEFTDOWN
/MOUSEEVENTF_LEFTDOWN
. Hast du mal versucht, das durch 3 Events zu realiseren (move/button down/button up)?Wenn ich die Events MOUSELEFTDOWN und UP entferne, verschiebt er mir eben die Maus auf die Position.
Hmm... das ist ja genau das was nicht sein soll...
Es müsste doch irgendwie gehen der Form vorzugaugeln daß auf x,y eine Mauszeiger ist und ein Klick macht... Will meine Maus weiter benutzen....Hab mir jetzt schon überlegt daß er vor der Mausbewegung die x,y speichert und nach dem Klick wieder dorthin zurückkehrt...
Hab jedoch schon anwendungen gesehen, die auch im minimierten Zustand solche Events durchgeführt haben... nuer wie
THX für Rat
-
Dann simulier´ doch nur DOWN/UP Events...
-
DocShoe schrieb:
Dann simulier´ doch nur DOWN/UP Events...
Wie ich schon geschrieben habe, braucht das zu empfangene Objekt ein MouseOver Status, sonst läst es sich nicht klicken...