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 [gelöst] Fremde Anwendung ändert Caption (https://www.delphipraxis.net/54746-%5Bgeloest%5D-fremde-anwendung-aendert-caption.html)

gmc616 11. Okt 2005 00:43


[gelöst] Fremde Anwendung ändert Caption
 
Ich schreibe z.Z. an einem Tool für Veridis (vlt. kennt das ja jemand).
Dort ist es möglich über die "Veridis-Start-Leiste" mein Programm zu starten, was vom Endanwender auch so gewünscht wird.
Als Feature hat sich dort Veridis was dolles einfallen lassen, und zwar, dass alle Anwendungen, die über diese Startleiste gestartet werden, eine "animierte Caption" verpasst bekommen, d.h. die Caption meines Programms wird ständig verändert.
Das wäre ja nicht weiter wild, allerings habe ich ein noch ein Tool, das mittels FindWindow(nil,AppTitle); versucht mein Programm zu finden, um diesen eine WM-Message zu senden.

Das Problem: Wenn sich die Caption meines Programms ständig ändert, kann ich es mit FindWindow(nil,AppTitle); nicht finden.

Da stellen sich mir zwei Fragen:
Wie kann ich mein Programm trotzdem finden und ihm Nachrichten schicken, auch wenn sich die Caption ändert?
Oder:
Wie kann ich verhindern, dass diese "Startleiste" die Caption meines Programms verändert.

Habt ihr Ideen?

Gruß
gmc

Luckie 11. Okt 2005 00:57

Re: Fremde Anwendung ändert Caption
 
MSDN-Library durchsuchenFindWindow hat auch noch einen ersten Paramter.

muRR 11. Okt 2005 01:08

Re: Fremde Anwendung ändert Caption
 
Oder mittels MSDN-Library durchsuchenGetWindowText die Caption im andern Programm überwachen, und mit MSDN-Library durchsuchenWM_SETTEXT reagieren (bin mir aber nicht sicher, ob dies der einzige Weg ist, die Caption zu ändern).
Setzt natürlich einen mittleren Aufwand vorraus, da du alle Programme, die du überwachen möchtest, modifizieren müsstest. Ist auch nur eine Idee.

MfG

LoRd-MuldeR 11. Okt 2005 01:27

Re: Fremde Anwendung ändert Caption
 
Warrum musst du denn dein Programm erst finden, um ihm eine Message zu schicken?
Du kannst doch mit RegisterWindowMessage eine "neue" Message definieren, auf die nur deine Anwendung reagieren wird. Mittles HWND_BROADCAST schickst du diese Message dann an *alle* Anwendungen. Is ja nich schlimm, denn nur die Ziel-Anwendung wird auf diese Message reagieren.

Jedenfalls ne Idee für nen anderen Ansatz...

himitsu 11. Okt 2005 01:33

Re: Fremde Anwendung ändert Caption
 
Luckie hat's ja schon gesagt

Delphi-Quellcode:
FindWindow(AppClassName, nil);
@Mulder: wäre auch 'ne Möglichkeit ... bleibt nur noch die frage, ob er wirklich diese Nachricht an alle anderen Anwendungen versenden möchte und ob das wirklich nötig ist.

@muRR: Es scheint ja so, als wenn er den Titel garnicht ändern will, denn ansonsten könnte er es ja auch direkt in seinem Programm machen ... also derartige Umwege sind bestimmt nicht nötig (schließlich ist ja sowol das Zielprogramm, wo der Titel geändert wird, sowohl das sendende Programm von ihm)
Ihm ist es halt nur wichtig, daß die Daten versendet werden können, wozu er halt nur das Zielprogramm kennen muß, was sich ja dennoch mit FindWindow gut finden läßt.

gmc616 11. Okt 2005 01:37

Re: Fremde Anwendung ändert Caption
 
@Luckie:
Auch den ersten Parameter hab ich probiert, aber damit habe ich noch nicht mal mein Programm gefunden auch "mit ohne" "animierter Caption".

Allerdings habe ich grad festgestellt, dass, wenn die IDE läuft, meine Prozesse sowieso nicht gefunden werden.

Bin aber noch am tüffteln ...


P.S.:
@muRR:
Wenn ich dich richtig verstanden habe ... eine Zweite Applikation laufen zu lassen, um das Ändern der Caption zu überwachen finde ich "übertrieben".

Aber kann man WM_SetText für eine Form, in der eigendlichen Anwendung nicht auch abfangen?

Gibt es in D7-Prof eine Möglichkeit alle Nachrichten für/an meine Applikation anzuzeigen?
In einer Demo von D2005 hab ich sowas gesehen.
Hab ich mich verkuckt, oder hat es Borland mittlerweile auf die Reihe gekriegt?

P.P.S.:
@LoRd-MuldeR
RegisterWindowMessage -> ich glaube das wird die Lösung sein. :wall:
Das hatte ich mal testweise laut einem TUT hier im DP probiert.
Werde das morgen einbauen und bin sehr zuversichtlich, dass das funktioniert.
Super Tip!! Danke!
Sch... auf die Caption!

gmc

LoRd-MuldeR 11. Okt 2005 01:41

Re: Fremde Anwendung ändert Caption
 
Hab's mal kurz getestet. Geht 1a :-D


Anwendung 1:
Delphi-Quellcode:
Unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  PostMessage(HWND_BROADCAST,RegisterWindowMessage('MuldeR.TestMessages.Terminate'),1,1);
end;

end.
Anwendung 2:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, AppEvnts;

type
  TForm1 = class(TForm)
    ApplicationEvents1: TApplicationEvents;
    procedure ApplicationEvents1Message(var Msg: tagMSG;
      var Handled: Boolean);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
begin
  if Msg.message = RegisterWindowMessage('MuldeR.TestMessages.Terminate') then
    if (Msg.wParam = 1) and (Msg.lParam = 1) then
      Application.Terminate;
end;

end.

himitsu 11. Okt 2005 01:42

Re: Fremde Anwendung ändert Caption
 
Zitat:

Zitat von gmc616
@Luckie:
Auch den ersten Parameter hab ich probiert, aber damit habe ich noch nicht mal mein Programm gefunden auch "mit ohne" "animierter Caption".

Was hast'n dort angegeben?
Dort muß ja einfach nur der Klassenname des Forms angegeben werden ... also standardmäßig "TForm1", aber da dieser name ohl nicht so ganz einzigartig sein wird, solltest du sein Formular umbenennen.

gmc616 11. Okt 2005 02:01

Re: Fremde Anwendung ändert Caption
 
@himitsu: Natürlich hab ich dort meine Form-Klasse (TFrmTool) angegeben, hat aber nicht funktioniiert.

Hab noch mal auf die schnelle den Thread rausgesucht, welcher meinem Problem sehr nahe gekommen ist:
Programm nur 1x starten , der Beitrag von Christian Seehase.

Das ganze 'n bissl umgebastelt hat funktioniert und wird mit diesem Thema funktionieren.

Danke an Alle für die Tipps.
gmc


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