Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Fremder Button: Mausklick simulieren (https://www.delphipraxis.net/711-fremder-button-mausklick-simulieren.html)

Chewie 27. Aug 2002 17:17


Fremder Button: Mausklick simulieren
 
Hallo. Wie kann ich in einer fremden Anwendung einen bestimmten Button, dessen Handle ich habe, klicken?
Die einzige Möglichkeit, die mir einfällt, wäre, die Position des Buttons relativ zum Bildschirm zu errechnen, das dann so umrechnen, dass ich es als Parameter bei Mouse_Event benutzen kann und dann mittels dieser Funktion einen Klick zu simulieren. Natürlich muss dann das Fenster, dem der Button "gehört", in den Vordergrund gebracht werden. Leider ist diese Möglichkeit recht aufwändig und ich frag mich, ob es nicht leichter geht.
Z. B. indem ich eine WM_COMMAND an das Parent-Fenster des Buttons schicke. Leider hab ich nicht die ID des Buttons (das Zielprogramm ist VCL) und überhaupt weiß ich auch nicht, ob das funktionieren würde.
Gibts da irgendeine andere, einfachere Lösung?

Ein weiteres Problem ist, dass ich die Caption einer Control (wiederum oben genannter Button) in einer fremden Anwendung herausfinden will. Dass GetWindowText nicht funktioniert, steht ja im SDK, und auch mit WM_GETTEXT gehts nicht. Was allerdings funktioniert, ist WM_GETTEXTLENGTH und WM_SETTEXT. Also muss ich doch irgendeine Art von Zugriff auf die Caption haben. Kennt jemand da eine Möglichkeit?

ich danke allen im Voraus, die mir helfen können.

Christian Seehase 27. Aug 2002 17:21

Moin Chewie,

das Anklicken sollte so funktionieren:

Code:
SendMessage(hButton,BM_CLICK,0,0);
Wenn Du schon WM_SETTEXT anwenden konntest, verstehe ich allerdings nicht, wo's bei WM_GETTEXT hakt.
Hast Du vergessen den Buffer zu reservieren, oder die Bufferlänge zu klein gesetzt?

Chewie 27. Aug 2002 17:55

Ah, BM_..., wunderbar. Wusste nicht, dass es das gibt, hab nur WM_... gefunden. Ich wollte wieder den kompliziertesten Weg gehen. Danke.

Nachtrag: Und WM_GETTEXT funktioniert jetzt plötzlich auch. Gestern nicht. Komisch. Lag aber wahrscheinlich an den Buffern.

Und schon wurden aus 30 Zeilen Code 10... :mrgreen:

toms 27. Aug 2002 18:01

Vielleicht hilft dir auch das:

http://www.swissdelphicenter.ch/de/showcode.php?id=727

Christian Seehase 27. Aug 2002 19:47

Moin Chewie,

BM_ = Button Message
WM_ = Windows Message

und es gibt noch viele andere z.B.

LVM_ ListView Message
TVM_ TreeView Message
EM_ Edit Message
CB_ ComboBox Message
LB_ ListBox Message

und, und, und...

Die fallen mir nur gerade so auf anhieb ein.

Chewie 27. Aug 2002 20:24

Ja, stimmt. Ich habe nicht noch viel Erfahrung mit nonVCl-Programmen und hab deswegen neben den "normalen" WM_...-Messages nur die Listbox-spezifischen gebraucht. Da hätts mir aber auch einfallen müssen, dass es das auch für die anderen Klassen gibt. Na ja, 1 und 1 zusammenzuzählen ist doch manchmal schwer... :mrgreen:


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