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 Benachrichtigung beim Drücken eines fremden Buttons? (https://www.delphipraxis.net/109203-benachrichtigung-beim-druecken-eines-fremden-buttons.html)

PeterPanino 26. Feb 2008 02:53


Benachrichtigung beim Drücken eines fremden Buttons?
 
Ich möchte immer dann, wenn in einem ganz bestimmten fremden Programm in einem ganz bestimmten Fenster ein ganz bestimmter Button gedrückt wird, benachrichtigt werden. Ist das möglich?

toms 26. Feb 2008 06:11

Re: Benachrichtigung beim Drücken eines fremden Buttons?
 
Hallo,

Installiere einen Maushook und werte beim globalen OnClick den Classennamen + Buttoncaption unter der Maus aus.

sirius 26. Feb 2008 07:48

Re: Benachrichtigung beim Drücken eines fremden Buttons?
 
Wenn du das Buttonhandle hast, dann kannst du auch subclassing betreiben. Damit fängst du nur die MEssages an den Button ab und nicht alle möglichen MEssages wie bei einem globalen Hook.

toms 26. Feb 2008 09:52

Re: Benachrichtigung beim Drücken eines fremden Buttons?
 
Zitat:

Zitat von sirius
Wenn du das Buttonhandle hast, dann kannst du auch subclassing betreiben. Damit fängst du nur die MEssages an den Button ab und nicht alle möglichen MEssages wie bei einem globalen Hook.

Das wäre natürlich eine Möglichkeit. Ausser das Fenster und somit der Button wird beim Öffnen dynamisch erstellt, dann ändert sich das Handle jedes Mal.

PeterPanino 27. Feb 2008 00:04

Re: Benachrichtigung beim Drücken eines fremden Buttons?
 
Liste der Anhänge anzeigen (Anzahl: 2)
Vielen Dank für die bisherigen Hinweise. Ich habe das Fenster des betreffenden Programms 2 mal aufgerufen und mit Winspy jeweils einen Snapshot des gewünschten Buttons gemacht. (S. die an diese Nachricht angehängten Screenshots).

Einmal ist das Handle 30ECE, das andere mal 20ECA. Ist das ein Hinweis dafür, dass das Fenster mit dem Button dynamisch erzeugt wird?

Das Instance Handle ist aber beide Male 400000.

Welcher von diesen Werten kann denn nun zur Identifizierung des Buttons herangezogen werden?

sirius 27. Feb 2008 07:31

Re: Benachrichtigung beim Drücken eines fremden Buttons?
 
Ach, das Fenster ändert sich ständig. Na da wird das Problem etwas größer.
Egal welche Methode du jetzt anwendest, du müsst immer überwachen, wann das Fenster geöffnet wurde und welches Handle der Button hat. Die Überwachung geht mit einem Hook über alle Messages des Programmes irgendwie.

Aber hier würde ich vielleicht noch einen ganz anderen Ansatz wählen. Varianten (über DLL-Injection oder Code-Injection):
-Messages des Programms komplett überwachen
-bestimmte WinAPI-Aufrufe überwachen (z.B. CreateWindow)
-Die Klasse TNTbutton überwachen

Vielleicht gibt es noch mehr Möglichkeiten aber einfach wird es nicht. Ist es unbedingt nötig?

bitsetter 27. Feb 2008 07:50

Re: Benachrichtigung beim Drücken eines fremden Buttons?
 
Zitat:

Zitat von sirius
Ach, das Fenster ändert sich ständig. Na da wird das Problem etwas größer.
Egal welche Methode du jetzt anwendest, du müsst immer überwachen, wann das Fenster geöffnet wurde und welches Handle der Button hat. Die Überwachung geht mit einem Hook über alle Messages des Programmes irgendwie.

Die billige aber dafür einfache Variante wäre, mittels einem Timer das Vorhandensein und das Handle des Fensters zu überwachen.
Aber im Endeffekt kommst du ohnehin nicht um einen Hook oder Code-Injection herum um den Button Klick abzufangen.

toms 27. Feb 2008 10:46

Re: Benachrichtigung beim Drücken eines fremden Buttons?
 
Zitat:

Zitat von bitsetter
Aber im Endeffekt kommst du ohnehin nicht um einen Hook oder Code-Injection herum um den Button Klick abzufangen.

oder mache es so:
Zitat:

Installiere einen Maushook und werte beim globalen OnClick den Classennamen + Buttoncaption unter der Maus aus.
(Habe ein Programm im Einsatz welches genau das macht. Funktioniert wunderbar)

sirius 27. Feb 2008 10:56

Re: Benachrichtigung beim Drücken eines fremden Buttons?
 
Und was machst du, wenn ich Enter drücke?

toms 27. Feb 2008 11:14

Re: Benachrichtigung beim Drücken eines fremden Buttons?
 
Zitat:

Zitat von sirius
Und was machst du, wenn ich Enter drücke?

Das darfst du nicht *g*
In meinem Fall wird nur geklickt und somit muss ich dieses Event nicht abfangen.


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