Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Maus atomatisch klicken lassen (https://www.delphipraxis.net/118805-maus-atomatisch-klicken-lassen.html)

5etH 15. Aug 2008 07:25


Maus atomatisch klicken lassen
 
hallo Zusammen,

ich würde gerne einen teil in mein programm schreiben der die maus automatisch auf bestimmmten positionen klicken lässt ....
dazu wollte ich mal fragen ob es möglich ist und wie ich es realisieren kann ...
ich hab zwar schon die suche bennutzt aber nichts entsprechendes gefunden ....
im prinzip will ich verschiedene koordinaten klicken lassen in bestimmten zeitabständen

ihr sollt mir um gottes willen keinen code schreiben ^^ ich will ja was dabei lernen nur ein tipp wie oder mit welcher methode oder procedure ich es realisieren kann ^^

schonmal vielen Dank im vorraus
lg 5etH

QuickAndDirty 15. Aug 2008 07:36

Re: Maus atomatisch klicken lassen
 
Hilft TMouse dabei?

Deep-Sea 15. Aug 2008 07:38

Re: Maus atomatisch klicken lassen
 
http://www.swissdelphicenter.ch/de/showcode.php?id=360 :wink:

taaktaak 15. Aug 2008 07:40

Re: Maus atomatisch klicken lassen
 
Moin, Moin.
Einen Mausklick (hier für die linke Taste) zu simulieren ist kein Problem:
Delphi-Quellcode:
..
mouse_event(MouseEventF_leftDown,x,y,0,0);
mouse_event(MouseEventF_leftUp,x,y,0,0);
..
alternativ kann natürlich auch direkt eine definierte Methode ...OnMouseDown() o.ä. aufgerufen werden. Kommt darauf an, was du speziell damit bewirken willst.

FAlter 15. Aug 2008 07:40

Re: Maus atomatisch klicken lassen
 
Hi,

1. den Zeiger an die gewünschte Position schieben
SetCusrorPos

2. Maus klicken
3. Maus loslassen
MouseEvent

Zum beispiel so zu finden:
Bei Google suchenMausklick Simulieren Delphi

Erstes Ergebnis: siehe oben (dreimal roter Kasten, dann muss ich den Link nicht nochmal hinschreiben)

Mfg
FAlter

taaktaak 15. Aug 2008 07:44

Re: Maus atomatisch klicken lassen
 
... oder gleich wie von mir vorgeschlagen :stupid:

5etH 15. Aug 2008 07:45

Re: Maus atomatisch klicken lassen
 
also was ich gerne damit machen würde ist das ich eine gewisse anzahl an koordinaten recorde und die dann clicken lasse und dazwischen ein sleep setze also ich drücke den butte und er klickt die selben immer wieder

taaktaak 15. Aug 2008 07:57

Re: Maus atomatisch klicken lassen
 
Was sollen die Klicks auf die verschiedenen Koordinaten denn bewirken?

5etH 15. Aug 2008 08:01

Re: Maus atomatisch klicken lassen
 
also bei dem programm kommen immer mal wieder meldungen auf und die werden dann weggeklickt und dann wird mit dem normalen ablauf weiter gemacht

aber die positionen sind immer gleich

taaktaak 15. Aug 2008 08:06

Re: Maus atomatisch klicken lassen
 
Meldungen eines fremden Programms, die du "ferngesteuert" schließen willst?

5etH 15. Aug 2008 08:11

Re: Maus atomatisch klicken lassen
 
ja so in etwa

taaktaak 15. Aug 2008 08:17

Re: Maus atomatisch klicken lassen
 
so in etwa :?: "Fremd oder nicht fremd, das ist hier die Frage"

5etH 15. Aug 2008 08:24

Re: Maus atomatisch klicken lassen
 
fremd in dem sinne das es nicht zu meinem programm gehört aber es ist auf meinem rechner ... im prinzip soll ich eine datenbank mit 20.000 einträgen übertragen und joa das dauert so etwas daher will ich ein programm schreiben was es für mich macht ... und dann notiert wenn es ein fehler gab also es sich nicht kopieren lies und die nr in eine memo packt

5etH 15. Aug 2008 09:07

Re: Maus atomatisch klicken lassen
 
okay also ich habe per suche gefunden wie ich koordinaten ermittle und wie ich klicken kann ^^ *freu* aber jetzt tut sich ein anderes problem auf: sagen wir ich klicke im fremdprogeramm auf das feld in das ich hineinschreiben möchte .... dann weis ich aber nicht wie ich das übergeben kann also das er das hineinschreiben simoliert ? hat da wer ne idee oder lässt sich das nicht realisieren ?

DeddyH 15. Aug 2008 09:10

Re: Maus atomatisch klicken lassen
 
Zu mouse_event gibt es ein Pendant keybd_event. Das wäre ein guter Suchbegriff ;)

rollstuhlfahrer 15. Aug 2008 09:32

Re: Maus atomatisch klicken lassen
 
HI,

du kannst auch mittels FindWindow/FindWindowEx das Control suchen und diesem dann eine Nachricht schicken, dass ein gewisser Text für es da ist. Dies würde ich aber bei z.B. Datenbanken nicht bevorzugen, da die Anzahl der Controls expotentionell zu der Anzahl Ddatensätze steigt.
keybd_event benötigt zum Funktionieren eine Taste und den Parameter, ob drücken oder loslassen. In der CL sollte es da ne Funktion dafür geben, die auch Groß/Klein berücksichtigt.

Bernhard

5etH 15. Aug 2008 10:57

Re: Maus atomatisch klicken lassen
 
ich denke das mir PostMessage mehr hilf da ich nur einen String aus einer Variablen übergeben muss bzw sie an die stelle schreibe an die ich vorher geklickt habe ... nur leider versth ich das überhaupt nicht was bei PostMessage die parameter sein sollen .... bin wohl noch zu neu im delphi universum .... auch das lesen der anderen threads und der hilfe an sich hat mich nicht weiter gebracht .... hoffe das ihr vill bereit seid mir zu helfen

ich will einfach nur den string von sagen wir edit1.text schreiben an die stelle wo ich zuvor in das feld geklickt habe ....

hoffe mal sehr auf eure hilfe

lg 5etH

rollstuhlfahrer 18. Aug 2008 14:56

Re: Maus atomatisch klicken lassen
 
HI,

für PostMessage brauchst du 3 (nicht 4) Parameter.
1. Das Handle deines Ziels,
2. die Konstante WM_SETTEXT,
3. eine 0 und
4. einen Pointer.

Ich hoffe mal, dass du weißt, wie du an das Handle kommst. Für Parameter 4 brauchst du einen Zeiger auf einen mit #0 abgeschlossenen String, was der Datentyp String darstellt. Dieser wird einfach nach PChar gecastet. Schwupps hast du deinen Pointer, den du dann noch nach Integer casten musst, da die Funktion keinen Pointer sondern Zahlen will. So jetzt ist da wohl alles da um die Funktion aufzurufen.

Delphi-Quellcode:
procedure SetWndText(wnd: HWND{ Das Handle }; Text: String{ Der Text });
var tmp: PChar;
begin
tmp := PChar(text);
// tmp := Text;  // wems ao gefällt (nicht getestet)
// SendMessage(wnd, WM_SETTEXT, 0, Integer(tmp));
PostMessage(wnd, WM_SETTEXT, 0, Integer(temp));
end;
Fertig. Die genaue Beschreibung gibts bei MSDN unter MSDN-Library durchsuchenWM_SETTEXT.

Bernhard


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:44 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