![]() |
Mausbewegung(!) simulieren
Aloha,
ich möchte eine Mausbewegung simulieren... mir gehts jetzt aber nicht darum, mit SetCursorPos(x,y) ne möglichst flüssige Bewegung aus einzelschritten zu machen; genau genommen muss es nichtmal flüssig oder sonstwas sein. Aber folgendes Problem stellt sich mir: Setze ich die Mausposition mittels SetcursorPos auf einen Bereich innerhalb eines Flashapplets , so bekommt dieses Applet nicht mit, dass die Maus sich dort befindet -> klicke ich dann (bzw. simuliere ich einen Klick), erfolgt der Klick (je nach Programmierung natürlich, in meinem Fall aber wie folgt) dann an ganz anderer Stelle. Irgendwie muss ich diesem Flashteil in meinem Browser also mitteilen, dass die Mausposition sich geändert hat. Und afair haben Apletts in einem Browser [z.B. Fifo bei mir] ja kein Handle oder so, auf das man damit gut zugreifen könnte(??). Liebe Grüße flo |
Re: Mausbewegung(!) simulieren
Delphi-Quellcode:
Tut genau was du suchst, denke ich... :)
procedure MoveMouse (X,Y,Speed: Integer);
var wd, hh : integer; mm : TPoint; begin if Speed < 1 then Speed := 1; wd := X; hh := Y; Repeat sleep(speed); Application.Processmessages; GetCursorPos(mm); with mm do begin If x > wd then dec(x) else If x < wd then inc(x); If y > hh then dec(y) else If y < hh then inc(y); end; SetCursorPos(mm.x,mm.y); until (GetAsyncKeystate(Vk_Return) <> 0) or (GetAsyncKeystate(Vk_Escape) <> 0) or (GetAsyncKeystate(Vk_Space ) <> 0) or ((mm.X=X) and (mm.Y=Y)); end; |
Re: Mausbewegung(!) simulieren
Hallo, ich nehme mal an, dass das nicht wirkt.
bin mir sicher, da gibts n paar windows messages, die da versendet werden. ![]() |
Re: Mausbewegung(!) simulieren
Ich hab die Procedure so im Einsatz, ohne Probleme. Sogar Spiele fressen die Mausbewegungen!
|
Re: Mausbewegung(!) simulieren
hm ja, danke, ich werds probieren .. ist ist komisch irgendwie *kopfkratz*
|
Re: Mausbewegung(!) simulieren
Zitat:
|
Re: Mausbewegung(!) simulieren
Zitat:
Oder war das eine Aufforderung an mich? :gruebel: Natürlicher als ein bloßes SetCursorPos wirkt es allemal :-D |
Re: Mausbewegung(!) simulieren
Habs mal so gemacht. Ist allerdings in C, sollte aber ganz leicht übersetzt werden können ;)
Code:
Es wird also bei jedem Durchgang (da der Benutzer die Maus bewegt haben könnte) ein Vektor gezogen und die x- bzw. y-Geschwindigkeit berechnet.
void mouseto(int x, int y, int speed){
POINT maus; GetCursorPos(&maus); double mx = maus.x; double my = maus.y; while(mx != x || my != y) { double nx = x-mx; double ny = y-my; double len = sqrt(nx*nx + ny*ny); if(len<=1){ mx=x; my=y; } else { nx/=(len*0.5); ny/=(len*0.5); mx+=nx; my+=ny; } SetCursorPos(ceil(mx),ceil(my)); Sleep(speed); } } Kann sein, dass an der Abfrage in while noch gerundet werden muss und bei "0.5" ein bisschen was geändert werden muss. Konnte es gerade nicht testen. |
Re: Mausbewegung(!) simulieren
Delphi-Quellcode:
Na gut, hier die Delphi-Version.
procedure MoveMouse (X,Y,Speed: Integer);
var Maus : TPoint; mx, my, nx, ny, len : double; begin if Speed < 1 then Speed := 1; GetCursorPos(Maus); mx := maus.x; my := maus.y; While (mx<>x)OR(my<>y) Do begin nx := x-mx; ny := y-my; len := sqrt(nx*nx + ny*ny); if(len<=1)Then begin mx:=x; my:=y; end else begin nx := nx / (len*0.5); ny := ny / (len*0.5); mx := mx + nx; my := my + ny; end; SetCursorPos(Round(mx),Round(my)); Sleep(Speed); end; end; Ich steh mit Vektoren auf Kriegsfuß, deswegen hab ich jetzt einfach abgeschrieben *g* |
AW: Mausbewegung(!) simulieren
wie schaffe ich es denn mit folgendem code den cursor über ein control zu platzieren?
Delphi-Quellcode:
procedure MoveMouse(X, Y, Speed: Integer);
var Maus: TPoint; mx, my, nx, ny, len: double; begin if Speed < 1 then Speed := 1; GetCursorPos(Maus); mx := Maus.X; my := Maus.Y; while (mx <> X) or (my <> Y) do begin nx := X - mx; ny := Y - my; len := sqrt(nx * nx + ny * ny); if (len <= 1) then begin mx := X; my := Y; end else begin nx := nx / (len * 0.5); ny := ny / (len * 0.5); mx := mx + nx; my := my + ny; end; SetCursorPos(Round(mx), Round(my)); Sleep(Speed); end; end; procedure TForm1.Button1Click(Sender: TObject); begin MoveMouse(Button2.Left, Button2.Top, 10); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:50 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz