Bewegung des Mauszeigers simulieren
-
Hiho,
ich habe ein kleines Problem,
es soll der Mauszeiger auf eine bestimmte Position des Bildschirms bewegt werden.Ich habe schon SetCursorPos(x,y) ausprobiert, was auch gut funktioniert hat.
Das Problem ist nun, dass das Programm welches ich steuern möchte, nicht auf den Klick reagiert, der nach dem Bewegen folgt. Klicken kann ich nur, wenn die Maus "wirklich" von Hand bewegt wurde - anscheinend wurde dort irgendeine Sperre eingebaut.
(Eine Schleife über SetCursorPos(x bis 100, y) mit einem Sleep(10) zwischen den einzelenen Moves funktioniert auch nicht.)Gibt es eine Möglichkeit die Maus direkt von der Schnittstelle her zu bewegen, damit es für das System so erscheint, als das sie wirklich bewegt wurde?
-
vielleicht beisst sich der mousehook dieses komischen programms mit deiner mouseklick simulation. Bin da jetzt auch nicht so fit aber wenn es sich um Windoof handelt solltest du vielleicht mal die WinApi Faq und Threads durchschaun ob du was findest.
-
meinst Du damit, dass ich zwar den Mauszeiger bewege aber das unterliegende Fenster auf irgendeine Art und Weise nicht aktiv ist?
und dann eben der Klick "ins Leere" geht...
-
Wie klickst du denn!?
greetz, Swordfish
-
Swordfish schrieb:
Wie klickst du denn!?
greetz, Swordfish
Schon klar, wie es gemint ist, aber trotzdem lustisch...
-
der Code schaut bis ungefähr so aus:
for (int i2 = 100; i2<200; i2++) { SetCursorPos(i2, 150); Sleep(10); } //oder dirket mit SetCursorPos(200, 150) mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
-
Nur so ne Idee...
Wofür steht der 2. Parameter? Also die Konstante?
Vielleicht für absolut?Dann klickst du in den Koordinatenursprung...
-
das is echt komisch,
ich hab mal eine 10 Sek Pause eingefügt.J
Jetzt wird also der Curser nach 200,150 bewegt, in der Pause bewege ich die Maus minmal von Hand und warte: dann funktioniert der Klick.SetCursorPos(200, 150); Sleep(10000); mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
-
Dann probiers doch einfach mal so:
SetCursorPos(200, 150); mouse_event(MOUSEEVENTF_MOVE, -1, -1, 0, 0); mouse_event(MOUSEEVENTF_MOVE, 1, 1, 0, 0); mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
-
Vielleicht liegt es daran, dass mouse_event deprecated ist...
Versuchs mal über SendInput:
#define _WIN32_WINNT 0x0403 #include <windows.h> void 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; }
Gruß,
CSpille
-
Wahnsinn, das scheint zu funktionieren,
ich danke Dir vielmals!
-
Vielleicht liegt es daran, dass mouse_event deprecated ist
Nope, liegt nicht daran, bin ich mir zu 99.9% sicher (hab's selbst schon verwendet, auch unter XP, geht 1A).
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.