AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Mausbewegung(!) simulieren

Ein Thema von Florian H · begonnen am 24. Apr 2007 · letzter Beitrag vom 15. Apr 2012
Antwort Antwort
Seite 1 von 2  1 2      
Florian H

Registriert seit: 30. Mär 2003
Ort: Mühlacker
1.043 Beiträge
 
Delphi 6 Professional
 
#1

Mausbewegung(!) simulieren

  Alt 24. Apr 2007, 14:01
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
Florian Heft
  Mit Zitat antworten Zitat
Schubi

Registriert seit: 4. Nov 2003
Ort: Happurg (Nürnberg)
331 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Mausbewegung(!) simulieren

  Alt 24. Apr 2007, 14:05
Delphi-Quellcode:
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;
Tut genau was du suchst, denke ich...
Christian Schubert
Ich fange gerade erst an, den Umfang meiner Ahnungslosigkeit zu begreifen...
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Mausbewegung(!) simulieren

  Alt 24. Apr 2007, 14:10
Hallo, ich nehme mal an, dass das nicht wirkt.

bin mir sicher, da gibts n paar windows messages, die da versendet werden. MSDN-Library durchsuchenCM_MOUSEENTER zum beispiel. die musst du dann an das flash-fenster senden.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Schubi

Registriert seit: 4. Nov 2003
Ort: Happurg (Nürnberg)
331 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Mausbewegung(!) simulieren

  Alt 24. Apr 2007, 14:17
Ich hab die Procedure so im Einsatz, ohne Probleme. Sogar Spiele fressen die Mausbewegungen!
Christian Schubert
Ich fange gerade erst an, den Umfang meiner Ahnungslosigkeit zu begreifen...
  Mit Zitat antworten Zitat
Florian H

Registriert seit: 30. Mär 2003
Ort: Mühlacker
1.043 Beiträge
 
Delphi 6 Professional
 
#5

Re: Mausbewegung(!) simulieren

  Alt 24. Apr 2007, 14:29
hm ja, danke, ich werds probieren .. ist ist komisch irgendwie *kopfkratz*
Florian Heft
  Mit Zitat antworten Zitat
Torpedo

Registriert seit: 21. Dez 2003
410 Beiträge
 
#6

Re: Mausbewegung(!) simulieren

  Alt 24. Apr 2007, 14:48
Zitat von Schubi:
... Tut genau was du suchst, denke ich...
Das sieht aber nicht sehr natürlich aus, weil sich der Cursor nicht in einer geraden Linie zum Ziel hinbewegt. Man sollte das ganze mit Vektoren machen.
  Mit Zitat antworten Zitat
Schubi

Registriert seit: 4. Nov 2003
Ort: Happurg (Nürnberg)
331 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Mausbewegung(!) simulieren

  Alt 24. Apr 2007, 14:53
Zitat von Torpedo:
Zitat von Schubi:
... Tut genau was du suchst, denke ich...
Das sieht aber nicht sehr natürlich aus, weil sich der Cursor nicht in einer geraden Linie zum Ziel hinbewegt. Man sollte das ganze mit Vektoren machen.
Tu dir keinen Zwang an

Oder war das eine Aufforderung an mich?

Natürlicher als ein bloßes SetCursorPos wirkt es allemal
Christian Schubert
Ich fange gerade erst an, den Umfang meiner Ahnungslosigkeit zu begreifen...
  Mit Zitat antworten Zitat
Torpedo

Registriert seit: 21. Dez 2003
410 Beiträge
 
#8

Re: Mausbewegung(!) simulieren

  Alt 24. Apr 2007, 14:56
Habs mal so gemacht. Ist allerdings in C, sollte aber ganz leicht übersetzt werden können
Code:
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);
        }
}
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.

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.
  Mit Zitat antworten Zitat
Schubi

Registriert seit: 4. Nov 2003
Ort: Happurg (Nürnberg)
331 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Mausbewegung(!) simulieren

  Alt 24. Apr 2007, 15:19
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;
Na gut, hier die Delphi-Version.
Ich steh mit Vektoren auf Kriegsfuß, deswegen hab ich jetzt einfach abgeschrieben *g*
Christian Schubert
Ich fange gerade erst an, den Umfang meiner Ahnungslosigkeit zu begreifen...
  Mit Zitat antworten Zitat
MiKaEr
(Gast)

n/a Beiträge
 
#10

AW: Mausbewegung(!) simulieren

  Alt 15. Apr 2012, 17:05
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;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz