![]() |
Moin Luckie,
das ist zwar soweit richtig, allerdings ist die Chance dass so etwas passiert bei Verwendung eines GUID Strings wohl nahezu ausgeschlossen. Ansonsten würde auch das ganze Prinzip von MSI oder COM nicht so richtig sauber funktionieren können. |
Schon klar, ich meine ja nur.
Andererseits, wenn man beide Anwendungen selber programmiert, sollte man eigentlich in der Lage sein seine Fenster zufinden via Klasse oder Titel. Warum also andere Fenster mit der Nachricht belästigen? "Programmierer gegen Windows-Message Spam :!:" |
Wo setzte ich den in dem Code-Beispiel die GUID ein?
|
Moin Thomas,
das würde ich so machen:
Code:
Die GUID ist natürlich nur ein Beispiel. Sie muss aber zwingend in jedem der beteiligten Programme exakt die gleiche sein.
[b]var[/b]
Form1: TForm1; dwMessage : DWORD; [b]implementation[/b] [color=#000080]{$R *.DFM}[/color] [b]initialization[/b] [b]begin[/b] dwMessage := RegisterWindowMessage('BB3D446B-80C1-4A0E-843F-1376A2CEF1D6'); [b]end[/b]; |
Wie bau ich das bezogen auf diesen Code ein?
Sender: Code:
Code:
procedure TForm1.FormCreate(Sender: TObject);
var aCopyData: TCopyDataStruct; p: PChar; begin p := 'Hallo!'; with aCopyData do begin dwData := 0; cbData := StrLen(p) + 1; lpData := p; end; SendMessage(FindWindow('TFormRecv', nil), WM_COPYDATA, Longint(Handle), Longint(@aCopyData)); Application.Terminate; end; Receiver:
Code:
Code:
type TFormRecv = class(TForm) private procedure WMCopyData(var Msg: TWMCopyData); message WM_COPYDATA; end; // ... procedure TFormRecv.WMCopyData(var Msg: TWMCopyData); begin ShowMessage(String(Msg.CopyDataStruct.lpData)); end; |
Liste der Anhänge anzeigen (Anzahl: 1)
Moin Thomas,
da in Deinem Beispiel mit WM_COPYDATA als Message gearbeitet wird: Gar nicht. ;-) Ich hab' da mal eine Demo angehängt für RegisterWindowMessage. Beim Button "Einfach" wird, mittels der selbst registrierten Message, und HWND_BROADCAST an alle Fenster die Message geschickt. Alle laufenden Instanzen des Programmes erhalten den Index der aktuell angewählten Zeile weitergeleitet, so dass im Edit Feld der Inhalt der Zeile steht. Beim Button "Gezielt" wird, mit Hilfe des Fenstertitels, gezielt nach allen laufenden Instanzen des Programmes gesucht, und diesen gezielt die eigene Message geschickt. Hierbei wird dann der Pointer auf einen String als Parameter mitgegeben, und dieser String dann im Edit Feld angezeigt. Man könnte das Ganze noch so ergänzen, dass die sendende Instanz eine Message an sich selber verwirft, und/oder das kein String, sondern ein Pointer auf eine beliebige andere (eigene) Struktur übergeben wird. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:00 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