![]() |
handle und thread
folgende Problematik:
Für einen "Bekannten" programmiere ich einen Hilfstextgenerator. Dieser soll für andere und laufende Anwendungen Hinweistexte einblenden, sobald dieser auf bestimmte Felder oder Buttons kommt. Ähnlich ToolTip. Allerdings ist die Informationsmenge so groß, dass ich mich entschlossen habe unten rechts ein dementsprechendes Fenster zu öffnen. Mein Problem ist nicht Handle (parent/child) oder die jeweiligen ID und Threads zu erhalten sondern eine eindeutige Zuordnung zu generieren wenn er das Programm mit anderem Handle startet. Kann ich irgendwie die Button oder Edit-Felder auslesen und zuordnen? Ich möchte es vermeiden mich durch die API zu wühlen ;-) Jemand eine Idee? Vielleicht doch ToolTip ersetzen? Dank im Voraus. |
Moin NimmDies,
erst einmal herzlich willkommen in der Delphi Praxis. Wenn ich Dein Problem richtig verstanden habe, sollten Dir die APIs EnumWindows/EnumChildWindows weiterhelfen. Dazu solltest Du hier auch einige Beispiele finden können. |
wenn ich mich recht entsinne könntest du, falls du das handle des buttos bzw. des fensters gefunden hast, mit hilfe von SetWindowLong alle nachrichten an diesen button abfangen und entsprechend bearbeiten. da könntest du eventuell die mouseover ereigniss abfangen und den entsprechenden hilfetext einblenden.
falls ich damit völlig daneben liege bitte ich um korektur. ich hab mit der windows-api schon 2 jahre nicht mehr gearbeitet und fange grade erst wieder an zu lernen :) |
Danke für die schnellen Antworten.
Wie so häufig habe ich eine "Kleinigkeit" vergessen zu erwähnen. Das mit Hilfstext zu versehende Programm ist keine Delphi Anwendung sondern ein Fremdprogramm. Delphi intern mit enum (parent/child) ist kein Problem doch bei einem Fremdprogramm kann ich nicht gezielt auf ein Eingabefeld und/oder Button zugreifen bzw. abfangen. Oder doch? Und wenn wie? :shock: |
Moin NimmDies,
mit Hilfe von EnumWindows usw. kannst Du Dir alle Fenster heraussuchen, die gerade auf dem System vorhanden sind. Das hat nichts mit Deinem eigenen Programm zu tun. Für dieses bräuchtest Du diese Funktionen ja auch nicht, da Du ja direkt auf alles zugreifen könntest (ginge natürlich auch mit Hilfe der Funktionen). Weitere Stichworte, ausser EnumWindows/EnumChildWindows wären in Deinem Falle wohl auch noch GetClassName (irgendwie musst Du ja auch herausbekommen, ob Du das richtige Control erwischt hast), sowie WM_GETTEXT/WM_SETTEXT und BM_CLICK. (zumindest wenn ich mir Dein Eingangsposting so ansehe). Zu allen diesen Begriffen solltest Du hier im Forum fündig werden. BTW: Eventuell kämen auch noch Hooks in Frage, aber damit kenn' ich mich nicht sonderlich gut aus. |
kuck dir mal das subclassing tutorial von luckie an, sowas in die richtung meine ich.
du suchst das handle von dem button, leitest die WindowProc für diesen button auf dein programm um und fängst dann die WM_MOUSE-events ab, alle anderen events leitest du an den button weiter. wenn ein WM_MOUSE ereignis auftritt kannste dann den entsprechenden einblenden. die benötigten windows-api funktionen für dein vorhaben sollten EnumWindows/FindWindowEx und SetWindowLong sein, such danach mal in der win32-sdk hilfe oder im web. falls du jetzt nicht verstanden hast was ich meine kuck dir einfach mal die nonvcl-tutorials auf luckies seite an, da kannste viel von lernen. und nicht direkt verzweifeln, nonvcl-programmierung ist am anfang nicht einfach :) |
Man kann nur Fenster subclassen, die im eigenen Prozess liegen. Willst du fenster eines anderen Prozesses subclassen muß du es mit einer DLL machen die du in diesen Prozess injezierst.
Meiner Meinung nach zu viel Aufwand. Warum sind denn zusätzliche Hilfetexte von so einer länge nötig? |
neiiiiiiiiiin, verdammt! das klappt nicht?
|
Danke für Eure Hinweise.
Ich habe nun ein Mouse Hook eingerichtet und fange so die Ereignisse der Maus ab. Jede Art der Auswertung funktioniert, allerdings kann ich das Ergebnis und die Zuordnung nicht replizieren. Starte ich das Fremdprogramm neu erhält logischer Weise dieses Programm neue Handles und neue SubClasses. :( Wieviel Text ist denn maximal über ToolTip möglich? Kann ich die vom Fremdprogramm ausgegebenen ToolTips abfangen und ersetzen??? Fragen über Fragen :) Sorry Was scheint am einfachsten zu realisieren? Dennoch Danke im Voraus |
FindWindow. FindWindowEx, EnumWindows. EnumChildWindows.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:11 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