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 meldung eines anderen programms ermitteln? (https://www.delphipraxis.net/43050-meldung-eines-anderen-programms-ermitteln.html)

heiopei 28. Mär 2005 10:33


meldung eines anderen programms ermitteln?
 
hallo,
hab in der suche nix dazu finden können :-(

naja - wie der titel schon sagt, möchte ich eine meldung eines anderen programmes auswerten.
(meldungstext, meldungstite). bei der meldung handelt es sich um eine tmessageform (oder so).

ich will damit meldungen in einem anderen programm behandeln, dazu muss ich aber erst wissen,
was gemeldet wird ;-)

danke für hilfe,
heiopei

heiopei 28. Mär 2005 19:50

Re: meldung eines anderen programms ermitteln?
 
*push*

hat keiner ne ahnung?
nochmal: ich möchte meldungen, die in einem anderen programm angezeigt werden sollen abfangen, bzw. ihren meldungstext auswerten (also tmessageforms und nicht sendmessage-meldungen!)

mfg,
heiopei

Boombuler 29. Mär 2005 09:06

Re: meldung eines anderen programms ermitteln?
 
Guck dir mal folgende Funktionen an:
  • FindWindow
  • FindWindowEx
  • GetWindowText

evtl solltest du dir auch Hooks ansehn wenn du benachrichtigt werden willst wann eine Box hochkommt...

Greetz
Boombuler

heiopei 29. Mär 2005 09:13

Re: meldung eines anderen programms ermitteln?
 
ja, mit findwindow hab ich das handle für das fenster ermittlen können,
aber mit getwindowtext ging da nix. hab danach mit windowse das meldungsfenster angeschaut - der meldungstext is kein static / label, sondern er scheint direkt auf das canvas der form geschrieben werden (wie gesagt es wird eine TMessageForm erstellt ;-))

das mit den hooks hab ich mir auch schon gedacht, aber da hab ich leider nich wirklich ahnung, wie ich das angehen soll! (hab mir auch schon luckies tut durchgelesen :oops:) - hätte da vielleicht jemand nen vorschlag?

tschüssi,
heiopei

Mephistopheles 29. Mär 2005 11:22

Re: meldung eines anderen programms ermitteln?
 
TLabel sind keine STATICs sondern tun genau was du beschreibst und haben auch keine eigenen Fensterhandle. Es könnte sich also durchaus um ein TLabel handeln. Übrigens: warum schaust du nicht einfach in die Implementation. TMessageForm klingt doch sehr nach Delphi, oder?

c113plpbr 29. Mär 2005 13:39

Re: meldung eines anderen programms ermitteln?
 
Und wenn nichts geht, kann man doch immernoch den Text (im normalfall) per (simuliertem) STRG+C in die Zwischenablage verschieben. (oder irre ich mich da?)
Wobei ich dies nur als "letzte möglichkeit" ansehen würde, denn ich könnte es nicht "leiden", wenn ein Programm meine Zwischenablage ungewollt überschreibt ...

ciao, Philipp

Mephistopheles 29. Mär 2005 15:01

Re: meldung eines anderen programms ermitteln?
 
Also wenn das mit Strg+C ginge, wäre das ein äußerst nützliches Feature dieser Komponente. Kannte ich aber noch nicht. Allerdings den Einwand in Sachen Zwischenablage überschreiben kann ich nur teilen.

heiopei 30. Mär 2005 11:20

Re: meldung eines anderen programms ermitteln?
 
naja, also da da anscheinend nichts mit handle... drinne is - wie würde das mit hooks gehen?!?
also wie kann ich so ne meldung abfangen und auswerten(und bei gelegenheit auch weitersenden)?

mfg,
heiopei

Mephistopheles 30. Mär 2005 11:42

Re: meldung eines anderen programms ermitteln?
 
Ich würde anzweifeln, daß es mit (Fenster-)Hooks geht, da die dich nur benachrichtigen sobald eine Nachricht hochpoppt. Das Problem, daß du dank fehlendem Handle nicht den Text auslesen können wirst, bleibt.

c113plpbr 30. Mär 2005 12:38

Re: meldung eines anderen programms ermitteln?
 
Zitat:

Zitat von Mephistopheles
Also wenn das mit Strg+C ginge, wäre das ein äußerst nützliches Feature dieser Komponente. Kannte ich aber noch nicht. Allerdings den Einwand in Sachen Zwischenablage überschreiben kann ich nur teilen.

STRG+C geht zmd. in so ziemlich allen Windows-MessageBoxen ...

ciao, Philipp

Christian Seehase 30. Mär 2005 18:17

Re: meldung eines anderen programms ermitteln?
 
Moin Philipp,

ja, mit Windows-Messageboxen.
Die von Delphi (z.B. ShowMessage, MessageDlg) sind aber keine Windows-Messageboxen.
Mit denen funktioniert das nicht.

Die Dialoge die Du meinst sind, IMHO, alle von der Klasse #32770.

fwsp 30. Mär 2005 20:25

Re: meldung eines anderen programms ermitteln?
 
moin

könnte man die meldung nicht einfach in eine seperate datei schreiben und die auswerung von da aus vornehmen lassen?

heiopei 21. Apr 2005 17:03

Re: meldung eines anderen programms ermitteln?
 
ja hallo,
wieder mal son alter beitrag von mir!

Zitat:

ja, mit Windows-Messageboxen.
Die von Delphi (z.B. ShowMessage, MessageDlg) sind aber keine Windows-Messageboxen.
Mit denen funktioniert das nicht.

Die Dialoge die Du meinst sind, IMHO, alle von der Klasse #32770.
also kann ich jetzt irgendwie den meldungstext auslesen?

das mit strg + c geht bei showmessage... nicht - hab ich ausprobiert!
naja - mir fällt kein weiterer lösungsweg ein :-(

mfg,
heiopei

Christian Seehase 21. Apr 2005 17:47

Re: meldung eines anderen programms ermitteln?
 
Moin Heiopei,

der einzige Lösungsweg der mir dazu einfällt (nicht als Witz gemeint):
Einen Screenshot von der Meldung durch ein OCR-Modul schicken.

Allerdings hätte ich nicht mal eine Idee, wo man so ein Modul herbekommen kann, weder frei noch kostenpflichtig.

heiopei 21. Apr 2005 19:19

Re: meldung eines anderen programms ermitteln?
 
ja, den lösungsweg hab ich mir auch schon gedacht - und ihn gleich wieder verdrängt ;-) :-(

tja, dann werd ich das wohl bleiben lassen :x

das mit hooken geht sicher nicht?!?

ps: was heißt orc-modul?

mfg,
heiopei

Christian Seehase 21. Apr 2005 19:25

Re: meldung eines anderen programms ermitteln?
 
Moin Heiopei,

OCR = Optical Character Recognition

Dies wird in Programmen genützt, die, z.B., aus eingescannten Seiten Textdateien erstellen können (vereinfacht gesagt).
Hierzu gehören, z.B., FineReader oder OmniPage.

c113plpbr 24. Apr 2005 01:12

Re: meldung eines anderen programms ermitteln?
 
Zitat:

Zitat von Christian Seehase
Die von Delphi (z.B. ShowMessage, MessageDlg) sind aber keine Windows-Messageboxen.
Mit denen funktioniert das nicht.

Bist du dir da sicher?
In meinem D05 & D7 Quellcode der Dialogs.pas steht mal
Delphi-Quellcode:
procedure TMessageForm.CustomKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if (Shift = [ssCtrl]) and (Key = Word('C')) then
  begin
    Beep;
    WriteToClipBoard(GetFormText);
  end;
end;
Ist das Aussagekräftig genug? Meine Tests bestätigen das ...

Zitat:

Zitat von heiopei
das mit hooken geht sicher nicht?!?

Du kannst es ja mal mit API-Hooks probieren, wobei es warscheinlich nicht allzu einfach ist einen Pointer auf die CreateMessageDialog Funktion innerhalb eines fremden Prozesses zu bekommen, da diese ja von Delphi zur Verfügung gestellt wird ...
Aber wenns nur für ein einziges (unveränderliches) Programm ist, könnte man das ja "Quick & Dirty" machen ... :zwinker: :angel2:

ciao, Philipp

Christian Seehase 24. Apr 2005 01:25

Re: meldung eines anderen programms ermitteln?
 
Moin Philipp,

zu dem Zeitpunkt als ich das geschrieben habe, hatte ich mit D5 gearbeitet, und damit geht es definitiv nicht.
TMessageForm hat die, inzwischen nachgerüsteten, Methoden einfach nicht.
Die sind offensichtlich, erst seit D6 vorhanden.

c113plpbr 24. Apr 2005 01:30

Re: meldung eines anderen programms ermitteln?
 
Zitat:

Zitat von Christian Seehase
zu dem Zeitpunkt als ich das geschrieben habe, hatte ich mit D5 gearbeitet, und damit geht es definitiv nicht.
TMessageForm hat die, inzwischen nachgerüsteten, Methoden einfach nicht.
Die sind offensichtlich, erst seit D6 vorhanden.

Sowas hab ich schon fast vermutet ... nun stellt sich eben nurnoch die Frage, ob dies in dem betreffenden Programm schon drin ist, oder nicht?!?

ciao, Philipp

Christian Seehase 24. Apr 2005 02:29

Re: meldung eines anderen programms ermitteln?
 
Moin Philipp,

den Weg über die Zwischenablage halte ich aber eh' nicht für sinnvoll, ausser das Programm sichert den alten Inhalt, und stellt ihn nach dem Auslesen des Message-Textes wieder her.


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