Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Control unter der Maus aus DLL feststellen (https://www.delphipraxis.net/197087-control-unter-der-maus-aus-dll-feststellen.html)

Tower1234 17. Jul 2018 08:41

Control unter der Maus aus DLL feststellen
 
Hallo zusammen,

ich möchte eine DLL schreiben, die bei verschiedenen Ereignissen feststellt, welches Control des aufrufenden Programms sich gerade an der Mausposition befindet (oder - ggf. - welches Control den Focus hat).

Innerhalb des Hauptprogramms ist das zB mit FindVCLControl kein Problem, aber aus der DLL heraus erhalte ich immer nil zurück.

Hat jemand eine Idee, wie ich das hinbekommen kann?


Vielen Dank schonmal!

Neutral General 17. Jul 2018 08:55

AW: Control unter der Maus aus DLL feststellen
 
WindowFromPoint bzw. ChildWindowFromPoint ist wahrscheinlich was du brauchst.

KodeZwerg 17. Jul 2018 08:57

AW: Control unter der Maus aus DLL feststellen
 
Als .dll glaube ich klappt so etwas nur mit einem Hook.

KodeZwerg 17. Jul 2018 09:39

AW: Control unter der Maus aus DLL feststellen
 
Habe mal ein wenig herumgespielt, EnumChildWindows(), GetWindowRect() und PtInRect() nutzte ich. Per GetWindow() kann man die z-order erfahren.
Mit RealChildWindowFromPoint() kann man das ganze auch abkürzen.

Als .dll komme ich um etwas wie
Delphi-Quellcode:
hMouseHook := SetWindowsHookEx(WH_MOUSE, @mHookProc, GetModuleHandleFromInstance, 0);
nicht drum herum.

himitsu 17. Jul 2018 09:59

AW: Control unter der Maus aus DLL feststellen
 
Nein, da bei DLL erstmal "grundsätzlich" TypeIntofs, RTTI, VCL usw. getrennt sind und ihre Delphi-Klassen nicht geshared werden, sie sich also garnicht verstehen.

Ausnahme: EXE und DLL wurden gegen die VCL gelinkt. (mit Packages kompiliert ... natürlich Beide mit der selben Compilerversion)

jaenicke 17. Jul 2018 10:30

AW: Control unter der Maus aus DLL feststellen
 
Du kannst zum Beispiel der DLL ein Interface übergeben, über die die DLL die Information aus dem Hauptprogramm abfragen kann.

KodeZwerg 17. Jul 2018 10:37

AW: Control unter der Maus aus DLL feststellen
 
Da habe ich wohl was missverstanden, das was ich oben schrieb gilt für egal was für Fenster und nicht beschränkt aufs Eigene Programm.


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