SendInput Mausklick
-
Ich hab mir diese 2 Funktionen geschrieben die erste funktioniert einwandfrei bei der 2ten da wird der Cursor komischerweise immer an falsche Koordinaten gesetzet. (Die Koordinaten habe ich mit GetCursorPos ermittelt. )
Was mache ich da falsch bei LeftClickPos(x,y); ?
void LeftClick() { INPUT in; in.type = INPUT_MOUSE; in.mi.dx = 48; in.mi.dy = 1008; in.mi.dwFlags = MOUSEEVENTF_LEFTDOWN; SendInput(1,&in,sizeof(in)); in.mi.dwFlags = MOUSEEVENTF_LEFTUP; SendInput(1,&in,sizeof(in)); } void LeftClickPos(int x,int y) { INPUT in; in.type = INPUT_MOUSE; in.mi.dx = x; in.mi.dy = y; in.mi.dwFlags = MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_MOVE; SendInput(1,&in,sizeof(in)); in.mi.dwFlags = MOUSEEVENTF_LEFTUP | MOUSEEVENTF_MOVE; SendInput(1,&in,sizeof(in)); }
-
wie wärs wenn man den mauszeiger mit
SetCursorPos(int x, int y)
an die richtige Position setzt?
-
Ja da habe ich auch schon dran gedachte aber ich dachte eigentlich das könnte man mit SendInput auch machen. Laut MSDN geht das ja auch aber ich krieg es nicht hin.
-
Die Mauskoordinaten werden bei sendInput nicht in Pixel, sondern einer komischen anderen Einheit angegeben. Steht aber in der MSDN.
-
Mit komsich meine ich, dass die nicht absolut sind, sondern irgendwie verschoben sein können. Fensterausschnitt, oder Fensterrahmen oder sowas. Irgendwas war da, ich erinnere mich nur nicht mehr. Aber ich habe auch kein Bock es nachzulesen.
-
Es steht alles in der MSDN.
Lies doch einfach die Doku:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms646273(v=vs.85).aspxMOUSEEVENTF_ABSOLUTE 0x8000
The dx and dy members contain normalized absolute coordinates. If the flag is not set, dxand dy contain relative data (the change in position since the last reported position). This flag can be set, or not set, regardless of what kind of mouse or other pointing device, if any, is connected to the system. For further information about relative mouse motion, see the following Remarks section.
-
GetCursorPos liefert ja die Koordinaten in Pixel zurück sowie ich das verstanden habe, wie kann ich den die Pixel Koordinaten in die Koordinaten umwandeln welche SendInput benötigt?
Mit der Doku kann ich an der Stelle nichts Anfangen da es dort nicht beschrieben steht.
-
SendInput verwendet auch Pixel!
Die Frage ist nur ob Du Absolute Koordinaten ab´ngegeben hast.Lies mein vorheriges Post! Das hast Du in Deinem Code nämlich nicht gemacht.
-
Ich kriegs nicht hin, was ist hier dran jetzt falsch?
void MoveMouse() { MOUSEINPUT mi; mi.dx = 32; mi.dy = 1005; INPUT in; in.type = INPUT_MOUSE; in.mi.dx = mi.dx; in.mi.dy = mi.dy; in.mi.dwFlags = MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE; SendInput(1,&in,sizeof(in)); }
Ja ich hab das hier gelesen:
MOUSEEVENTF_ABSOLUTE 0x8000 The dx and dy members contain normalized absolute coordinates. If the flag is not set, dxand dy contain relative data (the change in position since the last reported position). This flag can be set, or not set, regardless of what kind of mouse or other pointing device, if any, is connected to the system. For further information about relative mouse motion, see the following Remarks section.
Ich hab alles aus der Doku zu SendInput und MOUSEINPUT gelesen aber es funktioniert nicht.
-
So habs geschaft dank diesem Link:
http://www.codeproject.com/Articles/11874/FreeCell-Discombobulator