AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Mausklick simulieren klappt einfach nicht :-(
Thema durchsuchen
Ansicht
Themen-Optionen

Mausklick simulieren klappt einfach nicht :-(

Ein Thema von SearchBot · begonnen am 15. Aug 2012 · letzter Beitrag vom 17. Aug 2012
Antwort Antwort
hathor
(Gast)

n/a Beiträge
 
#1

AW: Mausklick simulieren klappt einfach nicht :-(

  Alt 16. Aug 2012, 00:19
Ich habe mal ein kleines Testprogramm gemacht,
das funktioniert so:
Man klickt Button2 an, 3 Sek. später wird Button1 ausgelöst.
(Button1 hat die Dimension 100 x 100)

Delphi-Quellcode:
procedure MoveMouseIntoControl(AWinControl: TControl);
var rtControl: TRect;
begin
  rtControl := AWinControl.BoundsRect;
  MapWindowPoints(AWinControl.Parent.Handle, 0, rtControl, 2);
  SetCursorPos(rtControl.Left + (rtControl.Right - rtControl.Left) div 2,
    rtControl.Top + (rtControl.Bottom - rtControl.Top) div 2);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Close;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Sleep(3000);
MoveMouseIntoControl(Button1);
mouse_event(MOUSEEVENTF_LEFTDOWN, 50, 50, 0, 0);
Sleep(50);
mouse_event(MOUSEEVENTF_LEFTUP, 50, 50, 0, 0);
Application.ProcessMessages;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

AW: Mausklick simulieren klappt einfach nicht :-(

  Alt 16. Aug 2012, 00:51
Also ich würde das nicht mit der Maus machen. Was wenn der Benutzer gerade was damit machen will? Fülle die Felder mit WM_SETTEXT aus und klicke die Schaltfläche mittels BM_CLICK an.

Kleines Beispiel:

Delphi-Quellcode:
procedure TForm1.btn1Click(Sender: TObject);
begin
  ShowMessage(edt1.Text);
end;

procedure TForm1.btn2Click(Sender: TObject);
var
  s: AnsiString;
begin
  s := 'hello world';
  SendMessage(edt1.Handle, WM_SETTEXT, 0, Integer(@s[1]));
  SendMessage(btn1.Handle, BM_CLICK, 0 , 0);
end;
Michael
Ein Teil meines Codes würde euch verunsichern.

Geändert von Luckie (16. Aug 2012 um 00:59 Uhr)
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.689 Beiträge
 
Delphi 2007 Enterprise
 
#3

AW: Mausklick simulieren klappt einfach nicht :-(

  Alt 16. Aug 2012, 08:09
Nicht alle Programme nutzen WinControls Luckie

Ich bin mit nicht sicher, ob man Bewegung und Click bei SendInput() in einen Aufruf packen kann. Als ich damit mal rumgespielt habe, hatte ich das getrennt, und das sah ganz gut aus. Wäre nen Versuch wert.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

AW: Mausklick simulieren klappt einfach nicht :-(

  Alt 16. Aug 2012, 09:06
OK, berechtigter Einwand. Wäre das denn bei Foxpro der Fall?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
SearchBot

Registriert seit: 27. Jun 2004
Ort: N-W vom Bodensee
328 Beiträge
 
Delphi 12 Athens
 
#5

AW: Mausklick simulieren klappt einfach nicht :-(

  Alt 16. Aug 2012, 15:56
Hallo,

danke für Eure Aufmerksamkeit.

FoxPro hat scheinbar keine WinControls, weil ich bekomme von dort keine Handles angezeigt.
Daher kann ich die Vorschläge von hathor und Luckie leider nicht anwenden. Hätte ich Handle, wäre ich schon lange fertig.
In meiner Delphi-Testapp habe ich natürlich handles, aber ich muss es ohne machen, weil ich in Foxpro ja keine habe.

Aber ihr habt mir trotzdem ein paar neue Denkansätze gegeben (BM_CLICK, Bewegung und Klick trennen)...

Vielleicht weiß noch jemand was?
  Mit Zitat antworten Zitat
madtom

Registriert seit: 24. Feb 2005
Ort: Hamburg
115 Beiträge
 
Delphi XE7 Professional
 
#6

AW: Mausklick simulieren klappt einfach nicht :-(

  Alt 16. Aug 2012, 16:20
Daher kann ich die Vorschläge von hathor und Luckie leider nicht anwenden. Hätte ich Handle, wäre ich schon lange fertig.
Hallo, für die letzte Prozedur aus Hathors Vorschlag brauchst Du kein Handle, allerdings die Position des Controls, auf das Du klicken willst. Also wenn Du die Position bestimmen würdest, zur Not über das Handle des Formulars die Form-Position bestimmen und dann +X und +Y Koordinaten ...

siehe auch:
http://delphi.about.com/od/vclusing/a/mouseadvanced.htm
Thomas
Delphi Programming

Geändert von madtom (16. Aug 2012 um 16:33 Uhr)
  Mit Zitat antworten Zitat
SearchBot

Registriert seit: 27. Jun 2004
Ort: N-W vom Bodensee
328 Beiträge
 
Delphi 12 Athens
 
#7

AW: Mausklick simulieren klappt einfach nicht :-(

  Alt 16. Aug 2012, 21:49
Oooooooooooooooooooooooooh, ich bin ein Vollpfosten!!!

In einer App mit 'nur Klicken' geht es - in meiner geht es nicht (jetzt aber endlich schon).

Hier ist der Grund - siehst du ihn auch?

Auszug, wie ich den Script für die Mausposition zerlege... s='@ML400,200;';
Code:
        case upcase(s[i+1]) of
         'M','V':begin
              t:=copy(s,i+3,pos(';',s)-(i+3)); inc(i,length(t)+4);
              u:=copy(t,1,pos(',',t)-1); delete(t,1,pos(',',t));
              x:=strtoint(u); y:=strtoint(t);
              if upcase(s[i+1])='M' then MClick2(upcase(s[i+2]),x,y)
              else SetCursorPos(x,y);
             end;
Dieser kleine Teufelsbug hat mich jetzt 10 Stunden rumgebastele gekostet
..und ich hoffe, daß es dann auch in FoxPro so funzt...
  Mit Zitat antworten Zitat
Antwort Antwort

 

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 22:43 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